我有一个使用Microsoft.expression.encoder和framework 4.0播放视频的WPF应用程序,但是我在播放时有15秒的延迟。有任何建议可以减少广播时的延迟。
下面是代码
using Microsoft.Expression.Encoder.Live;
using Microsoft.Expression.Encoder;
private void button1_Click(object sender, RoutedEventArgs e)
{
try
{
EncoderDevice video = null;
EncoderDevice audio = null;
GetSelectedVideoAndAudioDevices(out video, out audio);
StopJob();
if (video == null)
{
return;
}
StopJob();
_job = new LiveJob();
if (video != null && audio != null)
{
//StopJob();
_deviceSource = null;
_deviceSource = _job.AddDeviceSource(video, audio);
_job.ActivateSource(_deviceSource);
// Finds and applys a smooth streaming preset
//_job.ApplyPreset(LivePresets.VC1HighSpeedBroadband4x3);
// Creates the publishing format for the job
PullBroadcastPublishFormat format = new PullBroadcastPublishFormat();
format.BroadcastPort = 9090;
format.MaximumNumberOfConnections = 50;
// Adds the publishing format to the job
_job.PublishFormats.Add(format);
// Starts encoding
_job.StartEncoding();
}
//webCamCtrl.StartCapture();
}
catch (Exception ex)
{
WriteLogFile(this.GetType().Name, "button1_Click", ex.Message.ToString());
}
}
我正在使用MediaElement在我的服务器和客户端系统上显示网络摄像头。
在客户端
try
{
theMainWindow.getServerIPAddress();
IP = theMainWindow.machineIP;
MediaElement1.Source = new Uri("http://" + IP + ":9090/");
}
catch (Exception ex)
{
}
答案 0 :(得分:2)
遗憾的是没有解决方案(至少截至2011年1月)。根据微软的说法:
"我们在编码期间添加了几秒钟的延迟,然后在服务器级别进行缓存,可以再增加5-20秒,最后Silverlight也会缓存另外几秒钟的延迟"
http://social.expression.microsoft.com/Forums/is/encoder/thread/898b2659-c0d5-4c84-8fba-225f58806f5d
答案 1 :(得分:0)
您可以使用PreviewWindow
而不是MediaElement
来消除客户端中的一些延迟,从而绕过在对客户端显示流之前对流进行编码的需要。 PreviewWindow
是一个WinForms控件,因此这只适用于WPF。
在XAML中:
<WindowsFormsHost>
<wf:Panel x:Name="PreviewPanel" />
</WindowsFormsHost>
代码背后:
var previewWindow = new PreviewWindow(new HandleRef(this.PreviewPanel, this.PreviewPanel.Handle));
_deviceSource.PreviewWindow = previewWindow;
// ..
_job.ActivateSource(_deviceSource);