多是全網最全的移動直播 trouble shooting 手冊(10)—— 直播功耗高

《直播疑難雜症排查》系列已經更新了 9 篇,咱們爲用戶分析了視頻直播過程當中出現的問題,並一一做出排查。這次咱們重點看看直播過程當中出現的直播功耗高的問題。網絡

《直播技術詳解》系列文章以後,咱們推出了這個新的系列《直播疑難雜症排查》,把解決直播問題的經驗逐步分享出來,同時也會穿插一些音視頻開發的基礎知識和優化經驗,但願可以幫助到直播領域的開發者們。性能


本系列會涵蓋的內容包括但不限於以下一些主題:優化

問題現象

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

問題排查

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

1.數據量太大線程

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

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

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

所以,在不影響業務體驗的狀況下,適當減小視頻的尺寸和幀率,是能夠明顯下降後續環節 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.其餘方面

固然,致使功耗高的因素還有不少,這裏就不一一展開說明了,列舉以下:

  • 人臉識別/美顏/濾鏡,對 CPU/GPU 消耗很大
  • 代碼邏輯中過多的 memory copy 操做
  • 後臺線程頻繁喚醒手機訪問網絡或者讀寫 SDCard
  • App 的一些動畫特效
  • 其餘等等

活動推薦
七牛開啓史上最大的促銷哦活動,首充送1500,最高送8000!

相關文章
相關標籤/搜索