Vlc.Dotnet 在 WPF 上播放流式 h264 原始数据

Vlc.Dotnet Play streaming h264 raw data on WPF

全部。我是编程初学者,在视频上遇到了一些困难 decoding/playing。

我有来自 tcpsocket 的原始 h264 数据流,我想在 WPF usercontrol 上显示视频 usercontrol

由于我对 C++ 和视频的了解很少 decoding/encoding,所以 ffmpeg 对我来说会很难用。 所以我在考虑VLC是否可以做到这一点。

背景是: 我想用Scrcpy服务器搭建自己的“Android投屏&远程控制”WPF应用

到目前为止,我已经实现了:

然后下一步是:在 WPF 上显示视频 usercontrol

其实我之前试过另一种方案,可以得到我想要的

但我认为 <WindowsFormsHost/> 对于 WPF 应用程序来说并不完美,所以我试图找到一种 WPF 风格的方式。

当我搜索 Github 时,我发现如果我想从光盘或互联网播放媒体文件更容易,我只需要传递文件位置(例如 D:/MyFolder/mySampleVideo.mp4http://somesite/aSampleVideo.flv) 而无需关心 component/element 是如何工作的。 喜欢this project and this project

如果我使用VLC,如何直接播放raw h264数据流? 有没有像VlcPlayer.Play(NetworkStream myh264stram) {...}这样的方法?

But I think is not perfect for a WPF application, So I'm trying to find a WPF-style way.

在 WPF 应用程序中使用 WindowsFormsHost 的解决方案是我们为 WPF 找到的最佳解决方案,因为实现真正的 WPF 解决方案并没有很好的性能:https://github.com/ZeBobo5/Vlc.DotNet#writing-a-wpf-app--migrating-wpf-control-from-2x

就是说,如果您仍想继续使用 Vlc.DotNet(已处于维护模式),您可能需要指定希望 libvlc 与 [=12= 一起使用的解复用器] 在 VlcMediaPlayerOptions

那么,你确实可以调用

   mediaPlayer.Play(stream);

使用 LibVLCSharp,过程完全相同,但我们使用 MediaInput class 来保存对 Stream 的引用,请参阅:https://github.com/mfkl/lvst/blob/master/LVST/Program.cs#L72

using var mediaInput = new StreamMediaInput(stream);
using var media = new Media(libVLC, mediaInput);
using var mediaPlayer = new MediaPlayer(media);

另请参阅: