1. 程式人生 > >Android視訊播放軟解與硬解的區別

Android視訊播放軟解與硬解的區別

  • 硬解,用自帶播放器播放,android中的VideoView
  • 軟解,使用音視訊解碼庫,比如FFmpeg

一、硬解碼

硬解:就是呼叫GPU的專門模組編碼來解,減少CPU運算,對CPU等硬體要求也相對低點。軟解需要CPU運算,變相加大CPU負擔耗電增加很多。硬體解碼是將原來全部交由CPU來處理的視訊資料的一部分交由GPU來做,而GPU的並行運算能力要遠遠高於CPU,這樣可以大大的降低對CPU的負載,CPU的佔用率較低了之後就可以同時執行一些其他的程式了。
對於android裝置,目前用得比較多的soc就是高通、海思和聯發科,這些soc大都集成了很多的功能,CPU、GUP、DSP、ISP包括視訊解碼、音訊解碼等等,所以我們說的是SOC而不是直接說CPU,目前手機的中央處理器的整合度非常高,下面是我們大華為的海思麒麟950的組成圖:
950


我們可以看到這顆SOC集成了單獨的音視訊解碼單元。
在Android中使用硬體解碼直接使用MediaCodec就可以了,雖然MediaPlayer也是硬體解碼,但是被封裝得太死了,支援的協議很少。而MediaCodec就很好拓展,我們可以根據流媒體的協議和裝置硬體本身來自定義硬體解碼,代表播放器就是Google的ExoPlayer。

硬體碼優勢:更加省電,適合長時間的移動端視訊播放器和直播,手機電池有限的情況下,使用硬體解碼會更加好。減少CPU的佔用,可以把CUP讓給別的執行緒使用,有利於手機的流暢度。

二、軟解碼

軟解碼:即通過軟體讓CPU來對視訊進行解碼處理,就是通過CPU來執行視訊編解碼程式碼,我們最最常見的視訊軟解碼開源看就是FFmpeg:
FFmpeg

軟解碼優勢:具有更好的適應性,軟體解碼主要是會佔用CUP的執行,軟解不考慮社備的硬體解碼支援情況,有CPU就可以使用了,但是佔用了更多的CUP那就意味著很耗費效能,很耗電,在裝置電量充足的情況下,或者裝置硬體解碼支援不足的情況下使用軟體解碼更加好!

三、總結

在Android裝置硬體支援的情況下優先使用Android裝置的硬體解碼,減少CPU的佔用,更加省電。
在Android裝置硬解不支援的情況下選擇使用軟解碼,不管怎麼樣,視訊至少能夠播放,具有更好的適應性,但是增加了CPU的佔用,更加費電。
軟硬結合才是王道,根據實際情況合理選擇。