使用live555渲染RTSP H.264视频流

时间:2013-02-05 15:01:22

标签: c++ h.264 live555

我很感激使用Live555库将实时流渲染到屏幕的示例。显然它很简单,但它确实有助于看到它完成而不是简单地读到“它很简单”! gmane网站声明:

“更新(testRTSPClient)代码的副本,以便呈现视频数据非常简单:您只需更改”DummySink“类,以便 it 进行渲染(或调用解码器库来进行渲染)。特别是,你将改变“afterGettingFrame()”函数的实现 - 在第479行。就是这样!

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

PS:我正在使用visual studio和windows

2 个答案:

答案 0 :(得分:2)

我在以前的工作中做了类似的事情。诀窍是使用DirectShow进行渲染。基本上,live555本身不会解码或渲染任何东西,你需要某种h264解码器以及视频表面。幸运的是,DirectShow提供了这两种功能,但需要大量的编程才能开始工作。

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

编辑:既然您正在搜索代码,我找到了一个开源的DirectShow filter that uses live555给您。您应该可以使用GraphStudio或GraphEdit之类的东西来运行它。最后,您可以了解如何create DirectShow graphs in c++。由于已经存在大量的例子,这实际上并不复杂。最困难的部分是创建过滤器,但解码器和渲染器已经存在,我已经为您提供了源过滤器。

答案 1 :(得分:1)

video processing project提供了另一个在Windows上使用live555的代码示例。与Eric的建议一样,它使用DirectShow(这是Windows pre MediaFoundation上的标准方式。使用live的代码可以找到here

如果您使用的是Windows 7,则会在渲染图形时将内置的H.264解码器插入媒体管道。在早期版本的Windows上,您必须安装自己的H.264解码器过滤器。

免责声明:我是视频处理项目的作者之一。