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应用
到目前为止,我已经实现了:
- 将服务器推送到设备并启动服务器
- 在PC和Android设备之间建立TCP连接
- 可以在socket中看到h264原始数据流
然后下一步是:在 WPF 上显示视频 usercontrol
其实我之前试过另一种方案,可以得到我想要的
- 将MPV用作媒体播放器
- 使用特定参数在我的应用程序中启动
mpv.exe
进程
- 在 WPF 宿主元素中嵌入 mpv window
但我认为 <WindowsFormsHost/>
对于 WPF 应用程序来说并不完美,所以我试图找到一种 WPF 风格的方式。
当我搜索 Github 时,我发现如果我想从光盘或互联网播放媒体文件更容易,我只需要传递文件位置(例如 D:/MyFolder/mySampleVideo.mp4
或 http://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);
另请参阅:
全部。我是编程初学者,在视频上遇到了一些困难 decoding/playing。
我有来自 tcpsocket
的原始 h264 数据流,我想在 WPF usercontrol
上显示视频 usercontrol
。
由于我对 C++ 和视频的了解很少 decoding/encoding,所以 ffmpeg
对我来说会很难用。
所以我在考虑VLC是否可以做到这一点。
背景是: 我想用Scrcpy服务器搭建自己的“Android投屏&远程控制”WPF应用
到目前为止,我已经实现了:
- 将服务器推送到设备并启动服务器
- 在PC和Android设备之间建立TCP连接
- 可以在socket中看到h264原始数据流
然后下一步是:在 WPF 上显示视频 usercontrol
其实我之前试过另一种方案,可以得到我想要的
- 将MPV用作媒体播放器
- 使用特定参数在我的应用程序中启动
mpv.exe
进程 - 在 WPF 宿主元素中嵌入 mpv window
但我认为 <WindowsFormsHost/>
对于 WPF 应用程序来说并不完美,所以我试图找到一种 WPF 风格的方式。
当我搜索 Github 时,我发现如果我想从光盘或互联网播放媒体文件更容易,我只需要传递文件位置(例如 D:/MyFolder/mySampleVideo.mp4
或 http://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);
另请参阅: