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
每个宏块(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
块层如果不在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
|
模式 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
| ||||
模式 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)。
|