需要有关处理MPEG4V1数据的帮助

时间:2011-09-13 08:24:52

标签: ffmpeg decoding mpeg-4 dvr

我正处于需要获得大量MPEG4V1的情况 Microsoft MPEG-4 VKI 编解码器V1 数据位于数据包的开头由某些DVR单元发送)。

数据包结构如下所示:

  • 压缩的MPEG4数据
  • 长整数 - 事件和绊网的数量。
  • 长整数 - 事件数。
  • 事件 - 事件的顺序。
  • 长整数 - 绊线数。
  • Tripwire - Tripwires序列。
  • 长整数 - 循环冗余码(CRC)。

因此,没有迹象表明如何知道 MPEG4 数据的结束位置(或者在那里?), 我应该从哪里开始阅读这些额外的数据,例如“事件数和绊网数”等......

我上传了两个数据包,因此您可以看到实际数据的样子: recvData1.txtrecvData2.txt

我尝试使用带有avcodec_decode_video函数的FFmpeg库解码这些数据包,并从我的 recvData 缓冲区的末尾逐字节删除,希望得到任何结果,
但FFmpeg只是总是返回错误消息,如下所示:

  

“[msmpeg4v1 @ 038865a0]无效的起始码”,   “[msmpeg4v1 @ 038865a0]标题已损坏”。

我不是那么了解MPEG4内部如何工作的专家, 但是从错误消息判断,我清楚地看到我在缓冲区的开头缺少一些解码数据。

所以我不确定我在这里获得了哪些部分/种类的MPEG数据..
也许这是某种MPEG的“帧”数据,带有“结束”指示还是什么?

我甚至将 recvData 缓冲区的开头与我在网上找到的一些MPEG4V1编码视频文件进行了比较“http://www.trekmania.net/clips/video_clips4.htm”检查我的缓冲区的启动是否真的包含MPEG数据 ..而不是某种DVR供应商特定的东西..

我注意到大约有20字节的数据 (在我的数据包数据的开头,以及大约180字节后的.avi文件中......) 看起来像某种标题或什么......

请检查此图片:“http://ggodis.gamedev.lt/stackOverflow/recvData.jpg”

也许有人知道这部分MPEG4V1数据代表什么?

P.S。 ..我检查了收到的数据包的CRC值,它们是正确的。

2 个答案:

答案 0 :(得分:2)

我成功解码了我的数据包。我的缓冲区开头的数据是“BITMAPINFOHEADER”..这就是我需要知道的。

答案 1 :(得分:0)

你在这里处理两件不同的事情:容器和编解码器。编解码器用于以某种数字形式对数据进行编码/解码(因此编码DECoder→CODEC)。所有变种中的MPEG4视频都是这样一个编解码器系列。

您需要注意的另一件事是容器。 AVI是一个容器,但还有很多其他容器。 MPEG2-TS,MPEG2-PS,MP4,MKV,MOV(Quicktime),FLV,Ogg,仅举几例。所有容器格式的共同点是,它们提供了用于存储和/或传输Codec帧/分组的框架。容器为您提供了在帧/数据包中寻址的必要信息。

容器处理de /多路复用器,简称“muxers”。

  

请检查此图片:“http://ggodis.gamedev.lt/stackOverflow/recvData.jpg”

真的?您知道使用Hex编辑器查找/操作RAW数据流吗?由于对Unicode复合代码点或类似代码点的误解,在文本编辑器中打开它们会导致各种基本信息丢失。

  

所以我不确定我在这里获得的MPEG数据的部分/类型。    也许它是某种MPEG的“帧”数据,它的“结束”指示还是什么?

这看起来像MP4容器文件的一部分。 MP4是一种非常精致的容器格式,它严重依赖于完整的标题。如果标题已损坏,则无法正常播放。