Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# wpf应用于15秒延迟的视频广播_C#_Wpf_Video Streaming_Expression_Broadcasting - Fatal编程技术网

C# wpf应用于15秒延迟的视频广播

C# wpf应用于15秒延迟的视频广播,c#,wpf,video-streaming,expression,broadcasting,C#,Wpf,Video Streaming,Expression,Broadcasting,我有一个WPF应用程序,用于使用Microsoft.expression.encoder和framework 4.0播放视频,但我在播放时延迟了15秒。是否有任何建议可以减少播放时的延迟 下面是代码 using Microsoft.Expression.Encoder.Live; using Microsoft.Expression.Encoder; private void button1_Click(object sender, RoutedEventArgs e) { try

我有一个WPF应用程序,用于使用Microsoft.expression.encoder和framework 4.0播放视频,但我在播放时延迟了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)
            {
            }

不幸的是,没有解决方案(至少截至2011年1月)。据微软称:

“我们在编码过程中增加几秒钟的延迟,然后在服务器级别进行缓存,可以再增加5-20秒,最后Silverlight也会再缓存几秒钟的延迟。”


您可以通过使用
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);