智能手機中的視頻解碼

作者 | 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解碼簡略流程)


分享到:


相關文章: