使用Qt播放RTP视频流?

时间:2009-12-05 16:22:09

标签: c++ qt video-streaming gstreamer

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

我的实施基本计划是:

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

我的环境:

  • Ubuntu 9.10
  • Qt 4.6

我的问题:

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

修改
我找到的一个解决方案是将libVLC与Qt结合使用,我在此thread中了解到了这一点。这是感兴趣的code sample。 我还在寻找基于Phonon的解决方案。
理想情况下,我只需提供一个SDP文件即可完成工作。

2 个答案:

答案 0 :(得分:3)

我能够使用libVLC解决方案让它工作。我不能保证这是最佳解决方案,尽管我只是停止照顾它。

这是link to the libVLC sample

答案 1 :(得分: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中播放该源吗?