我目前有一个 C# 项目的 LibVLC 设置,它使用面板输出视频流。由于 WPF 更适合我想要实现的一些 GUI 选项,我现在已经将我的项目切换到它。但是,我注意到 WPF 控件没有像 C# 控件那样的句柄。
我找到了这些... http://wpfmediakit.codeplex.com/ http://videorendererelement.codeplex.com
但是我是 WPF 的新手,不知道如何实际集成它们。在 WPF 中从 LibVlC 输出视频流的最佳方法是什么?
我目前有一个 C# 项目的 LibVLC 设置,它使用面板输出视频流。由于 WPF 更适合我想要实现的一些 GUI 选项,我现在已经将我的项目切换到它。但是,我注意到 WPF 控件没有像 C# 控件那样的句柄。
我找到了这些... http://wpfmediakit.codeplex.com/ http://videorendererelement.codeplex.com
但是我是 WPF 的新手,不知道如何实际集成它们。在 WPF 中从 LibVlC 输出视频流的最佳方法是什么?
我设法通过使用 WindowsFormsHost 控件解决了这个问题,并且只使用了一个面板,就像我之前在我的 Win Forms 应用程序中所做的那样。仍然似乎使用 WPF 原生的其他东西会更好,但现在这工作正常。
恐怕这不可能……
由于 WPF 控件不是幕后的 Win32 控件(MS 特定的 HWND 或更通用的 HANDLE),就像大多数 WinForms 控件一样,为 libvlc 提供 HANDLE 以进行渲染是不可能或不容易的。
看这里
屏幕上的所有 WPF 元素最终都由 HWND 支持。当您创建 WPF Window 时,WPF 会创建一个顶级 HWND,并使用 HwndSource 将 Window 及其 WPF 内容放入 HWND。应用程序中的其余 WPF 内容共享单个 HWND。一个例外是菜单、组合框下拉菜单和其他弹出窗口。这些元素创建自己的顶级窗口,这就是 WPF 菜单可能会超出包含它的窗口 HWND 边缘的原因。
您可以尝试使用 Window 并尝试像这样获取它的句柄:
IntPtr windowHandle = new WindowInteropHelper(windowInstance).Handle
然后将此句柄传递给 libvlc。请记住在窗口的 Loaded 事件中获取此句柄,请参见此处
但这将限制您使用顶级 Window 控件,这似乎不是您想要的。