如何从H.263 raw data中取出视频的宽高以及Framerate

看了MP4Box的源码,后来对照代码参看了H.263的Specification,取宽高的 方法如下:

1. 读前22个bit(不是byte),然后转成int,这个值应该是32(0x20)。这是H.263 stream的start code,表示这是一个H.263的stream

2. 读第36-38bit,转成int,这个值就表示该263 stream的format,对应表如下:
"000" - forbidden
"001" - sub-QCIF
"010" - QCIF
"011" - CIF
"100" - 4CIF
"101" - 16CIF
"110" - reserved
"111" - extended PTYPE

具体到宽高,这里直接引用MP4Box中的代码(变量fmt就是36-38bit表示的值): 

 static void h263_get_pic_size(GF_BitStream *bs, u32 fmt, u32 *w, u32 *h)

{
   switch (fmt) {
   
case 1*= 128*= 96break;
   
case 2*= 176*= 144break;
   
case 3*= 352*= 288break;
   
case 4*= 704*= 576break;
   
case 5*= 1409*= 1152 ; break;
   
default*= *= 0break;
   }
}

 H.263 Specification中有一张sub-QCIF, QCIF...这些格式对应的宽高的表。


至于framerate,我看MP4Box中处理是这样的:首先从 MP4Box的命令行中看用户有没有给定-fps,如果没有,则设成 15。我觉得我们的 代码可以首先采用上次我们讨论的方案,将1/duration得到,如果出现什么问题, 直接设成15即可。
原文地址:https://www.cnblogs.com/super119/p/1924429.html