《直播疑難雜症排查》系列已經更新了 9 篇,咱們爲用戶分析了視頻直播過程當中出現的問題,並一一做出排查。這次咱們重點看看直播過程當中出現的直播功耗高的問題。網絡
繼《直播技術詳解》系列文章以後,咱們推出了這個新的系列《直播疑難雜症排查》,把解決直播問題的經驗逐步分享出來,同時也會穿插一些音視頻開發的基礎知識和優化經驗,但願可以幫助到直播領域的開發者們。性能
本系列會涵蓋的內容包括但不限於以下一些主題:優化
直播過程當中手機發熱嚴重,耗電快。動畫
致使手機功耗高,發熱嚴重的根本因素,無外乎就是一點:CPU/GPU 佔用率高,因此,咱們首先要分析下,哪些因素會致使 CPU/GPU 佔用率高。編碼
1.數據量太大線程
直播主要由:視頻採集 -> 視頻處理(剪裁、美顏、濾鏡) -> 編碼 -> 推流 這些環節組成。設計
在這整個流程中,決定數據量大小的因素有哪些呢 ?3d
所以,在不影響業務體驗的狀況下,適當減小視頻的尺寸和幀率,是能夠明顯下降後續環節 CPU/GPU 的負荷的,從而顯著下降功耗。cdn
2.大量的格式轉換視頻
不一樣的模塊對數據格式的要求,每每有差別,好比 Android 攝像頭出來的數據大可能是 NV21 的,而編碼器通常要求 I420 格式的數據;再好比 ffmpeg 解碼的視頻每每是 YUV 格式,而渲染顯示每每須要 RGB 格式,等等。
咱們要儘量減小不一樣格式之間的數據轉換,或者儘量利用 GPU 來處理一些複雜的格式轉換,好比利用 OpenGL 直接渲染 YUV 格式的數據,而不是用 CPU 作一次 YUV -> RGB 的轉換,就是一個不錯的選擇。
3.對圖像進行放大操做
《直播疑難雜症排查(6)— 馬賽克嚴重》這篇文章有提到,很是不推薦把一個小尺寸的圖片 -> 放大 -> 大尺寸圖片,這樣很容易出現馬賽克。
其實,這樣的設計,不只僅是容易出現馬賽克,並且在圖像放大的過程當中,因爲涉及到複雜的插值運算,也會很是消耗 CPU。
同理,圖像的縮小或者剪裁,一樣也會消耗必定的 CPU,只不過相比於圖片放大要好點。
所以,最好的辦法,就是當心選擇攝像頭的預覽分辨率以及推流的尺寸,儘量讓二者保持一致,這樣,才能最大化地節省 CPU 的消耗。
4.軟編/軟解
這個緣由或許你們都懂,軟編/軟解靠的是 CPU,很是耗性能,而硬編/硬解是使用專門的硬件編解碼器模塊,會顯著下降 CPU 的負擔,相對而言,會省電不少。
只不過須要當心各類 Android 機型兼容性問題,對於某些奇葩設備,仍是加入硬編/硬解黑名單的好。
5.其餘方面
固然,致使功耗高的因素還有不少,這裏就不一一展開說明了,列舉以下: