我的情况是,我需要获取位于数据包开头的一大块 MPEG4V1(Microsoft MPEG-4 VKI Codec V1)数据(由某些 DVR 单元发送)。
数据包结构如下所示:
- 压缩的 MPEG4 数据。
- 长整数 - 事件和绊线的数量。
- 长整数 - 事件数。
- 事件 - 事件的顺序。
- 长整数 - 绊线的数量。
- 绊线 - 绊线序列。
- 长整数 - 循环冗余码 (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 数据代表什么?
PS ..我检查了我收到的数据包的 CRC 值,它们是正确的..