视频编解码器起始码

时间:2020-03-05 18:43:48  来源:igfitidea点击:

是否有人知道(或者知道其中包含的资源)常见视频格式(MPEG-1 / 2/4,.wmv,.mov等)的帧起始代码列表。

例如,MPEG-1视频帧(我认为)将始终以" 00 00 01 00"开头。

从本质上讲,我想了解这些信息,以便编写一个程序,该程序可以自动为多种不同的视频格式找到整个视频中的帧的开头。

解决方案

回答

我们想实现什么?

这是视频容器类型如何构成的问题吗?

参见例如:http://www.daubnet.com/formats/AVI.html

那是对avi文件的结构的描述。 Google可能会找到其他容器文件格式。

录制视频时,通常由单个帧组成,请考虑目录中的单个位图文件。

如果只有一个视频文件,则将这些帧流放入一个容器中,该容器具有描述内容的标头和将文件顺序存储在文件中的特定布局。

我自己的容器的简单示例:

{
   struct header
   {
      unsigned int frametype;
      unsigned int framesize;
   };

   byte*  readFrame( header* pHdr, int frameNum )
   {
       byte* pFirstFrame = ((byte*) pHdr) + sizeof( header );
       return pFristFrame + frameNum * pHdr->framesize;
   }
}

还有其他几种容器类型。 AVI只是这些容器类型之一。
要获取各个框架,我们必须解释文件中的标题,然后根据该信息计算要解析的框架的位置。

我向我们发布了一个指向avi文件格式定义的链接。在其他地方,我们可以获得有关mpeg / mkv / ogm文件格式的信息。

我们需要此信息才能使程序正常工作。

附带说明一下,压缩格式不能单独保护所有单独的帧。它们保护一个单独的帧,然后保护几个中间的帧,这些中间的帧仅包含有关当前帧与上一个完整帧的不同之处的信息。因此,我们不能提取每个帧编号的完整帧。