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