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
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
|
模式 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)。
|
文章引用自:http://www.goalercn.com/article/article.asp?Id=10244