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

use*_*280 6 streaming metadata ffmpeg h.264 live555

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

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

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

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

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

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

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

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

谢谢你的帮助!

Den*_*din 0

看来这个问题在评论中得到了回答:

通过自定义工具传输 ffmpeg 的输出,该工具通过 SEI 将数据嵌入 264 基本流中

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

您可以使用 MPEG-4 来做到这一点。有关详细信息,请参阅 MPEG-4 第 14 部分的详细信息。