【问题标题】:Vlc.Dotnet Play streaming h264 raw data on WPFVlc.Dotnet 在 WPF 上播放流式 h264 原始数据
【发布时间】:2020-11-13 23:45:42
【问题描述】:

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

我有来自 tcpsocket 的原始 h264 数据流,我想在 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),无需关心关于组件/元素如何工作。 喜欢this projectthis project

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

【问题讨论】:

  • 感谢您对 Vlc.DotNet 的关注,但请确保您已阅读自述文件中的警告消息: - 项目已进入维护模式 - 这部分让我后悔制作了真正的 WPF视频控制:github.com/ZeBobo5/…
  • MPV 的提及特别有用。谢谢!

标签: c# wpf tcp vlc vlc.dotnet


【解决方案1】:

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

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

也就是说,如果您仍想继续使用 Vlc.DotNet(已​​置于维护模式),您可能需要在 VlcMediaPlayerOptions 中指定您希望 libvlc 与 "--demux", "h264" 一起使用的解复用器

那么,你确实可以调用

   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

【讨论】:

  • 非常感谢您的帖子,现在我可以按照 LibVLCSharp 中的入门指南(尽管这需要我半天时间)轻松构建一个示例项目来播放本地媒体文件!下一步我将尝试“流播放”。
  • 而这个airspace issue正是我之前使用WindowsFormsHost时遇到的。因此,我说:WindowsFormsHost 方式并不完美。
  • 你能想象吗,我的应用程序只是整个项目的一部分(就像 Visual Studio 中的文本编辑器),而我的文本编辑器(我的视频元素)总是阻塞其他视图(弹出窗口 + 浮动) .然后我在guide 中看到:“我们决定用第三种解决方案来实现 WPF 控件”。所以,提前问一个问题:如果我使用 LibVLCSarp,<lvs:VideoView> 的行为会像我预期的那样吗?
  • 阅读 LVS WPF 文档。简而言之,如果您想在视频上放置内容,请将其放在 control 标签内,它将在视频上方的不可见窗口中呈现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-18
  • 2023-01-04
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 2014-01-26
  • 1970-01-01
相关资源
最近更新 更多