贴源码求助-网络视频传输相关
以下代码VS2008SP1下编译通过
WinXP与WIN7运行通过
运行状况描述:1.通过Encoder对AVI格式视频文件进行编码广播,以Media Player和本人自写播放界面本机连接播放,连接时间大约3秒,声音与视频同步状况良好,其他操作状况良好,直观印象无延迟。
2.通过Encoder采集普通摄像头视频源与耳麦话筒音频编码广播,本机以MediaPlayer连接时间大约7秒,音频与视频同步状况良好,但它们同步地延迟于实时15秒左右,其他操作状况良好
测试硬环境描述:盈通G41V主板集成声卡,集成显卡+E5300CPU 本机发送,本机接收
猜测:延迟主要瓶颈在于音频视频采集后的编码过程,由于纯软环境编码造成大量时间浪费
拟采用解决办法:调出Encoder数据缓冲区音频和视频元数据,对其进行相关简单处理后直接发送至接收端再进行显示处理,以网络带宽为代价,避免掉时间浪费。懒人的办法,LOL。
问题:Encoder的数据缓冲区在哪儿。翻遍了SDK文档,没找到相关文字。或者是因为本人E文水平太烂了吧,呵呵。
希望路过的朋友能给指点迷津.
邮件:cikemomoloveme@yahoo.cn
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
//添加窗口管理程序集引用
using System.Windows.Forms;
using System.Drawing;
//添加线程管理程序集引用
using System.Threading;
//添加网络传输及IO程序集引用
using System.Net;
using System.IO;
//添加视频音频编码解码程序集引用
using Microsoft.Expression.Encoder;
using Microsoft.Expression.Encoder.Live;
namespace _Home
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
private System.Windows.Forms.NotifyIcon myIcon;
private System.ComponentModel.IContainer components;
public MainWindow()
{
InitializeComponent();
//设置容器
this.components = new System.ComponentModel.Container();
//定义托盘图标
this.myIcon = new NotifyIcon(this.components);
//注意路径设置
string iconPath = Directory.GetCurrentDirectory() + "/Image/Icon_xp_19.ico";
myIcon.Icon = new Icon(iconPath );
//定义托盘菜单
myIcon.ContextMenu = new System.Windows.Forms.ContextMenu();
//定义托盘菜单项
System.Windows.Forms.MenuItem ItemF = new System.Windows.Forms.MenuItem();
System.Windows.Forms.MenuItem ItemS = new System.Windows.Forms.MenuItem();
System.Windows.Forms.MenuItem ItemA = new System.Windows.Forms.MenuItem();
System.Windows.Forms.MenuItem ItemB = new System.Windows.Forms.MenuItem();
ItemF.Text = "开始监控";
ItemS.Text = "后台监控";
ItemA.Text = "重写证书";
ItemB.Text = "退出监控";
//添加菜单项到菜单
myIcon.ContextMenu.MenuItems.Add(0, ItemF);
myIcon.ContextMenu.MenuItems.Add(1, ItemS);
myIcon.ContextMenu.MenuItems.Add(2, ItemA);
myIcon.ContextMenu.MenuItems.Add(3, ItemB);
//定义菜单项事件处理程序
ItemF.Click += new EventHandler(ItemF_Click);
ItemS.Click += new EventHandler(ItemS_Click);
ItemA.Click += new EventHandler(ItemA_Click);
ItemB.Click += new EventHandler(ItemB_Click);
//显示托盘图标及提示文字
myIcon.Visible = true ;
myIcon.Text = "XXX";
//定义托盘图标事件处理程序
myIcon.Click += new EventHandler(myIcon_Click);