登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

面包会有的

... ...

 
 
 

日志

 
 

H263简介、基本原理(二)  

2009-06-09 15:05:16|  分类: VC++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

4、编解码原理图
 
 
 
5、h263编解码数据结构
H.263采用句法和语义学的方法对多路视频来管理的。
句法被划分为四层,四个层(从上到下)分别是图象(Picture)、块组(Group of Blocks)、宏块(Macroblock)、块(Block)。图象层每帧图象的数据包含一个图象头(a picture header),并紧跟着块组数据(Group of Blocks),最后是一个end-of-sequence码和填塞位。其中包括有图象开始码(PSC) (22 bits)、时域参照(TR)(8 bits)、类型信息 (PTYPE) (13 bits) 和量化器信息 (PQUANT) (5 bits)等十三个选项。
  PSC TR PTYPE PQUANT CPM PSBI TRB DBQUANT PEI PSPARE PEI Group of Blocks ESTUF EOS PSTUF
22   8  1      5       5   1    2    3         2    0/8/16                 Vari    22 Vari           (structure of Picture Lay)
每个块组层(GOB)包含了一个块组层头(a GOB header),紧跟着宏块数据(Macroblocks)。每个GOB包含了一行或多行宏块。对于每帧图象的第一个GOB(0号),不需要传送GOB头。而对于其它的GOB,GOB头可以为空,这决定于编码策略。译码器可以通过外部手段发送信号给远程变码器要求只传送非空GOB头,例如建议H.245。
 
GSTUF GBSC GN GSBI GFID GQUANT Macroblock Data
                     (structure of GOB Lay)
 
 


每个宏块(Macroblocks)中包含了一个宏块头(a macroblock header)和后续的块数据(data for blocks)。COD只出现在用PTYPE指定为"INTER"的图象帧中,对于这些图象中的宏块,当COD指定或PTYPE指示为"INTRA"时会出现宏块类型 & 色度的编码块样式(MCPBC)。如果PTYPE指示了"PB帧",对于B块的宏块 (MODB)会出现。只有在MODB中指定时才会出现CBPB(指示将传送宏块的B系数)和B宏块的运动矢量数据 (MVDB) (变长)。当MCPBC和CBPY中指定时会出现"块数据"。
COD MCBPC MODB CBPB CBPY DQUANT MVD MVD2 MVD3 MVD4 MVDB  Block Data
                          (structure of macroblock layer)
块层如果不在PB帧模式,一个宏块包含四个亮度块和两个色差块。在PB帧模式下,一个宏块包含12个块。在缺省H.263模式下,首先传送6个P块数据,然后是6个B块数据。
 
5、RTP  PAYLOAD FOR H263 STREAM 协议结构(在RTP中传输h263数据流)
 
当在网络中传输H263视频数据流时,可直接封装编码器的输出数据,对于每一视频帧,H263数据比特流无改变的封装在RTP中被传输,包括图片开始处理、整个图片头,还有混合长度处理,可变长度处理。被编码后的数据并没有加上装帧信息,所以多元的音频、视频信号不适合被封装在同一个包中,UDP和RTP提供了一个更加有效的方法来处理多元化。
RTP并不能提供一个可靠的、有次序的数据传输,因此数据包有可能丢失。为了使丢包得到最大程度的恢复,解码器必须能够处理已经到达的数据包。因而,能够独立处理每一个数据包是符合要求的。一些帧信息包含在每个数据包中,例如:source format 和 flag for optional features 能够帮助解码器在丢失数据包的情况下正确、高效的处理帧。
在RTP中H263视频数据流将被装载成payload data,一个新的H263载荷头部被定义在载荷头部第5个区域(section 5),这个区域定义了RTP头和H263视频数据包结构。
 
每一个RTP封包都有一个复合的RTP头,下面是H263视频数据的RTP封包的混合头部:Marker bit (M bit)、Payload Type(PT)、Timestamp.一个H263的TRP包如下:
0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                RTP header                      | |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    H.263 payload header                        | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     H.263 bitstream                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
每一个RTP包中只有一个H263 Video packet,H263 payload header 与 H263 video packet 一一对应。H.263 有效载荷头定义了三种格式(模式 A、模式 B 和模式 C)。在模式 A 中,在实际压缩 H.263 视频比特流之前存在4字节的 H.263 有效载荷头。这样允许在 GOB 边界有分段。在模式 B 中,使用的是8字节的 H.263 有效载荷头,且每个数据包从 MB 边界开始,没有 PB 帧选项。最后,模式 C 中使用的是12字节的 H.263 有效载荷头,采用 PB 帧选项支持在 MB 边界的帧分段。
 
H.263 有效载荷头定义了三种格式(模式 A、模式 B 和模式 C)。在模式 A 中,在实际压缩 H.263 视频比特流之前存在4字节的 H.263 有效载荷头。这样允许在 GOB 边界有分段。在模式 B 中,使用的是8字节的 H.263 有效载荷头,且每个数据包从 MB 边界开始,没有 PB 帧选项。最后,模式 C 中使用的是12字节的 H.263 有效载荷头,采用 PB 帧选项支持在 MB 边界的帧分段。
  模式 A 中的头格式如下所示:

 
 
 
 
1 2 5 8 11 12 13 14 15 16 bit
F P SBIT EBIT SRC I U S A R
R (cont.) DBQ TRB TR

 
F ― 标志位,表示有效载荷头的模式,具有以下几个值:
0 ― 模式 A;
1 ― 模式 B 或模式 C,取决于 P 位。
P ― P 指定可选的 PB 帧模式。
SBIT ― 起始位,指定最重要位(在第一个数据字节中忽略)的编号。
EBIT ― 结束位,指定最不重要位(在最后一个数据字节中忽略)的编号。
SRC ― 源格式(在 H.263 标准中 PTYPE 的位6、7和8压缩比特流)表示当前图片解析。
I ― 图片编码类型(在 H.263 标准中 PTYPE 的位9压缩比特流)。
U ― 在当前图片头中,如果无限制运动向量选项值为1,那么该值设置为1(在 H.263 标准中 PTYPE 的位10压缩比特流),否则该值为0。
S ― 在当前图片头中,如果基于语法的算法编码选项值为1,那么该值设置为1(在 H.263 标准中 PTYPE 的位11压缩比特流),否则该值为0。
A ― 在当前图片头中,如果高级预测选项值为1,那么该值设置为1(在 H.263 标准中 PTYPE 的位12压缩比特流),否则该值为0。
R ― 预留,值为0。
DBQ ― 用于计算量化值的差分量化参数,当使用 PB 帧选项时,B 帧的量化值基于 P 帧的量化值。该值需要与 H.263 标准压缩比特流中的 DBQUANT 相同。如果不是采用的 PB 帧选项,则该值为0。
TRB ― 该字段是作为 H.263 标准压缩比特流中 B 帧的暂时参考。如果不是采用的 PB 帧选项,则该值为0。
TR ― 该字段是作为 H.263 标准压缩比特流中 P 帧的暂时参考。如果不是采用的 PB 帧选项,则该值为0。
  模式 B 中的头格式如下所示:

 
1 2 5 8 11 16 bit
F P SBIT EBIT SRC QUANT
GOBN MBR R
I U S A HMV1 VMV1 HMV2 VMV2
           

 
关于 F、P、SBIT、EBIT、SRC、I、U、S 和 A 各定义请参照模式 A。
QUANT ― 在数据包起始进行编码的第一个 MB 的量化值。如果数据包以 GOB 头开始,那么该值设置为0。
GOBN ― 数据包起始处的 GOB 编号。不同的解析中 GOB 编号不同。
MBA ― 数据包中第一个 MB 的 GOB 内的地址,按照扫描顺序从0开始计数。例如任意 GOB 中的第三个 MB 设置为 MBA = 2。
R ― 预留,值为0。
HMV1、VMV1 ― 为数据包中的第一个 MB 设置的水平和垂直运动向量预测。如果有某四个运动向量能为当前 MB 提供高级预测选项功能时,那么这些向量就是 MB 中的1号块的运动向量预测。
HMV2、VMV2 ― 为数据包中第一个 MB 的3号块提供的水平和垂直运动向量预测。如果有某四个运动向量能为当前 MB 提供高级预测选项功能时,需要该字段,这是因为 MB 中的3号块需要不同于 MB 中其它块的运动向量预测。当 MB 只具有一个运动向量时,不需要使用这两个字段。
  模式 C 中的头格式如下所示: 

 
1 2 5 8 11 16bit
F P SBIT EBIT SRC QUANT
GOBN MBR R
I U S A HMV1 VMV1 HMV2 VMV2
RR
RR(c) DBR TRB TR
           

 
  关于 F、P、SBIT、EBIT、SRC、I、U、S、A、DBQ、TRB 和 TR 各定义请参照模式 A。关于 QUANT、GOBN、MBA、HMV1、VMV1、HMV2 和 VNV2 各定义请参照模式 B。
  RR ― 预留,设置为0(19 bits)。


 

  评论这张
 
阅读(2354)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018