使用Qt播放RTP视频流?

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

我的基本实现计划如下:

创建 Phonon MediaSource 对象(流类型)。 将其与提供数据的 QIODevice 子类连接。 使用以下任一方式获取视频数据:
  • JRTPLIB 客户端库
  • GStreamer gstrtpbin 插件。该插件负责去包装和解码视频。这可能会提高 Phonon 识别数据的几率。

我的环境:

  • Ubuntu 9.10
  • Qt 4.6

我的问题:

  • 我的方法可行吗?也许我忽略了更明显或更简单的解决方案?
  • 我目前遇到的问题是:当尝试播放视频流时,MediaObject的状态变为ErrorState,错误类型为FatalError。有人能告诉我我错在哪里吗?

编辑
我找到的一个解决方案是使用libVLC结合Qt,我在这个线程中学到了这一点。对于感兴趣的人,这里有一个代码示例。 我仍在寻找基于Phonon的解决方案。
理想情况下,我只需要提供一个SDP文件就可以完成任务。

2个回答

3

我使用libVLC解决方案成功地使其工作。但是我不能保证这是最好的解决方案,因为在那之后我就没有继续寻找其他方案了。

这里是一个链接到libVLC示例


看起来你已经把这个文件删除了。有再次发布代码的机会吗,还是它已经消失了? - user35147863
@StackedCrooked 有没有办法使用文件从IP摄像头获取流? - praxmon

2
我理解 Phonon 的工作方式(至少在 Windows 下)是 QT 为 DirectShow(\plugins\phonon_backend\phonon_ds94.dll)和 GStreamer 提供了 Phonon 后端插件。然后,您可以获取或编写自己的 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中播放该源而没有任何问题?


我还没有成功让它工作。播放本地文件可以,但是当我尝试加载RTP流(通过读取RTP数据包的MediaSource(QIODevice)对象)时,VideoPlayer仍然停留在LoadingState。现在我正在尝试另一种方法:我正在使用GStreamer的gstrtpbin插件来读取传入的RTP数据,解码视频流并将其连接到Qt小部件。 - StackedCrooked

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接