我有一个提供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。但是,我现在还不确定什么枚举值 of AVPacketSideDataType可以用于自定义用户提供的二进制数据。
类似的东西可以用来满足我的需要:
发布于 2020-11-09 08:47:55
这个引用听起来像是包含两个基本流的传输流(其中一个是H.264视频,另一个是KLV数据)。传输流是通过UDP发送的(或者TCP,或者只是一个文件,不管你想要什么--它基本上独立于传输)。
在运动图像手册(您可以从https://nsgreg.nga.mil/misb.jsp NSG注册表的MISB部分下载)和ST 1402 (在同一表中可以找到)中详细讨论了实现这类事情的方法。我避免提供直接链接,因为版本变化-只是寻找任何是当前的。
简短的版本是您可以在视频中嵌入时间戳(请参阅ST 0603和ST 0604),然后将其与元数据时间戳相关联(精确时间戳,请参阅ST 0601)。不过,您不希望在AVPacket级别这样做。相反,您需要使用AVFrame键( AV_FRAME_DATA_SEI_UNREGISTERED key,frame.html#ggae01fa7e427274293aacdf2adc17076bca4f2dcaee18e5ffed8ff4ab1cc3b326aa)将侧数据放入AV_FRAME_DATA_SEI_UNREGISTERED中。您将需要一个比较新的FFmpeg版本。
注意:如果您想要做的只是看到UDP数据流--一边是视频,另一边是解码KLV,那么您可能希望查看jMISB查看器应用程序:https://github.com/WestRidgeSystems/jmisb它还提供了一个编码示例(生成器示例)。免责声明:我对这个项目有贡献。
https://stackoverflow.com/questions/64685001
复制相似问题