視頻直播的流程可以分爲如下幾步:
採集 —>處理—>編碼和封裝—>推流到服務器—>服務器流分發—>播放器流播放
一、推流器
1.採集
採集是整個視頻推流過程中的第一個環節,它從系統的採集設備中獲取原始視頻數據,將其輸出到下一個環節。視頻的採集涉及兩方面數據的採集:音頻採集和圖像採集,它們分別對應兩種不同的輸入源
- 音頻採集:不同的採集方式:手機麥克風、有線耳機、藍牙耳機(1、是否真從藍牙耳機錄入、2、藍牙耳機適配性:不同型號的藍牙耳機連接不同的手機、3、在推流過程中連接藍牙、4、長時間連接藍牙,會不會斷)
- 圖像採集:攝像頭採集(前後置,單攝、三攝)、屏幕採集
中斷時的採集:切至後臺(安卓8、9、10)、接聽電話(安卓10)、鎖屏
2.處理
視頻或者音頻完成採集之後得到原始數據,爲了增加一些效果,會在將其編碼壓縮前進行處理
- 對音頻的處理:降噪
(1)、不同噪聲環境下的降噪:大會議室、小會議室、辦公環境、公園、餐廳、馬路邊等
(2)、不同語音音素經過降噪算法處理後是否正常:
①、幾種音素的分類:
濁音:指發音時聲帶有震動的音素,比如au,o。
清音:與濁音相反,主要是通過通過氣流來發音,聲帶不震動,比如:s,p。
元音:發音過程中由氣流通過口腔而不受阻礙發出的音
輔音:與元音相對,氣流在口腔或咽頭受到阻礙而形成的音,鼻音、摩擦音等。
②、降噪主觀測試序列音素的選擇:
中文測試:中文發音,語音的持續時間比較長,很多降噪算法對音素的損傷偏小,但是我們還是需要確保我們的測試序列中包含足夠多的清音,比如:4,7,10,服等。
英文測試:相對於中文,英文每一個音素的發音延續時長就要短很多,清音出現的概率也更大,所以對英文測試時,我們就需要包含更多的音素,而且需要包含重讀、輕讀的單詞,比如s 發音在單詞前面,中間以及後面。還需要特別注意閉塞音:濁閉音:發音時長往往特別短10~20ms,能量往往比較低,在做瞬時噪聲處理時,把握不好就會損傷嚴重,清閉塞音:40~100ms,這個時間相對也比較短,而且頻譜上往往就是一根豎線,在噪聲處理時也很容易造成損傷
(3)、不同錄入距離的降噪:手持(20CM)\自拍杆(80CM)
(4)、不同採集方式之間的降噪及切換:藍牙切手機麥克風、有線切手機麥克風
(5)、開啓/關閉降噪之後的音畫同步性
- 對視頻的處理:美顏、水印、濾鏡
3.編碼和封裝
(1)編碼
- 爲什麼要編碼:
-
- 原始視頻數據存儲空間大,一個 1080P 的 7 s 視頻需要 817 MB
- 原始視頻數據傳輸佔用帶寬大,10 Mbps 的帶寬傳輸上述 7 s 視頻需要 11 分鐘
- 而經過 H.264 編碼壓縮之後,視頻大小隻有 708 k ,10 Mbps 的帶寬僅需要 500 ms
- 基本原理:核心思想就是去除冗餘信息
(2)封裝
封裝可以理解爲媒體的容器,容器使得不同多媒體內容同步播放變得很簡單,而容器的另一個作用就是爲多媒體內容提供索引,也就是說如果沒有容器存在的話一部影片只能從一開始看到最後,不能拖動進度條,而且如果不自己去手動另外載入音頻就沒有聲音
4.推流到服務器
- 各種網絡場景測試
-
- WiFi
- 4G
- 連續丟包
- 極差網絡
- 從弱網恢復至正常網絡
- 斷網再恢復
- 手動終止推流,再重新推流
5.播放器流播放
- 延遲測試
不同拉流播放協議:RTMP、FLV、HLS
-
- 長時間推流,是否有累積延遲
- 反覆斷網重連,是否有累積延遲
- 同一手機嘗試多次推流斷流
- 不同網絡切換測試
-
- 注意恢復之後的延遲、音畫同步
- 音畫同步測試
-
- 剛開始推流時、推流10分鐘後
- 從後臺切回時
- 前後置攝像頭切換後
- 試多個機型
- 視頻播放的流暢性、清晰度(靜止場景、運動場景)
- 長時間推流,24個小時不斷流
二、播放器
1.點播
- 播放不同分辨率的視頻:4K(原視頻)、1080P、720P、360P
- 播放不同編碼標準的視頻:H.264、H.265(播放多個)
- 播放不同聲道的視頻:單聲道、雙聲道、5.1聲道
- 播放無音頻的視頻
- 播放帶有字幕的視頻
- 播放地址是HTTPS的視頻
- 播放不同寬高比的視頻(16:9、9:16、1:1)
- 播放時息屏、切後臺
- 使用不同的解碼方式進行播放:軟解碼、硬解碼
- 使用不同的顯示數據流控件播放:TextureView、SurfaceView(視頻畫面幀的展示控件)
-
- SurfaceView優點及缺點
優點:可以在一個獨立的線程中進行繪製,不會影響主線程
使用雙緩衝機制,播放視頻時畫面更流暢
缺點:不能進行平移、縮放等變換
b. TextureView優點及缺點
優點:支持移動、旋轉、縮放等動畫,支持截圖
缺點:必須在硬件加速的窗口中使用,佔用內存比SurfaceView高
- 使用不同形式進行播放:
FIT(播放時的寬高和原視頻相同,但視頻左右留黑);
FILL(播放時的寬高和原視頻相同,但只截取視頻中間部分展示);
stretch(播放時的寬高和原視頻相同,但視頻被拉伸展示)
- 倍速、循環、seek
- 性能測試:
H.264、不同的播放器:
H.265、不同的軟解碼器:
- 兼容性測試:
分別使用textureview和surfaceview,硬解碼播放H.264、H.265編碼的視頻各10個;軟解碼播放H.264、H.265編碼的視頻各10個,覆蓋安卓5~10,40臺機型
- 壓力測試
以每秒10次的速度隨機進行10000次操作(切換、暫停、快進、快退等)
- 穩定性測試
1、連續播放72小時
2、多機型