【发布时间】:2011-09-13 08:24:52
【问题描述】:
我需要获取大量 MPEG4V1(Microsoft MPEG-4 VKI Codec V1)位于数据包开头的数据(由某些 DVR 设备发送)。
数据包结构如下所示:
- 压缩的 MPEG4 数据。
- 长整数 - 事件和绊线的数量。
- 长整数 - 事件数。
- 事件 - 事件的顺序。
- 长整数 - 绊线数。
- Tripwire - 绊线序列。
- 长整数 - 循环冗余码 (CRC)。
所以没有迹象表明如何知道 MPEG4 数据在哪里结束(或者那里有?), 我应该从哪里开始阅读这些额外的数据,例如“事件和绊线的数量”等等......
我上传了两个数据包,因此您可以看到实际数据的样子: recvData1.txt, recvData2.txt.
我尝试使用带有 avcodec_decode_video 函数的 FFmpeg 库解码这些数据包,并从我的 recvData 缓冲区末尾逐字节删除,以期获得任何结果,
但 FFmpeg 总是返回如下错误消息:
"[msmpeg4v1 @ 038865a0] 无效的起始码", “[msmpeg4v1 @ 038865a0] 标头损坏”。
在了解 MPEG4 的内部工作原理方面,我不是很好的专家, 但从错误消息来看,可以清楚地看到我在缓冲区开始时缺少一些用于解码的数据。
所以我不确定我在这里得到了什么部分/类型的 MPEG 数据..
也许它是某种 MPEG 的“帧”数据,它是“结束”指示或什么?
我什至将我的 recvData 缓冲区的开头与我在网络“http://www.trekmania.net/clips/video_clips4.htm”上找到的一些 MPEG4V1 编码视频文件进行了比较检查我的缓冲区的开头是否真的包含 MPEG 数据..而不是某种 DVR 供应商特定的东西..
我注意到大约有 20 字节的数据 (在我的数据包数据的开头,以及大约 180 字节之后的 .avi 文件中......) 看起来像某种标题或其他东西..
请查看此图片:“http://ggodis.gamedev.lt/stackOverflow/recvData.jpg”
也许有人知道这部分 MPEG4V1 数据代表什么?
附: ..我检查了收到的数据包的 CRC 值,它们是正确的..
【问题讨论】: