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