代码之家  ›  专栏  ›  技术社区  ›  StackedCrooked

使用qt播放RTP视频流?

  •  8
  • StackedCrooked  · 技术社区  · 15 年前

    我想创建一个qt小部件,它可以播放传入的rtp流,其中视频编码为h264,不包含音频。

    我的基本实施计划是:

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

    我的环境:

    • Ubuntu 9.10
    • QT 4.6

    我的问题:

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

    编辑
    我发现的一个解决方案是将libvlc与qt结合使用,这是我在本文中了解到的。 thread . 这里有一个 code sample 为了感兴趣的人。 我仍在寻找一种基于声子的解决方案。
    理想情况下,我只需要提供一个SDP文件,工作就完成了。

    2 回复  |  直到 8 年前
        1
  •  3
  •   StackedCrooked    13 年前

    我可以使用libvlc解决方案让它工作。我不能保证这是 最好的 解决方案,尽管我只是停止关注这个问题。

    这里有一个 link to the libVLC sample .

        2
  •  2
  •   Vicken Simonian    15 年前

    我理解Phonon至少在Windows中工作的方式是qt为DirectShow(\plugins\phonon\u backend\phonon\uds94.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中播放该源代码而不产生任何问题吗?