使用H264编码的帧发送每帧元数据

时间:2013-06-22 20:16:45

标签: ffmpeg streaming metadata h.264 live555

我们正在寻找一种方法,将每帧元数据(例如ID)与H264编码的帧从服务器发送到客户端。

我们目前正在开发一个远程呈现应用程序,其中客户端和服务器端都在积极参与。 服务器呈现具有所有效果,照明等的高质量图像。 客户端还具有模型信息并呈现漫射图像,该图像在带宽过低或图像必须变形时使用以避免卡顿。

到目前为止,我们使用ffmpeg对服务器端的帧进行编码,并使用live555将它们流式传输到客户端,客户端接收rtsp-stream并使用ffmpeg再次对帧进行解码。

对于我们的应用程序,我们现在需要发送每帧元数据。 我们希望客户端告诉服务器现在的摄像头。 理想情况下,我们能够将客户端的视图矩阵发送到服务器,呈现相应的帧并将其与其视图矩阵一起发送回客户端。因此,当客户端收到一个帧时,我们需要确切地知道帧的渲染位置。

或者,我们也可以使用ID标记每个视图矩阵,将其发送到服务器,渲染帧并使用相同的ID对其进行标记并将其发回。在这种情况下,我们必须在客户端再次将正确的矩阵分配给帧。

经过多次尝试用ffmpeg实现上述意图后,我们得出结论ffmpeg没有提供所需的功能。 ffmpeg仅为元数据提供了一组修复的预定义字段,它既不能存储矩阵,也不能为每个关键帧设置,这对我们来说不够频繁。

现在我们正在考虑使用live555。到目前为止,我们有一个随需应变的服务器,使用H264VideoStreamDiscreteFramer获取VideoSubsession以包含我们自己的FramedSource类。在这个类中,我们加载编码的AVPacket(来自ffmpeg)并通过网络发送其数据缓冲区。现在我们需要一种方法将每一帧的某种元数据发送给客户端。

您对如何使用live555或其他库解决此元数据问题有什么想法吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

似乎在评论中回答了这个问题:

<块引用>

通过嵌入数据的自定义工具管道 ffmpeg 的输出 在 264 基本流中通过 SEI

也有人给出了以下答案,几年前由于可疑原因删除了(很简短,但似乎确实包含了足够的信息):

<块引用>

您可以使用 MPEG-4 来实现。有关详细信息,请参阅 MPEG-4 Part 14 详情。