直播專題問題排查-功耗高(九)

直播功耗高

1. 問題現(xiàn)象
直播過程中手機(jī)發(fā)熱嚴(yán)重,耗電快。
2. 問題排查

導(dǎo)致手機(jī)功耗高,發(fā)熱嚴(yán)重的根本因素,無外乎就是一點(diǎn):CPU/GPU 占用率高,所以,我們首先要分析下,哪些因素會導(dǎo)致 CPU/GPU 占用率高。

2.1 數(shù)據(jù)量太大
直播主要由:視頻采集 -> 視頻處理(剪裁、美顏、濾鏡) -> 編碼 -> 推流這些環(huán)節(jié)組成。

在這整個(gè)流程中,決定數(shù)據(jù)量大小的因素有哪些呢 ?

  • 視頻的尺寸(例如:1280 x 720 的圖像,明顯要比 320 x 240 的圖像處理起來費(fèi)勁)
  • 視頻的幀率(例如:每秒 30 幀,明顯要比每秒 15 幀,處理起來費(fèi)勁)

因此,在不影響業(yè)務(wù)體驗(yàn)的情況下,適當(dāng)減少視頻的尺寸和幀率,是可以明顯降低后續(xù)環(huán)節(jié) CPU/GPU 的負(fù)荷的,從而顯著降低功耗。

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

我們要盡可能減少不同格式之間的數(shù)據(jù)轉(zhuǎn)換,或者盡可能利用 GPU 來處理一些復(fù)雜的格式轉(zhuǎn)換,比如利用 OpenGL 直接渲染 YUV格式的數(shù)據(jù),而不是用 CPU 做一次YUV -> RGB的轉(zhuǎn)換,就是一個(gè)不錯的選擇。

2.3 對圖像進(jìn)行放大操作
非常不推薦把一個(gè)小尺寸的圖片 -> 放大 -> 大尺寸圖片,這樣很容易出現(xiàn)馬賽克。

其實(shí),這樣的設(shè)計(jì),不僅僅是容易出現(xiàn)馬賽克,而且在圖像放大的過程中,由于涉及到復(fù)雜的插值運(yùn)算,也會非常消耗 CPU。

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

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

2.4 軟編/軟解
這個(gè)原因或許大家都懂,軟編/軟解靠的是 CPU,非常耗性能,而硬編/硬解是使用專門的硬件編×××模塊,會顯著降低 CPU 的負(fù)擔(dān),相對而言,會省電很多。
只不過需要小心各種 Android 機(jī)型兼容性問題,對于某些奇葩設(shè)備,還是加入硬編/硬解黑名單的好。
2.5 其他方面
當(dāng)然,導(dǎo)致功耗高的因素還有很多,這里就不一一展開說明了,列舉如下:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

友情鏈接更多精彩內(nèi)容