智能手机中的视频解码

作者 | Video++极链科技移动端Team祁晟暘

整理 | 包包

说到移动端解码视频,主要就是两种,一种是使用硬件进行解码,另一种就是使用软件来解码。说到解码就需要说一下手机的CPU,比如说市面上的高通骁龙845,海思麒麟980,三星猎户座9810还有苹果A12,这些其实严格意义上并不是CPU,而是SoC(System on a Chip),它由CPU、GPU、DSP 等芯片集成在一起。

智能手机中的视频解码

(图: 高通骁龙845模块图)

其中DSP就是我们硬解音视频的主角。DSP就是数字信号处理(Digital Signal Processing),专门负责音视频解码方面的算法处理。他对视频解码的能力远大于CPU,里面固定了一些特定的算法,使之能快速的解开容器,并将解出来的视频流每帧转YUV(YCbCr)格式,然后交给GPU 转成RGB 并最终渲染出来。其中CPU不会做大负担的事,所以使用率不高,使用硬解视频基本不会造成手机发热。

智能手机中的视频解码

(图:使用DSP解码简略流程)

软解就是DSP做的事全部软解就是DSP做的事全部交给CPU做,CPU负担较大,通常使用率要在20以上,分辨率和码率的提升会进一步加大CPU的消耗。CPU较差的手机没几分钟就会明显发热。那软解的优势在哪儿呢?因为DSP作为硬件,算法已经完全固定下来(部分可以通过固件更新),所以只能解码它所支持的,如果对编码处理不同有可能就无法解码成功。而软解则可扩展性强,它可以将所需要解析的步骤、格式等全部写入程序中,然后需要什么就对应进行解码。所以有些时候硬解可能会发生绿屏或者花屏,而软解则正常。目前主流的软解就是ffmpeg,配合OpenGL ES等用于成像功能的SDK就可以实现简单的播放器。

智能手机中的视频解码

(图:使用软件解码简略流程)

我这儿再说说苹果移动设备方面的硬解吧。系统iOS 8以前所有的硬解都无法让开发者深入开发,只能通过系统播放器AVPlayer来播放视频,或者通过访问系统私有api,很不方便。

iOS 8起苹果开放了将硬件解析的库让开发者能够调用,就是VideoToolBox。说到这个可以先看看苹果SoC支持哪些方面的硬解。容器方面仍旧为通用的mp4,mov,m4a,其中视频流压缩格式支持的为A4-A6的H.264/AVC/MPEG-4 Part 10 (until profile 100 and up to level 5.1),MPEG-4 Part 2 和H.263;芯片A7起添加了H.264's profile 110,它允许各个颜色通道从8 位编码增加到10 位,这使更高级别的色彩细节成为可能,这个功能通常用于电视台或者媒体编辑行业。

从A11开始苹果SoC中的DSP也对新的编码格式H.265进行了支持,H.265旨在在有限带宽下传输更高质量的网络视频,仅需原先的一半带宽即可播放相同质量的视频,这个对目前日常使用习惯向偏向移动设备是一个利好的编码格式。

平常我们所说的mp4和MPEG-4不是一个内容,mp4 只是一个容器,它包含有视频流Video Stream 比如H.264和音频流Audio Stream 比如aac,而MPEG-4就是视频流的一个标准压缩格式。苹果设备以前没有办法播放flv容器的视频,只能完全通过软解,而如果这个flv封装的是一个标准的H.264和aac,那么开发者只需要靠CPU去解开该视频的容器(如ffmpeg的demuxer),拿到H.264的视频流和aac的音频流,将视频流交给VideoToolBox处理,则视频的解码可以依靠DSP,也就降低了CPU 的负荷,最终使用DSL或OpenGL ES进行成像(使用GPU)。

智能手机中的视频解码

(图:借助VideoToolBox实现视频流使用DSP解码简略流程)


分享到:


相關文章: