我想创建一个 Qt 小部件,它可以播放传入的 RTP 流,其中视频编码为 H264 并且不包含音频。

我的基本实施计划是这样的:

  • 创建声子 媒体源 对象(流类型)。
  • 将其与一个连接 QIO设备 提供数据的子类
  • 使用以下任一方法获取视频数据:
    • JRTPLIB 客户库
    • GStreamer gstrtpbin 插入。该插件负责卸载包并解码视频。也许这会提高声子识别数据的机会。

我的环境:

  • 乌班图9.10
  • Qt 4.6

我的问题:

  • 我的方法好吗?也许我忽略了一个更明显或更简单的解决方案?
  • 我目前遇到这个问题:当尝试播放视频流时,MediaObject 的状态变为 ErrorState,错误类型为 FatalError。谁能告诉我我做错了什么?

编辑
我发现的一个解决方案是将 libVLC 与 Qt 结合使用,我在这篇文章中了解到了这一点 线. 。这是一个 代码示例 对于有兴趣的人。我仍在寻找基于声子的解决方案。
理想情况下,我只需要提供 SDP 文件即可完成工作。

有帮助吗?

解决方案

我能够使用 libVLC 解决方案让它工作。我不能保证这就是 最好的 解决方案,因为我只是停止关注它。

这是一个 链接到 libVLC 示例.

其他提示

我理解 Phonon 至少在 Windows 中工作的方式是 QT 为 DirectShow (\plugins\phonon_backend\phonon_ds94.dll) 和 GStreamer 在您的情况下提供了一个声子后端插件。然后,您可以获取或编写自己的 DirectShow 过滤器,该过滤器可以接受 RTP 流作为源。DirectShow 负责解码,Phonon 负责渲染。

因此,如果后端工作,应用程序代码就很简单:

        Phonon::MediaObject *media = new Phonon::MediaObject();
        Phonon::VideoWidget *video = new Phonon::VideoWidget();
        Phonon::createPath(media, video);
        media->setCurrentSource(source);
        media->play();

问题似乎在于 GStreamer 后端接受 RTP 作为源。您可以在独立的 GStreamer 中毫无问题地播放该源吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top