流控(動態碼率調整)機制:
1、緩衝區(視頻輸入、網絡收發)。
2、socket緩存監測。
3、MTU控制。
4、丟幀處理與檢測。
5、調整碼率(根據目前的網絡丟幀狀況,來決定碼率降低幅度)。
6、I、P幀處理,如果發現收到的P幀不完整,立即丟掉該P幀;如果發現收到的I幀不完整,丟掉整個GOP。
根據網絡實時狀況,上層丟幀來降低碼率;定時判定網絡狀況,根據多次定時的網絡結果,來深層次調整碼率。
一、實時根據網絡狀況來調整碼率。
如果網絡狀況不好,採用上層降低碼率方案。暫時拋掉部分原始幀,這些幀不參與編碼;通過這種最上層的簡單方式來降低碼率。
二、深層次調整碼率判定
分析一下,丟幀的程度與持續時間。
2.1 網絡狀況一般
維持目前的狀況,不做特殊深層次處理。
2.2 網絡狀況較差
深層次降低碼率方案
1)降低源頭幀率(譬如採樣幀率,由25變爲20)。
2)降低目標分辨率(譬如480*360的圖像改爲400*300的碼率)
降低幅度,由網絡狀況決定,不採用連續階梯降碼率。
2.3網絡狀況良好
在長時間內觀測到網絡狀況良好時候,可以發一些重複測試圖片或者無效測試數據來檢測是否需要丟幀。如果會丟幀,則不再發送重複圖片;否則,採用深層次調整碼率的方案緩慢提升碼率。
注意:對於降低碼率而言,一般要快速、幅度大一些;對於提升碼率而言,一般要緩慢、幅度小一下。提升碼率比降低碼率,更爲慎重!