日期:2014-05-18  浏览次数:20753 次

贴源码求助-网络视频传输相关
以下代码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);