8

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

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

  • 创建一个 Phonon MediaSource对象(流类型)。
  • 将其与提供数据的QIODevice子类连接
  • 使用以下任一方法获取视频数据:
    • JRTPLIB客户端库
    • GStreamer gstrtpbin插件。这个插件负责卸载包和解码视频。也许这会提高 Phonon 识别数据的机会。

我的环境:

  • Ubuntu 9.10
  • Qt 4.6

我的问题:

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

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

4

2 回答 2

3

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

这是libVLC 示例的链接

于 2010-07-28T19:30:51.323 回答
2

我理解 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 中毫无问题地播放该源吗?

于 2009-12-07T16:52:42.407 回答