WPF流直播视频

时间:2015-06-01 23:56:56

标签: c# wpf video-streaming

我正在使用WPF 4.5中的WinForms替换应用程序。

当前的WinForms应用程序从C ++组件流式传输视频。 C#WinForms控件具有以下代码:

public void StartVideoStream(int iCamera)
{
    if (InvokeRequired)
    {
        delStartVideoStream del = new delStartVideoStream(StartVideoStream);
        Invoke(del, new object[] { iCamera });
    }
    else
    {
        if (!VideoPlaying)
        {
            int iSuccess = ClientComm.StartVideoStream(iCamera, ucVideoPlayer.Handle,
                (ClientComm.streaming_protocols)Properties.Settings.Default.VideoStreamProtocol,
                Properties.Settings.Default.VideoStreamFrameRate);

            if (iSuccess != 0)
            {
                Debug.WriteLine("[ucVideo] Could not play video.");
            }
        }
        else
        {
            ClientComm.SelectVideoStream(iCamera);
        }
        VideoPlaying = true;
    }
}

您可以看到它将其句柄传递给COM组件,后者直接将视频写入其中。

问题是在WPF控件中没有句柄。我怎么能这样做WPF?

谢谢。

1 个答案:

答案 0 :(得分:0)

我看到这样做的唯一方法是使用HwndHost(https://msdn.microsoft.com/en-us/library/system.windows.interop.hwndhost%28v=vs.110%29.aspx)在WPF控件内托管WinForms控件。不幸的是,这让你回到WinForms领域。

HwndHost有点涉及到一个明智的答案,但这里有一个合理的教程:http://blogs.msdn.com/b/ivo_manolov/archive/2007/10/07/5354351.aspx

你应该能够从Vlc.DotNet库(https://github.com/ZeBobo5/Vlc.DotNet)获得一些有用的指针,它们做了类似的事情。基于此,如果将WPF应用程序窗口的句柄传递给COM组件,视频可能会覆盖整个窗口。另一方面,如果您从WPF组件内的WinForms组件与COM组件通信,则可以使用WinForms组件的句柄,并保持窗口的其余部分不受阻碍。