H.261:视频编码和解码(Video Coding and Decoding - CODEC)
H.261 是 ITU 的视频编码标准,主要针对于 64kb/s 的倍数的数据率而设计,又称为 P*64 (其中 P 是 1 到 30 的可变参数)。这些数据率适合于 ISDN 线路,这是视频编码原先设计的。H.261 (结合可以携带 RTP 的任意底层协议)通过实时传输协议(RTP)传输视频流。
编码算法是帧间预测、变换编码和运动补偿的混合。编码算法的数据率主要设置于 40Kbits/s 和 2Mbits/s 之间。INTRA 编码为每个 8*8 象素块编码并直接将它们发送给转换处理块。另一方面, INTER 编码的帧被相关的其它帧编码。帧间预测消除了时间冗余,而变换编码消除了空间冗余。运动矢量用来帮助提供运动编译码补偿。为了消除传输比特流过程中更进一步的冗余现象,需要使用可变行程编码。
H.261 支持编码器中的运动补偿。运动补偿中,在前帧(恢复帧)中构造了一个搜索域来决定最好的参考宏块。H.261 支持两种图像分辨率:QCIF (1/4 公共交换格式),其像素为 144*176;CIF (公共交换格式),其象素为 288*352。
视频多路器将压缩数据构造成分层比特流,共有四层:
- 图像层:与视频图像(帧)相符;
- 组块:与 1/12 of CIF 图像或 1/3 of QCIF 相符;
- 宏块:与亮度的 16*16 象素和两个相应空间色度的 8*8 象素成分相符;
- 块:与 8*8 象素相符。
协议结构
3 | 6 | 7 | 8 | 12 | 17 | 22 | 27 | 32 bit |
SBIT | EBIT | I | V | GOBN | MBAP | QUANT | HMVD | VMVD |
- SBIT ― 起始位。最重要的位(在第一个数据 octet 中忽略)编号。
- EBIT ― 结束位。最不重要的位(在最后一个数据 octet 中忽略)编号。
- I ― INTRA-frame 编码数据字段。如果该流只包含 INTRA-frame 编码块,则设置为 1 ;如果该流可能包含或不包含 INTRA-frame 编码块,则设置为 0 。
- V ― 运动矢量标记。如果该流不使用运动矢量标记时,该值设为 0 ;如果该流可能或可能不使用运动矢量标记时,该值设为 1 。
- GOBN ― GOB 编号。在数据包的起始处对 GOB 编号进行有效编码。如果数据包以 GOB 头开始,那么该值设置为 0 。
- MBAP ― 宏块地址预测。编码宏块地址预测 (即在早先的数据包中编码的最后一个 MBA) 。该预测从 0 到 32(预测有效 MBA 从1到33),但由于比特流在 GOB 头和 MB1 之间不能被分段 , 所以数据包起始处的预测值永远不会是 0 。
- QUANT ― 量化字段。在数据包起始之前有效显示量化值 (MQUANT 或 GQUANT),如果数据包从 GOB 头开始,该值则设置为 0 。
- HMVD ― 水平运动矢量数据字段。表示参考水平运动向量数据(MVD)。如果 V 标记为 0,或如果数据包以 GOB 头为起始,或当 早先数据包中编码的最后一个 MB 的 MTYPE 不是 MC 时,该值设置为 0。
- VMVD ― 垂直运动矢量数据(VMVD)。参考垂直运动向量数据(MVD)。如果 V 标记值为0,或如果数据包以 GOB 头为起始,或当早先数据包中编码的最后一个 MB 的 MTYPE 不是 MC 时,该值设置为 0。
相关协议:RTP、RTSP、H.248、H.323、H.225、H.245、H.263
组织来源:H.261 是一种 ITU-T(http://www.itu.int/ITU-T/)标准。
相关链接:
http://www.javvin.com/protocol/rfc2032.pdf: RTP Payload Format for H.261 Video Streams
http://www.h323forum.org/papers/: H.323 papers and documents