gpt4 book ai didi

c++ - 使用自定义元数据嵌入视频流

转载 作者:行者123 更新时间:2023-12-04 22:45:09 25 4
gpt4 key购买 nike

我有一个提供 UDP 视频流的光学系统。
来自设备规范常见问题解答:

Both single metadata (KLV) stream and compressed video (H.264) with metadata (KLV) are available on Ethernet link. Compressed video and metadata are coupled in the same stream compliant with STANAG 4609 standard. Each encoded video stream is encapsulated with the associated metadata within an MPEG-TS single program stream over Ethernet UDP/IP/ The video and metadata are synchronized through the use of timestamps.


还有其他设备可以提供有关飞机状态(速度、坐标等)的数据。此数据应与视频一起显示在客户端 GUI 显示器上。当然它必须与当前视频帧同步。
我想到的一种方法是将这些数据嵌入到视频流中。但我不确定是否有可能或者我是否应该为此目的使用另一个(而不是 UDP)协议(protocol)。
使用这种方法是否可能/合理? ffmpeg 库适合这种情况吗?
如果不是,那么将数据与视频帧同步的其他方法是什么。
延迟至关重要。尽管带宽限制为 2-5 Mbps。

似乎可以使用 ffmpeg: AVPacket可以使用函数 av_packet_add_side_data 提供附加数据它采用预分配的缓冲区、大小和类型 AVPacketSideDataType .
但是,我现在不确定, enum valueAVPacketSideDataType可用于自定义用户提供的二进制数据。
类似的东西可能会用于我的需要:
How do I encode KLV packets to an H.264 video using libav*

最佳答案

引用听起来像您有一个包含两个基本流的传输流(一个是 H.264 视频,另一个是 KLV 数据)。传输流通过 UDP(或 TCP,或者只是一个文件,无论您想要什么 - 它主要独立于传输)发送。
Motion Imagery 手册(您可以从 NSG 注册表的 MISB 部分下载,地址为 https://nsgreg.nga.mil/misb.jsp - 位于未引用标准文档表的底部)中讨论了实现这种事情,详细信息请参见ST 1402(您可以在同一张表中找到)。我避免提供直接链接,因为版本会发生变化 - 只需查找最新的内容。
简短的版本是您可以在视频中嵌入时间戳(参见 ST 0603 和 ST 0604),然后将其与元数据时间戳相关联(精确时间戳,参见 ST 0601)。您不想在 AVPacket 上这样做虽然水平。相反,您需要将辅助数据放入 AVFrame , 与 AV_FRAME_DATA_SEI_UNREGISTERED键(https://ffmpeg.org/doxygen/trunk/group__lavu__frame.html#ggae01fa7e427274293aacdf2adc17076bca4f2dcaee18e5ffed8ff4ab1cc3b326aa)。您将需要一个相当新的 FFmpeg 版本。
注意:如果您只想查看 UDP 数据流 - 一侧是视频,另一侧是解码的 KLV,那么您可能想查看 jMISB 查看器应用程序:https://github.com/WestRidgeSystems/jmisb
它还提供了一个编码示例(生成器示例)。免责声明:我为该项目做出了贡献。

关于c++ - 使用自定义元数据嵌入视频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64685001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com