硬解碼與軟解碼的選擇
前言
事物都有兩面性,軟解碼和硬解碼的並存,存在即合理,沒有哪個最好,以後兩者都會更好,而對於如何選擇,根據專案需要。
在上篇《快速整合一個視訊直播功能》 中提到,“確定需求後進行了一堆調研,最後在B站的 ijkplayer 與 Google 的 ExoPlayer 中做出了選擇”,當時毅然決然的選擇 ExoPlayer 原因有很多,如有興趣,可關注我的gitchat接下來要分享的內容,微信掃描二維碼便可以進入報名,《如何更加安全、高效地選擇開源專案》 ,會詳細介紹如何更好的選擇一個第三方開源。
不多說,本篇先拋開穩定性、整合性、相容性、健全性之餘討論,只做硬解碼與軟解碼的分析,這也是當時選擇 ExoPlayer 的重要原因之一。
區別
舉個例子,CPU 相當於公司的 CEO ,GPU相當於公司技術總監、產品經理之類,來了一個需求,如果採用軟解碼,那就是讓 CEO 去畫原型,去一線寫程式碼,這期間還要忙著各種大小的事物處理,如果採用硬解碼,那就是CEO 朝技術總監、產品經理髮指令,讓他們去完成一件事,並且定期查詢完成的程度。
- 硬解碼:就是呼叫GPU的專門模組進行解碼,由顯示卡核心GPU來對視訊進行解碼工作。
- 軟解碼:通過軟體讓CPU來對視訊進行解碼處理。
視訊的編解碼是一個很消耗效能的操作,最簡單的例子就是前幾年玩遊戲的時候,經常手機發燙,有些配置差一點的手機,看個視訊手機就發燒發熱。
優缺點
網上看到一句話,“硬解碼是將原來全部交由CPU來處理的視訊資料的一部分交由GPU來做,而GPU的並行運算能力要遠遠高於CPU,這樣可以大大的降低對CPU的負載,CPU的佔用率較低了之後就可以同時執行一些其他的程式了。”
如果僅僅是上述這樣,那是不是用GPU就是有絕對優勢?那麼諸如ijkplayer等第三方的優勢又何在呢?ijkplayer只是大名鼎鼎的FFmpeg的一個fork而已,FFmpeg的fork現在也多的泛濫,良莠不齊。
下面說下兩者優缺點:
上面對比中一個是功耗一個是總功耗,這個也很容易理解,GPU的電路更復雜,並行運算能力要遠遠高於CPU,於是耗電量就更高,GPU功耗大,但執行速度提升更多,功耗 = 功率 * 時間,所以就算功率乘個4,但是時間除以個10,總耗能還是降低。
選擇
對於硬解碼和軟解碼的選擇,這個真心說不上哪個更好,根據專案的需要,現在幾乎所有的裝置都支援硬解碼和軟解碼,僅支援一種的Android移動裝置已經屬於古董級的,我是沒見到過,之前更多的人願意選擇軟解碼,更大的原因是因為硬體解碼支援的格式較少,而軟解碼對於格式是不受限制的。
現在隨著硬體的不斷提高,解碼技術的不斷成熟和完善,我是更傾向硬解碼,但硬體提升的同時,CPU也在不斷的優化和提高,現在也不需要像之前那樣儘可能節省CPU,現在處於效能過剩的時代,CPU已經很難處於負荷狀態,選擇軟解碼或者硬解碼都是沒有誰對誰錯,剛剛圖上已經貼出和標記兩者的優點,根據專案需要選擇。
當時選擇硬解碼的ExoPlayer,是因為只需要播放m3u8格式的視訊,畫面上沒有那麼高的追求,對於這樣的需求,硬解碼更符合公司的口味和使用者的體驗,至少可以節省更多的電量。
友情推薦: