alienbat's profile编程 汽车 高清gadgetsPhotosBlogLists Tools Help

Blog


    July 02

    科普贴:为什么你不该拥抱数字电视-B

    还是重申一下“标题党警告”:本贴的意思不是要你别买数字电视和别看数字电视节目,而是要你别买官方机顶盒和收看官方数字节目。要高清还有其他很多种方式。

    来聊一下视频压缩方式。目前使用很广的一种视频格式被众人称之为MPEG2。其实MPEG2包含的是一个很大的标准,包括音频视频以及传输协议等等,视频编码只是其中一部分,MPEG2视频格式其实称作为H.262. 在更高级的MPEG4标准中,还有更高级的视频压缩格式即H.264/AVC (Advanced Video Coding)。H.262和H.264标准算法被Apple和Microsoft采用,mov和wmv,但是加入了一些自己的内容。

    视频压缩的原理基于这样一种现象:连续平滑的画面,相邻帧之间的差距是微小的。所以,为了避免分别存储每一帧画面带来的巨大开销,MPEG算法在一个范围内只存储压缩一个关键帧(称之为I Frame),其他帧都仅存储与关键帧不同的部分(称之为引用帧,P或B frame)。原理简单,实现是非常复杂的:复杂到全中国没有任何一家公司有技术实力开发H.262编码器(可能有个别公司有实力照搬开源编码器FFMPEG之类,不过开源编码器是不能胜任广播级/工业级的应用的),这也就是为什么你看到的数字清宫肥皂剧画面奇差还丢帧——的部分原因。

    视频压缩的关联属性带来的问题是,画面帧之间的互相引用使得帧之间的地位不一样了。数字电视在切换频道的时候会有一个黑屏延迟,这是因为需要等待下一个关键帧传输完成,方能解码其他引用帧;和模拟信号随切随看不同,你半当中换台,往往收到的是引用帧(关键帧一般每十几帧才有一帧),这些引用帧没有办法解码,因为它们引用的关键帧已经过去了;所以只能被丢弃,在下一个关键帧到来之前你只能欣赏黑屏。

    这也解释了一个现象就是为什么观看在线视频和播放某些Real视频的时候,跳到当中的时候要等很长时间才能切换到你想看的那帧;因为为了追求压缩比,这些视频很可能只有头一帧是关键帧,剩下的都是引用帧,你要随机读取,等解码器从头开始解压吧。

    如果关键帧的某些数据丢失,这个影响会波及剩下所有的引用帧;如果关键帧坏掉了,那你就只能看静态幻灯片。让我们来解释一下这样一种怪异现象:当你看数字清宫肥皂剧的时候,往往会“嘎”一下卡住,然后以充满混乱的马赛克的画面流畅播放半秒左右;然后又是“嘎”,以此循环不已直到你把机顶盒的遥控器摔了为止。Why? 因为关键帧是单独存储的,所以往往特别大(遇到编码复杂的画面会更大,比如皇帝的充满细节的龙袍),大到可以彻底挤爆交大/清华开发出来的可怜DMB/T协议能利用的带宽范围。当然了,电视台在广播的时候往往会提高压缩比(解释了你为啥看的画面通常很破)以避免峰值帧挤爆带宽,但是由于他们的低科技编码器的比特率控制算法一般特别差,所以还是难以避免。当该现象发生的时候,部分的关键帧数据难以及时传送,接着你就该看马赛克之舞了。至于“嘎”的一声,就更好解释:是因为带宽被视频信号的挤满时候连带着音频信号也被挤掉了。

    事实上更复杂:基于“编码多贵都无所谓,解码一定要便宜”的经济学看法(因为编码器只需电视台有一台,解码器人人都要有),解码器往往只有很小的数据缓存区以节省成本;而每一帧画面的压缩大小需要由编码器仔细控制。举例来说如果编码端连续来3帧体积大的,即使它们不挤爆带宽,也可以挤爆你那低成本机顶盒的内存。当然,这是高级的问题,目前国内数字电视应该还没有达到能够发生这种高级问题的境界。其实我认为,国内数字电视最基础的传输协议能不能工作还是个问题。就好像你的Xbox360不工作,你怀疑GPU上面哪个寄存器坏了,其实根本没那么高深,真实原因只是老鼠啃断了电源线。

    所以让我们来总结一下为啥你不该买数字机顶盒的理由。你没有办法看到高质量的数字节目,是因为基础传输协议是拼起来的破烂,没法实现任何比电报所需带宽更高的应用;而即使协议能勉强工作,你也只能观赏低比特率节目外加时不时的丢帧;而即使电视台有胆子把比特率放低到连关键帧都挤不爆DMB的时候,你估计宁可去看录像带;而即使你一定要看的话,可能还是没法好好看,因为低科技编码器的比特分配算法太烂。最终最终,即使上帝降临把这一切技术问题都解决了,你还是只能看符合社会主义精神建设的东西,which is,清宫肥皂剧。

    So.