我将欣赏一个使用Live555库将实时流呈现到屏幕上的示例。显然,它很简单,但是它确实有助于完成它,而不是简单地读“它很简单”! gmane网站指出:

“更新“testRTSPClient”代码(的副本)以使其呈现视频数据非常简单:您只需更改“DummySink”类,即可进行渲染(或调用解码器库进行渲染) )。特别是,您将在第479行更改“afterGettingFrame()”函数的实现。

(实际上,对于H.264视频,您可能还需要做一件事。H.264流具有带外配置信息(SPS和PPS NAL单元),您可能需要将这些信息提供给解码器对其进行初始化。要获取此信息,请调用“MediaSubsession::fmtp_spropparametersets()”(在视频“subsession”对象上)。这将为您提供(ASCII)字符串。然后,您可以将其传递给“parseSPropParameterSets()” ”,以为解码器生成二进制NAL单元。)


PS:我正在使用Visual Studio和Windows

最佳答案

我在上一份工作中做过类似的事情。诀窍是使用DirectShow进行渲染。基本上,live555本身不会解码或呈现任何内容,您需要某种h264解码器以及视频界面。对您来说幸运的是,DirectShow可以同时提供这两种功能,但是需要大量的编程才能开始工作。

live555仅提供流传输机制,这意味着它将从网络或文件源获取NAL数据包(如果需要,则为h264数据包)并将其推送到“DummySink”,您仍然需要解码(将NAL单元转换为位图),渲染(将位图绘制到屏幕上)。 live555不会为您做到这一点,但是其他库(例如ffmpeg)可以做到,但是我没有设法使其起作用,因此我们转向了DirectShow解决方案。即,“MS DTV-DVD解码器”非常有用,可以使用我们正在使用的芯片组提供的某些硬件加速功能(自动)。 live555的另一个有用功能是它将处理诸如RTSP的控制协议(protocol),以处理流的PLAY / STOP / PAUSE请求。

编辑:由于您正在搜索代码,我为您找到了一个开源的DirectShow filter that uses live555。您应该能够使用GraphStudio或GraphEdit之类的工具来运行它。最终,您可以学习如何create DirectShow graphs in c++。这确实不是很复杂,因为已经有大量示例。最困难的部分是创建过滤器,但是解码器和渲染器已经为您准备好了,我已经为您提供了Source过滤器。

09-08 01:02