【发布时间】:2021-02-17 10:31:53
【问题描述】:
我有一个提供 UDP 视频流的光学系统。
来自设备规范常见问题解答:
以太网链路上提供单个元数据 (KLV) 流和带有元数据 (KLV) 的压缩视频 (H.264)。压缩视频和元数据耦合在符合 STANAG 4609 标准的同一流中。每个编码的视频流都与相关元数据一起封装在以太网 UDP/IP 上的 MPEG-TS 单个节目流中。视频和元数据通过使用时间戳进行同步。
还有其他设备可以提供有关飞机状态(速度、坐标等)的数据。此数据应与视频一起显示在客户端 GUI 显示器上。当然要和当前视频帧同步。
我想到的一种方法是将这些数据嵌入到视频流中。但我不确定是否有可能或是否应该为此目的使用其他(而非 UDP)协议。
使用这种方法是否可能/合理? ffmpeg 库适合这种情况吗? 如果不是,那么将数据与视频帧同步的其他方法是什么。 延迟至关重要。虽然带宽限制在 2-5 Mbps。
似乎可以使用 ffmpeg:AVPacket 可以使用函数 av_packet_add_side_data 提供附加数据,该函数采用预分配的缓冲区、大小和类型 AVPacketSideDataType。
但是,我现在不确定AVPacketSideDataType 中的哪个enum value 可以用于自定义用户提供的二进制数据。
类似的东西可能会满足我的需要:
【问题讨论】:
-
数据应该是视频的一部分还是单独的?
-
@llogan 我认为它应该包含在视频流中,以便与相应的视频帧同步。
-
如果你希望它在实际的视频图像中,比如像hardsubs一样“烧录”,你可以使用带有
reload选项的drawtext过滤器。但也许您希望它作为单独的数据? -
@llogan 我不希望它被绘制在实际框架上。我需要一个单独的数据。有没有办法将它作为某种元数据添加到视频流中?
-
容器是什么?
标签: c++ ffmpeg video-streaming