• 流媒体 6——MPEG电视


    1.电视图像的数据率

    1.1 ITU-R BT.601标准数据率

      按照奈奎斯特(Nyquist)采样理论,模拟电视信号经过采样(把连续的时间信号变成离散的时间信号)和量化 (把连续的幅度变成离散的幅度信号)之后,数字电视信号的数据量大得惊人,当前的存储器和网络都还没有足够的能力支持这种数据传输率,因此就要对数字电视信号进行压缩。为了在PAL、NTSC和SECAM彩色电视制之间确定一个共同的数字化参数,早在1982年国际无线电咨询委员会 (CCIR)就制定了演播室质量的数字电视编码标准,这就是非常有名的ITU-R BT.601标准。按照这个标准,使用4:2:2的采样格式,亮度信号Y的采样频率选择为13.5 MHz/s,而色差信号Cr和Cb的采样频率选择为6.75 MHz/s,在传输数字电视信号通道上的数据传输率就达到为270 Mb/s(兆比特/秒)
      亮度(Y):
       858样本/行×525行/帧×30帧/秒×10比特/样本 ≌ 13.5兆比特/秒(NTSC)
       864样本/行×625行/帧×25帧/秒×10比特/样本 ≌ 13.5兆比特/秒(PAL)
      Cr (R-Y):
       429样本/行×525行/帧×30帧/秒×10比特/样本 ≌ 6.8兆比特/秒(NTSC)
       429样本/行×625行/帧×25帧/秒×10比特/样本 ≌ 6.8兆比特/秒(PAL)
      Cb (B-Y):
       429样本/行×525行/帧×30帧/秒×10比特/样本 ≌ 6.8兆比特/秒(NTSC)
       429样本/行×625行/帧×25帧/秒×10比特/样本 ≌ 6.8兆比特/秒(PAL)
      总计:

        27兆样本/秒×10比特/样本 = 270兆比特/秒
    实际上,在荧光屏上显示出来的有效图像的数据传输率并没有那么高,
       亮度(Y): 720×480×30×10 ≌ 104 Mb/s (NTSC)
            720×576×25×10 ≌ 104 Mb/s (PAL)
       色差(Cr,Cb):2×360×480×30×10 ≌ 104 Mb/s (NTSC)
              2×360×576×25×10 ≌ 104 Mb/s (PAL)
       总计: ~ 207 Mb/s
      如果每个样本的采样精度由10比特降为8比特,彩色数字电视信号的数据传输率就降为166 Mb/s。

    2. 数据压缩算法

     电视图像本身在时间上和空间上都含有许多冗余信息,图像自身的构造也有冗余性。此外,正如前面所介绍的,利用人的视觉特性也可对图像进行压缩,这叫做视觉冗余。

    电视图像压缩利用的各种冗余信息

    种类

    内容

    目前用的主要方法

    统计

    空间冗余

    像素间的相关性

    变换编码,预测编码

    特性

    时间冗余

    时间方向上的相关性

    帧间预测,移动补偿

        图像构造冗余

    图像本身的构造

    轮廓编码,区域分割

        知识冗余

    收发两端对人物的共有认识

    基于知识的编码

        视觉冗余

    人的视觉特性

    非线性量化,位分配

        其他

    不确定性因素

     

      MPEG-Video图像压缩技术基本方法和方法可以归纳成两个要点:
        ① 在空间方向上,图像数据压缩采用JPEG(Joint Photographic Experts Group)压缩算法来去掉冗余信息。
        ② 在时间方向上,图像数据压缩采用移动补偿(motion compensation)算法来去掉冗余信息。
       为了在保证图像质量基本不降低而又能够获得高的压缩比,MPEG专家组定义了三种图像:帧内图像I(intra),预测图像P(predicted)和 双向预测图像B(bidirectionally interpolated ),这三种图像将采用三种不同的算法进行压缩。

                                          MPEG专家组定义的三种图像

    补充:

      视频压缩中,每帧代表一幅静止的图像。而在实际压缩时,会采取各种算法减少数据的容量,其中IPB就是最常见的。简单地说,I帧是关键帧,属于帧内压缩。就是和AVI的压缩是一样的。 P是向前搜索的意思。B是双向搜索。他们都是基于I帧来压缩数据。I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)。P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)。B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累~。
      从上面的解释看,我们知道I和P的解码算法比较简单,资源占用也比较少,I只要自己完成就行了,P呢,也只需要解码器把前一个画面缓存一下,遇到P时就使用之前缓存的画面就好了,如果视频流只有I和P,解码器可以不管后面的数据,边读边解码,线性前进,大家很舒服。但网络上的电影很多都采用了B帧,因为B帧记录的是前后帧的差别,比P帧能节约更多的空间,但这样一来,文件小了,解码器就麻烦了,因为在解码时,不仅要用之前缓存的画面,还要知道下一个I或者P的画面(也就是说要预读预解码),而且,B帧不能简单地丢掉,因为B帧其实也包含了画面信息,如果简单丢掉,并用之前的画面简单重复,就会造成画面卡(其实就是丢帧了),并且由于网络上的电影为了节约空间,往往使用相当多的B帧,B帧用的多,对不支持B帧的播放器就造成更大的困扰,画面也就越卡。一般平均来说,I的压缩率是7(跟JPG差不多),P是20,B可以达到50,可见使用B帧能节省大量空间,节省出来的空间可以用来保存多一些I帧,这样在相同码率下,可以提供更好的画质。

    2.1.帧内图像I的压缩编码算法

      如果电视图像是用RGB空间表示的,则首先把它转换成YCrCb空间表示的图像。每个图像平面分成8×8的图块,对每个图块进行离散余弦变换 DCT(discrete Cosine Transform)。DCT变换后经过量化的交流分量系数按照Zig-zag的形状排序,然后再使用无损压缩技术进行编码。DCT变换后经过量化的直流分量系数用差分脉冲编码DPCM(DifferentialPulse Code Modulation),交流分量系数用行程长度编码RLE(run-length encoding),然后再用霍夫曼(Huffman)编码或者用算术编码。

    2.2.预测图像P的压缩编码算法

      预测图像的编码也是以图像宏块(macroblock)为基本编码单元,一个宏块定义为I×J像素的图像块,一般取16×16。预测图像P使用两种类型的参数来表示:一种参数是当前要编码的图像宏块与参考图像的宏块之间的差值,另一种参数是宏块的移动矢量。假设编码图像宏块MPI是参考图像宏块MRJ的最佳匹配块,它们的差值就是这两个宏块中相应像素值之差。对所求得的差值进行彩色空间转换,并作4:1:1的子采样得到Y,Cr和Cb分量值,然后仿照JPEG压缩算法对差值进行编码,计算出的移动矢量也要进行霍夫曼编码。

    2.3.双向预测图像B的压缩编码算法

    2.4.图像结构

      MPEG 编码器算法允许选择I图像的频率和位置。I图像的频率是指每秒钟出现I图像的次数,位置是指时间方向上帧所在的位置。一般情况下,I图像的频率为2。 MPEG编码器也允许在一对I图像或者P图像之间选择B图像的数目。I图像、P图像和B图像数目的选择依据主要是根节目的内容。例如,对于快速运动的图像,I图像的频率可以选择高一些,B图像的数目可以选择少一点;对于满速运动的图像I图像的频率可以低一点,而B图像的数目可以选择多一点。此外,在实际应用中还要考虑媒体的速率。
      一个典型的I、P、B图像安排如图所示。编码参数为:帧内图像I的距离为N=15,预测图像(P)的距离为M=3。


    MPEG电视帧编排

      I、P和B图像压缩后的大小如表所示,单位为比特。从表中可以看到,I帧图像的数据量最大,而B帧图像的数据量最小

     MPEG三种图像的压缩后的典型值(比特)

    图像类型

    I

    P

    B

    平均数据/帧

    MPEG-1 CIF 格式(1.15 Mb/s)

    150 000

    50 000

    20 000

    38 000

    MPEG-2 601 格式(4.00 Mb/s)

    400 000

    200 000

    80 000

    130 000




  • 相关阅读:
    vc++6.0如何调试
    Visual C++单文档混合分割视图
    使用VC6.0实现窗口的任意分割张中庆
    用MFC创建通用窗体分割框架
    vc++6.0编译环境介绍(1、2)
    浅谈SDI单文档多视切换方法
    单文档多视图Formview切换源代码(此网还有许多其它多视图切换的源代码)
    VC单文档实现多视图的方法
    Visual C++(VC++6.0)编译器常用选项设置
    PowerTip of the DayRemoving Empty Things
  • 原文地址:https://www.cnblogs.com/zxqstrong/p/4600868.html
Copyright © 2020-2023  润新知