四、高清解码资源消耗分析
那么究竟哪个步骤最为消耗CPU占用率呢?下面的测试对比应该最能说明问题(见下图)。对比的视频包括Mpeg2和H.264(AVC),其中上面我们讲到的四个步骤都有涉及。显而易见,“流处理”是所有编码格式中最为消耗处理器运算的部分,但是Mpeg2视频的这部分还并不会造成很大的困扰,因为CPU的占用率还不到2%。
不同编码格式在解码过程中各个步骤的CPU消耗比率 | ||||
编码格式 | MPEG-2 | H.264/AVC | ||
数据流算法 | VLC | CAVLC | CABAC | CABAC |
码率 | 8Mb/s | 20Mb/s | 20Mb/s | 40Mb/s |
流处理 占用率 | 1.6% | 8.9% | 26.5% | 47.8% |
视频变换 占用率 | 0.7% | 1.2% | 1.5% | 2.6% |
动态补偿 占用率 | 0.5% | 11.0% | 11.5% | 11.6% |
去块滤波 占用率 | N/A | 8.2% | 8.5% | 8.2% |
注:以上的是4种不同的视频数据流算法解码时4个主要步骤所消耗的CPU占用率 |
『不同步骤的CPU占用率对比,显然H.264编码的“流处理”要求最高』
但是对于H.264来说,问题就出现了,20Mb/s编码率的视频流处理过程就会达到不小的CPU占用率,40Mb/s的高编码率视频更为夸张,流处理的过程CPU占用率上升极快,加上别的处理,总CPU占用率很高毫不奇怪。
上文已经提到,这四个步骤的处理配件不同,主要是CPU和显卡。在之前,CPU因为处理了更多的步骤,所以占用率高居不下,因此如果显卡能承担越多的解码步骤,CPU就能释放更多的负载,以保证视频播放的流畅。
下图H.264的解码过程很好的说明了问题。如果显卡不承担任何步骤(图解第一行),那么CPU占用率很高,甚至根本无法流畅播放;如果显卡能实现后两个步骤的解码处理(图解第二行),CPU可以获得部分解放,但是对于比较关键的、负载最大的“流处理”,部分显卡还不能实现,所以CPU占用率有所下降,但是仍然偏高。
通过具有H.264硬件解码引擎的显卡,就可以完成H.264编码的全部4个处理步骤(图解第三行),也就是实现全程解码,这就是它们能让H.264高清视频播放的CPU占用率大幅度下降的根本原因。既然显卡完成了所有的高清解码处理,那么CPU自然就空闲了。而我们所谓的部分解码,就是CPU仍然承担一定的处理任务,因此占用率仍然要高出不少。