【问题标题】:WPF Stream Live VideoWPF 流式直播视频
【发布时间】:2015-06-02 17:39:31
【问题描述】:

我正在开发 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 中我该怎么做?

谢谢。

【问题讨论】:

    标签: c# wpf video-streaming


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-02
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 2014-02-16
      • 2020-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多