1

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

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

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

PS:我正在使用visual studio和windows

4

2 回答 2

2

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

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

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

于 2013-02-05T15:14:08.563 回答
1

视频处理项目中提供了另一个在 Windows 上使用 live555 的代码示例。像 Eric 的建议一样,它使用 DirectShow(这是 Windows pre MediaFoundation 上的标准方式。使用 live 的代码可以在这里找到。

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

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

于 2014-02-20T15:31:50.053 回答