直播間新手常見技術問題解答--拖動不準
現象:播放過程中,拖動進度條后,實際播放的位置跟松開拖動時的位置相差很遠。
由于直播流是實時產生和傳輸的,是不能拖動的,因此該問題主要出現在點播或者本地文件 的播放。
1 基本概念
首先,我們要了解播放器拖動的基本原理:
視頻是由一系列圖像幀組成的,每一個幀都有對應的時間戳。拖動,就是告訴播放一個時間戳,由它直接跳轉到指定的這一幀開始播放。
拖動到的時間點 = (進度條的 progress / 進度條最大值 100 )x 視頻總時長
2 關鍵幀間隔太大
由于解碼器必須從 I 幀開始解碼,才不會出現花屏現象,因此,播放器通常會尋找離 seekTo 視頻幀最近的一個關鍵幀,從該關鍵幀開始解碼播放。
假設關鍵幀間隔(GOP)是 3s,那么關鍵幀的時間點排列如下:
0s, 3s, 6s, 9s
如果拖動到 4s 的位置,那么播放器就跳轉到第 3s 的關鍵幀開始解碼播放,因此,會產生一定的誤差。
關鍵幀的間隔越大,那么這個誤差也就越大。因此,為了更準確地支持拖動,建議不要把關鍵幀間隔設置得太大。
3 直播丟幀
丟幀的情況多發生在直播場景,由于主播端的網絡抖動或者內存不足,導致不得不被迫丟掉一些視頻幀,而為了保證客戶端解碼后不出現花屏,丟幀往往伴隨著一整個 GOP 的丟棄。
當 GOP 丟失后,部分關鍵幀的間隔時間點就會變得更大了,從而導致拖動不準。
為了避免這種情況,建議推流端開啟動態碼率,在網絡不好的時候,主動降低碼率,快速發送掉緩沖區中累積的視頻幀,從而減少丟幀的情況發生。
4 發熱
導致機器功耗高,發熱嚴重的根本因素,無外乎就是一點:CPU/GPU 占用率高,所以,我們首先要分析下,哪些因素會導致 CPU/GPU 占用率高。
5 數據量太大
直播主要由:視頻采集 -> 視頻處理(剪裁、美顏、濾鏡) -> 編碼 -> 推流 這些環節組成。
在這整個流程中,決定數據量大小的因素有哪些呢 ?
視頻的尺寸(例如:1280 x 720 的圖像,明顯要比 320 x 240 的圖像處理起來費勁)
視頻的幀率(例如:每秒 30 幀,明顯要比每秒 15 幀,處理起來費勁)
因此,在不影響業務體驗的情況下,適當減少視頻的尺寸和幀率,是可以明顯降低后續環節 CPU/GPU 的負荷的,從而顯著降低功耗。
6 大量的格式轉換
不同的模塊對數據格式的要求,往往有差異,比如 Android 攝像頭出來的數據大多是 NV21 的,而編碼器一般要求 I420 格式的數據;再比如 ffmpeg 解碼的視頻往往是 YUV 格式,而渲染顯示往往需要 RGB 格式,等等。
我們要盡可能減少不同格式之間的數據轉換,或者盡可能利用 GPU 來處理一些復雜的格式轉換,比如利用 OpenGL 直接渲染 YUV 格式的數據,而不是用 CPU 做一次 YUV -> RGB 的轉換,就是一個不錯的選擇。
7 對圖像進行放大操作
前面文章有提到,非常不推薦把一個小尺寸的圖片 -> 放大 -> 大尺寸圖片,這樣很容易出現馬賽克。
其實,這樣的設計,不僅僅是容易出現馬賽克,而且在圖像放大的過程中,由于涉及到復雜的插值運算,也會非常消耗 CPU。
同理,圖像的縮小或者剪裁,同樣也會消耗一定的 CPU,只不過相比于圖片放大要好點。
因此,最好的辦法,就是小心選擇攝像頭的預覽分辨率以及推流的尺寸,盡可能讓兩者保持一致,這樣,才能最大化地節省 CPU 的消耗。
8 軟編/軟解
這個原因或許大家都懂,軟編/軟解靠的是 CPU,非常耗性能,而硬編/硬解是使用專門的硬件編解碼器模塊,會顯著降低 CPU 的負擔,相對而言,會省電很多。
只不過需要小心各種 Android 機型兼容性問題,對于某些奇葩設備,還是加入硬編/硬解黑名單的好。
9 其他方面
當然,導致功耗高的因素還有很多,這里就不一一展開說明了,列舉如下:
人臉識別/美顏/濾鏡,對 CPU/GPU 消耗很大
代碼邏輯中過多的 memory copy 操作
后臺線程頻繁喚醒手機訪問網絡或者讀寫 SDCard
App 的一些動畫特效
————————————————
版權聲明:本文為CSDN博主「步基」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wangbuji/article/details/121661187
================================
【新聞】
中國e直播帶貨供應鏈金融13306003307(V同),
一件代發共享云倉:主播減去了自己先采購囤貨的問題,可以無壓力的開播賣貨。主播只要選定生廠商的抖音小店產品鏈接或快手小店產品鏈接,在自己直播間上了鏈接就可以賣,賣完由廠家小店訂單結算,廠家網店直接收款;直播帶貨主播直接分傭金;MCN機構直接分管理費。
中國E直播帶貨供應鏈機構協調廠家按規則48小時內一件代發!