什么是【解码】
为了节约存储空间,我们在设备上播放的视频文件都是经过压缩的;在播放过程,需要进行一个反射的解压缩过程,这就是 解码
什么是【软解码】 和【硬解码】
-
软解码:
在解码工过程中借助【软件】提供的算法来完成取指、分析、运算解码等工作,全部通过【CPU】实现。
-
硬解码:
在解码工过程中借助【硬件】提供的算法来完成取指、分析、运算解码等工作,使用【非 CPU】,如显卡 GPU 、专用的 DSP 、FPGA 、ASIC 芯片等实现
【软解码】和【硬解码】的比较
软解码的解码过程完全由 CPU 完成的,所以 对 CPU 的性能要求非常高。如果 CPU 性能不行, 解码速度跟不上,那我们所看到的画面就是不流畅、有卡顿的,以当前市场的手机设备,软解 4K 的视频,就非常明显看到这种现象。同时,由于 CPU 是非常耗电的, CPU 的使用率越高, 耗电量越高, 所以软解码是非常耗电的。
而硬解码是通过 GPU 等类似具备 图形处理功能的芯片完成解码过程,而 GPU 是基于大的吞吐量、并发计算设计,对数据相关性不大的重复运算,有时加速比能达到几百倍甚至更高,所以,使用 GPU 实现视频解码, 速度远快于软解码。 另外,GPU 耗电量是远小于 GPU ,所以硬解码耗电量是非常小的。
但由于,GPU 本身限于 GPU 开发平台,只能对 GPU 本身支持的编码格式才能进行解码,所以只有 符合硬解的编码格式的视频才能使用硬解码,例如 H264 格式。
软解码
硬解码
这里举例的视频是 【720P】 ,所以比较并不是很明显。 不过,还是可以看出硬解码比软解码对 CPU 的使用率小很多:
- 软解码: CPU 使用率 67%
- 硬解码: CPU 使用率 7%
同时,帧率硬解码比软解码要高很多,也意味着硬解画面会更流畅:
- 软解码: FPS 是 20 (1s 中渲染 20 帧画面)
- 硬解码: FPS 是 25 (1s 中渲染 25 帧画面)
综上所述
建议:对于符合硬解码的编码格式,例如【H264】,采用【硬解码】进行解码;不符合硬解码的编码格式视频,才采用软解码。
这样,不仅仅降低对 CPU 的负荷,让画面更流畅,还大大降低耗电量。
补充说明
为什么有用户在开启和关闭硬解码之后发现明显的画质区别?
视频解码的步骤分为:
- VLD ( 流处理 )
- iDCT ( 频率转换 )
- MoComp ( 运动补偿 )
- PostProc (显示后处理,解码去块滤波 Deblocking )
首先,无论是硬件解码还是软件解码,所进行的解码过程和解码结果都是完全一样的。
他们的区别就是视频解码的工作是由 CPU 完成,还是由 GPU 来完成而已。
因此,在理论上硬件解码和软件解码的效果应该是完全一样的。
但在最后一个解码步骤 PostProc ( 显示后处理,解码去块滤波操作 Deblocking )。
Deblocking 的意思为解码去块,能够消除 H.264 压缩编码可能产生的马赛克现象,真实地还原视频图像。
Deblocking 对 CPU 提出了较高的要求,在 CPU 性能不够时 , 开启 GPU 硬件加速就会关闭解码去块滤波操作 (Deblocking) ,这时播放一些影片会看到较明显的马赛克现象,明显影响画面质量。
换句话说,确实存在, 在 CPU 性能不够的时候,启用 硬解码 ,会关闭解码去块滤波操作 (Deblocking) ,明显影响画面质量。
但基于当前手机设备,大多数 CPU 的性能足够满足于硬解码的需求,所以,出现这种情况的手机设备必然是低端机、远次于目前市场的微量手机。
另外,我们对 iOS 和 Android 各种机型实际测试中,也未曾发现开启硬解后,画质明显下降的现象。