WPF流直播视频

本文关键字:直播视频 WPF | 更新日期: 2023-09-27 17:52:50

我正在开发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组件,COM组件直接将视频写入它。

问题是WPF控件没有句柄。我如何在WPF中做到这一点?

谢谢。

WPF流直播视频

我看到这样做的唯一方法是使用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组件的句柄,并保持窗口的其余部分不受阻碍。