2

全部。我是编程初学者,在视频解码/播放方面遇到了一些困难。

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

由于我对 C++ 和视频解码/编码知之甚少,因此我很难使用它ffmpeg。所以我正在考虑 VLC 是否可以做到这一点。

背景是:我想使用Scrcpy服务器构建我自己的“Android 投屏和远程控制”WPF 应用程序。

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

  • 将服务器推送到设备并启动服务器
  • 在 PC 和 Android 设备之间建立 TCP 连接
  • 可以在套接字中看到 h264 原始数据流

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

实际上我之前尝试过另一种解决方案并且可以得到我想要的

  • 使用MPV作为媒体播放器
  • mpv.exe使用特定参数在我的应用程序中启动进程
  • 在 WPF 宿主元素中嵌入 mpv 窗口

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

当我搜索 Github 时,我发现如果我想从光盘或互联网播放媒体文件会更容易,我只需要传递文件位置(例如D:/MyFolder/mySampleVideo.mp4http://somesite/aSampleVideo.flv)而无需关心组件/元素的工作方式。喜欢这个项目这个项目

如果我使用 VLC,如何直接播放原始 h264 数据流?有没有类似的方法VlcPlayer.Play(NetworkStream myh264stram) {...}

4

1 回答 1

2

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

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

也就是说,如果您仍想继续使用 Vlc.DotNet(已​​置于维护模式),您可能需要"--demux", "h264"VlcMediaPlayerOptions

那么,你确实可以打电话

   mediaPlayer.Play(stream);

使用 LibVLCSharp,过程完全相同,但我们使用一个MediaInput类来保存对 的引用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);

另请参阅:C# LibVLCSharp player direct feed media

于 2020-07-24T09:50:46.810 回答