如何从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 * =   96 break ;
   
case   2 * =   176 * =   144 break ;
   
case   3 * =   352 * =   288 break ;
   
case   4 * =   704 * =   576 break ;
   
case   5 * =   1409 * =   1152  ;  break ;
   
default * =   * =   0 break ;
   }
}

 

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


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

你可能感兴趣的:(frame)