一、硬解碼
硬解:就是調(diào)用GPU的專門模塊編碼來解,減少CPU運算,對CPU等硬件要求也相對低點。軟解需要CPU運算,變相加大CPU負擔耗電增加很多。硬件解碼是將原來全部交由CPU來處理的視頻數(shù)據(jù)的一部分交由GPU來做,而GPU的并行運算能力要遠遠高于CPU,這樣可以大大的降低對CPU的負載,CPU的占用率較低了之后就可以同時運行一些其他的程序了。
對于android設備,目前用得比較多的soc就是高通、海思和聯(lián)發(fā)科,這些soc大都集成了很多的功能,CPU、GUP、DSP、ISP包括視頻解碼、音頻解碼等等,所以我們說的是SOC而不是直接說CPU,目前手機的中央處理器的集成度非常高,下面是我們大華為的海思麒麟950的組成圖:

我們可以看到這顆SOC集成了單獨的音視頻解碼單元。
在Android中使用硬件解碼直接使用MediaCodec就可以了,雖然MediaPlayer也是硬件解碼,但是被封裝得太死了,支持的協(xié)議很少。而MediaCodec就很好拓展,我們可以根據(jù)流媒體的協(xié)議和設備硬件本身來自定義硬件解碼,代表播放器就是Google的ExoPlayer。
點擊打開:Google開源ExoPlayer
硬件碼優(yōu)勢:更加省電,適合長時間的移動端視頻播放器和直播,手機電池有限的情況下,使用硬件解碼會更加好。減少CPU的占用,可以把CUP讓給別的線程使用,有利于手機的流暢度。
二、軟解碼
軟解碼:即通過軟件讓CPU來對視頻進行解碼處理,就是通過CPU來運行視頻編解碼代碼,我們最最常見的視頻軟解碼開源看就是FFmpeg:

FFmpeg官網(wǎng):https://ffmpeg.org/
國內(nèi)FFmpeg教程:雷霄驊(leixiaohua1020)的專欄
目前基于FFmpeg的開源播放器有B站的ijkplayer,教程請移步:http://blog.csdn.net/u010072711/article/details/51728537
點擊打開:B站開源播放器ijkplayer
軟解碼優(yōu)勢:具有更好的適應性,軟件解碼主要是會占用CUP的運行,軟解不考慮社備的硬件解碼支持情況,有CPU就可以使用了,但是占用了更多的CUP那就意味著很耗費性能,很耗電,在設備電量充足的情況下,或者設備硬件解碼支持不足的情況下使用軟件解碼更加好!
三、總結(jié)
在Android設備硬件支持的情況下優(yōu)先使用Android設備的硬件解碼,減少CPU的占用,更加省電。
在Android設備硬解不支持的情況下選擇使用軟解碼,不管怎么樣,視頻至少能夠播放,具有更好的適應性,但是增加了CPU的占用,更加費電。
軟硬結(jié)合才是王道,根據(jù)實際情況合理選擇。