直播疑難雜症排查(10)— 直播功耗高

本文爲 《直播疑難雜症排查系列的》第十篇文章,我們重點看看直播功耗高的問題。


1.  問題現象


直播過程中手機發熱嚴重,耗電快。


2. 問題排查


導致手機功耗高,發熱嚴重的根本因素,無外乎就是一點:CPU/GPU 佔用率高,所以,我們首先要分析下,哪些因素會導致 CPU/GPU 佔用率高。


2.1 數據量太大


直播主要由:視頻採集 -> 視頻處理(剪裁、美顏、濾鏡) -> 編碼 -> 推流 這些環節組成。


在這整個流程中,決定數據量大小的因素有哪些呢 ?


- 視頻的尺寸(例如:1280 x 720 的圖像,明顯要比 320 x 240 的圖像處理起來費勁)

- 視頻的幀率(例如:每秒 30 幀,明顯要比每秒 15 幀,處理起來費勁)


因此,在不影響業務體驗的情況下,適當減少視頻的尺寸和幀率,是可以明顯降低後續環節 CPU/GPU 的負荷的,從而顯著降低功耗。


2.2 大量的格式轉換


不同的模塊對數據格式的要求,往往有差異,比如 Android 攝像頭出來的數據大多是 NV21 的,而編碼器一般要求 I420 格式的數據;再比如 ffmpeg 解碼的視頻往往是 YUV 格式,而渲染顯示往往需要 RGB 格式,等等。


我們要儘可能減少不同格式之間的數據轉換,或者儘可能利用 GPU 來處理一些複雜的格式轉換,比如利用 OpenGL 直接渲染 YUV 格式的數據,而不是用 CPU 做一次 YUV -> RGB 的轉換,就是一個不錯的選擇。


2.3 對圖像進行放大操作


《直播疑難雜症排查(6)— 馬賽克嚴重》這篇文章有提到,非常不推薦把一個小尺寸的圖片 -> 放大 -> 大尺寸圖片,這樣很容易出現馬賽克。


其實,這樣的設計,不僅僅是容易出現馬賽克,而且在圖像放大的過程中,由於涉及到複雜的插值運算,也會非常消耗 CPU。


同理,圖像的縮小或者剪裁,同樣也會消耗一定的 CPU,只不過相比於圖片放大要好點。


因此,最好的辦法,就是小心選擇攝像頭的預覽分辨率以及推流的尺寸,儘可能讓兩者保持一致,這樣,才能最大化地節省 CPU 的消耗。


2.4 軟編/軟解


這個原因或許大家都懂,軟編/軟解靠的是 CPU,非常耗性能,而硬編/硬解是使用專門的硬件編解碼器模塊,會顯著降低 CPU 的負擔,相對而言,會省電很多。


只不過需要小心各種 Android 機型兼容性問題,對於某些奇葩設備,還是加入硬編/硬解黑名單的好。


2.5 其他方面


當然,導致功耗高的因素還有很多,這裏就不一一展開說明了,列舉如下:


- 人臉識別/美顏/濾鏡,對 CPU/GPU 消耗很大

- 代碼邏輯中過多的 memory copy 操作

- 後臺線程頻繁喚醒手機訪問網絡或者讀寫 SDCard

- App 的一些動畫特效

- 其他等等


3. 小結


關於功耗高的問題排查大致就介紹道這裏了,有任何疑問歡迎來信 [email protected] 交流,另外,歡迎關注我的新浪微博 @盧_俊 或者 微信公衆號 @Jhuster 獲取最新的文章和資訊。

wKioL1lKe5vhBjglAAAfD7Y8yQU931.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章