本發(fā)明實(shí)施例涉及通信技術(shù),尤其涉及一種視頻碼率自適應(yīng)調(diào)整方法及發(fā)送端設(shè)備。
背景技術(shù):
一般來說,視頻傳輸過程中,發(fā)送端設(shè)備的視頻編碼器以一定碼率產(chǎn)生視頻流,并將視頻流暫存于發(fā)送端設(shè)備的緩存中。然后,通過傳輸管道將緩存中的視頻流傳輸至接收端設(shè)備。其中,傳輸管道可以為無線或有線的管道。該傳輸過程中,傳輸管道的通信協(xié)議采用用戶數(shù)據(jù)包協(xié)議(User Data Protocol,UDP)或傳輸控制協(xié)議(Transmission Control Protocol,TCP)。
當(dāng)傳輸管道采用UDP通信協(xié)議時(shí),視頻流為UDP流。此時(shí),由于UDP通信協(xié)議沒有擁塞檢測(cè)和規(guī)避機(jī)制,當(dāng)傳輸管道出現(xiàn)擁塞時(shí),擁塞無法消除,導(dǎo)致視頻丟包、視頻業(yè)務(wù)質(zhì)量下降的問題。
當(dāng)傳輸管道采用TCP通信協(xié)議時(shí),視頻流為TCP流。由于TCP通信協(xié)議有擁塞檢測(cè)和規(guī)避機(jī)制,此時(shí),若傳輸管道出現(xiàn)擁塞,發(fā)送端設(shè)備的緩存與接收端設(shè)備之間的TCP流的碼率下降,從而緩解傳輸管道的擁塞。但是,該過程中,發(fā)送端設(shè)備的視頻編碼器產(chǎn)生TCP流的碼率并沒有發(fā)生變化,當(dāng)緩存中的TCP流超過緩存容量時(shí),視頻流從發(fā)送端設(shè)備的緩存溢出,同樣導(dǎo)致視頻丟包、視頻業(yè)務(wù)質(zhì)量下降的問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供一種視頻碼率自適應(yīng)調(diào)整方法及發(fā)送端設(shè)備,以解決視頻丟包、視頻業(yè)務(wù)質(zhì)量下降的問題。
第一個(gè)方面,本發(fā)明實(shí)施例提供一種視頻碼率自適應(yīng)調(diào)整方法,包括:
發(fā)送端設(shè)備觸發(fā)碼率估計(jì)事件;
所述發(fā)送端設(shè)備根據(jù)所述碼率估計(jì)事件,估計(jì)視頻編碼器的目標(biāo)編碼速率,所述視頻編碼器為所述發(fā)送端設(shè)備的視頻編碼器;
所述發(fā)送端設(shè)備將所述視頻編碼器的當(dāng)前編碼速率調(diào)整為所述目標(biāo)編碼速率。
在第一個(gè)方面的第一種可能的實(shí)現(xiàn)方式中,所述發(fā)送端設(shè)備觸發(fā)碼率估計(jì)事件之前,還包括:
所述發(fā)送端設(shè)備判斷本地緩存中數(shù)據(jù)包的數(shù)量是否超過預(yù)設(shè)緩存門限上限,或者,所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間是否超過預(yù)設(shè)時(shí)延門限上限;
若所述發(fā)送端設(shè)備判斷出所述本地緩存中數(shù)據(jù)包的數(shù)量超過所述預(yù)設(shè)緩存門限上限,或者,所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間超過所述預(yù)設(shè)時(shí)延門限上限,則所述碼率估計(jì)事件具體為緩存告警事件;否則,
若所述發(fā)送端設(shè)備判斷出所述本地緩存中數(shù)據(jù)包的數(shù)量未超過所述預(yù)設(shè)緩存門限上限,且所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間未超過所述預(yù)設(shè)時(shí)延門限上限,則所述碼率估計(jì)事件具體為緩存空閑事件。
結(jié)合第一個(gè)方面的第一種可能的實(shí)現(xiàn)方式,在第一個(gè)方面的第二種可能的實(shí)現(xiàn)方式中,所述發(fā)送端設(shè)備根據(jù)所述碼率估計(jì)事件,估計(jì)視頻編碼器的目標(biāo)編碼速率,具體包括:
若所述發(fā)送端設(shè)備觸發(fā)所述緩存告警事件,則估計(jì)所述目標(biāo)編碼速率為:
Rnew=max[R-R_down,Rmin],其中,所述Rnew為所述目標(biāo)編碼速率,R為所述視頻編碼器的當(dāng)前編碼速率,R_down為碼率下調(diào)步長,Rmin為所述視頻編碼器的最小編碼速率,所述max[]表示取最大值;
若所述發(fā)送端設(shè)備觸發(fā)所述緩存空閑事件,則估計(jì)所述目標(biāo)編碼速率為:
Rnew=min[R+R_up,Rmax],其中,所述R_UP為碼率上調(diào)步長,Rmax為所述視頻編碼器的最大編碼速率,所述min[]表示取最小值。
在第一個(gè)方面的第三種可能的實(shí)現(xiàn)方式中,所述發(fā)送端設(shè)備觸發(fā)碼率估計(jì)事件之前,還包括:
所述發(fā)送端設(shè)備接收接收端設(shè)備發(fā)送的反饋信息,所述反饋信息攜帶所述接收端設(shè)備的丟包率;
所述發(fā)送端設(shè)備判斷所述丟包率是否超過預(yù)設(shè)丟包率門限上限;
若所述發(fā)送端設(shè)備判斷出所述丟包率超過所述預(yù)設(shè)丟包率門限上限,則所述碼率估計(jì)事件具體為丟包嚴(yán)重事件;否則,
若所述發(fā)送端設(shè)備判斷出所述丟包率未超過所述預(yù)設(shè)丟包率門限上限,則所述碼率估計(jì)事件具體為丟包正常事件。
結(jié)合第一個(gè)方面的第三種可能的實(shí)現(xiàn)方式,在第一個(gè)方面的第四種可能的實(shí)現(xiàn)方式中,所述發(fā)送端設(shè)備根據(jù)所述碼率估計(jì)事件,估計(jì)視頻編碼器的目標(biāo)編碼速率,具體包括:
若所述發(fā)送端設(shè)備觸發(fā)所述丟包嚴(yán)重事件,則估計(jì)所述目標(biāo)編碼速率為:
Rnew=max[R×(1-Rloss),Rmin],其中,所述Rnew為所述目標(biāo)編碼速率,R為所述視頻編碼器的當(dāng)前編碼速率,Rloss為所述丟包率,Rmin為所述視頻編碼器的最小編碼速率,所述max[]表示取最大值;
若所述發(fā)送端設(shè)備觸發(fā)所述丟包正常事件,則估計(jì)所述目標(biāo)編碼速率為:
Rnew=min(R+R_up,Rmax),其中,R_up為碼率上調(diào)步長,Rmax為所述視頻編碼器的最大編碼速率,所述min[]表示取最小值。
在第一個(gè)方面的第五種可能的實(shí)現(xiàn)方式中,所述發(fā)送端設(shè)備觸發(fā)碼率估計(jì)事件之前,還包括:
所述發(fā)送端設(shè)備接收接收端設(shè)備發(fā)送的反饋信息,所述反饋信息攜帶所述接收端設(shè)備的丟包率;
所述發(fā)送端設(shè)備判斷本地緩存中數(shù)據(jù)包的數(shù)量是否超過預(yù)設(shè)緩存門限上限,或者,所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間是否超過預(yù)設(shè)時(shí)延門限上限;以及,所述發(fā)送端設(shè)備判斷丟包率是否超過預(yù)設(shè)丟包率門限上限;
若所述發(fā)送端設(shè)備判斷出所述本地緩存中數(shù)據(jù)包的數(shù)量超過所述預(yù)設(shè)緩存門限上限,或者,所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間超過所述預(yù)設(shè)時(shí)延門限上限;以及,若所述發(fā)送端設(shè)備判斷出所述丟包率超過所述預(yù)設(shè)丟包率門限上限,則所述碼率估計(jì)事件包括:緩存告警事件與丟包嚴(yán)重事件;否則,
若所述發(fā)送端設(shè)備判斷出所述本地緩存中數(shù)據(jù)包的數(shù)量未超過所述預(yù)設(shè)緩存門限上限,且所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間未超過所述預(yù)設(shè)時(shí)延門限上限;而且,若所述發(fā)送端設(shè)備判斷出所述丟包率未超過所述預(yù)設(shè)丟包率門限上限,則所述碼率估計(jì)事件包括:緩存空閑事件與丟包正常事件。
結(jié)合第一個(gè)方面的第五種可能的實(shí)現(xiàn)方式,在第一個(gè)方面的第六種可能的實(shí)現(xiàn)方式中,所述發(fā)送端設(shè)備根據(jù)所述碼率估計(jì)事件,估計(jì)視頻編碼器的編碼速率,具體包括:
若所述發(fā)送端設(shè)備同時(shí)觸發(fā)所述緩存告警事件與所述丟包嚴(yán)重事件,則所述發(fā)送端設(shè)備根據(jù)所述緩存告警事件確定第一編碼速率,根據(jù)所述丟包嚴(yán)重事件確定第二編碼速率;
所述發(fā)送端設(shè)備根據(jù)所述第一編碼速率與所述第二編碼速率,確定所述目標(biāo)編碼速率;其中,
R1=max[R-R_down,Rmin],所述R1為所述第一編碼速率,所述R為所述視頻編碼器的當(dāng)前編碼速率,R_down為碼率下調(diào)步長,Rmin為所述視頻編碼器的最小編碼速率,所述max[]表示取最大值;
R2=max[R×(1-Rloss),Rmin],所述R2為所述第二編碼速率,Rloss為丟包率,Rmin為所述視頻編碼器的最小編碼速率;
Rnew=min[R1,R2],所述Rnew為所述目標(biāo)編碼速率,所述min[]表示取最小值。
結(jié)合第一個(gè)方面的第五種可能的實(shí)現(xiàn)方式,在第一個(gè)方面的第七種可能的實(shí)現(xiàn)方式中,估計(jì)視頻編碼器的編碼速率,具體包括:
若所述發(fā)送端設(shè)備同時(shí)觸發(fā)所述緩存空閑事件與所述丟包正常事件,則所述發(fā)送端設(shè)備根據(jù)所述緩存空閑事件確定第三編碼速率,根據(jù)所述丟包正常事件確定第四編碼速率;
所述發(fā)送端設(shè)備根據(jù)所述第三編碼速率與所述第四編碼速率,確定所述目標(biāo)編碼速率;其中,
R3=min[R+R_up3,Rmax],所述R3為所述第三編碼速率,所述R為所述視頻編碼器的當(dāng)前編碼速率,所述R_up3為根據(jù)所述R3得出的碼率上調(diào)步長,Rmax為所述視頻編碼器的最大編碼速率,所述min[]表示取最小值;
R4=min[R+R_up4,Rmax],其中,所述R4為所述第四編碼速率,所述R_up4為根據(jù)所述R4得出的碼率上調(diào)步長;
Rnew=min[R3,R4],所述Rnew為所述目標(biāo)編碼速率。
第二個(gè)方面,本發(fā)明實(shí)施例提供一種發(fā)送端設(shè)備,包括:
觸發(fā)模塊,用于觸發(fā)碼率估計(jì)事件;
估計(jì)模塊,用于根據(jù)所述觸發(fā)模塊觸發(fā)的所述碼率估計(jì)事件,估計(jì)視頻編碼器的目標(biāo)編碼速率,所述視頻編碼器為所述發(fā)送端設(shè)備的視頻編碼器;
調(diào)整模塊,用于將所述視頻編碼器的當(dāng)前編碼速率調(diào)整為所述估計(jì)模塊估計(jì)出的所述目標(biāo)編碼速率。
在第二個(gè)方面的第一種可能的實(shí)現(xiàn)方式中,該發(fā)送端設(shè)備還包括:
判斷模塊,用于在所述觸發(fā)模塊觸發(fā)碼率估計(jì)事件之前,判斷本地緩存中數(shù)據(jù)包的數(shù)量是否超過預(yù)設(shè)緩存門限上限,或者,所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間是否超過預(yù)設(shè)時(shí)延門限上限;
所述觸發(fā)模塊,用于若所述判斷模塊判斷出所述本地緩存中數(shù)據(jù)包的數(shù)量超過所述預(yù)設(shè)緩存門限上限,或者,所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間超過所述預(yù)設(shè)時(shí)延門限上限,則觸發(fā)緩存告警事件;否則,若所述判斷模塊判斷出所述本地緩存中數(shù)據(jù)包的數(shù)量未超過所述預(yù)設(shè)緩存門限上限,且所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間未超過所述預(yù)設(shè)時(shí)延門限上限,則觸發(fā)緩存空閑事件。
結(jié)合第二個(gè)方面的第一種可能的實(shí)現(xiàn)方式,在第二個(gè)方面的第二種可能的實(shí)現(xiàn)方式中,所述估計(jì)模塊,具體用于若所述觸發(fā)模塊觸發(fā)所述緩存告警事件,則估計(jì)所述目標(biāo)編碼速率為:
Rnew=max[R-R_down,Rmin],其中,所述Rnew為所述目標(biāo)編碼速率,R為所述視頻編碼器的當(dāng)前編碼速率,R_down為碼率下調(diào)步長,Rmin為所述視頻編碼器的最小編碼速率,所述max[]表示取最大值;
若所述觸發(fā)模塊觸發(fā)所述緩存空閑事件,則估計(jì)所述目標(biāo)編碼速率為:Rnew=min[R+R_up,Rmax],其中,所述R_UP為碼率上調(diào)步長,Rmax為所述視頻編碼器的最大編碼速率,所述min[]表示取最小值。
在第二個(gè)方面的第三種可能的實(shí)現(xiàn)方式中,該發(fā)送端設(shè)備還包括:
處理模塊,用于在所述觸發(fā)模塊觸發(fā)碼率估計(jì)事件之前,接收接收端設(shè)備發(fā)送的反饋信息,所述反饋信息攜帶所述接收端設(shè)備的丟包率,判斷所述丟包率是否超過預(yù)設(shè)丟包率門限上限;
所述觸發(fā)模塊,用于若所述處理模塊判斷出所述丟包率超過所述預(yù)設(shè)丟包率門限上限,則觸發(fā)丟包嚴(yán)重事件;否則,
若所述處理模塊判斷出所述丟包率未超過所述預(yù)設(shè)丟包率門限上限,則 觸發(fā)丟包正常事件。
結(jié)合第二個(gè)方面的第三種可能的實(shí)現(xiàn)方式,在第二個(gè)方面的第四種可能的實(shí)現(xiàn)方式中,所述估計(jì)模塊,具體用于若所述觸發(fā)模塊觸發(fā)所述丟包嚴(yán)重事件,則估計(jì)所述目標(biāo)編碼速率為:
Rnew=max[R×(1-Rloss),Rmin],其中,所述Rnew為所述目標(biāo)編碼速率,R為所述視頻編碼器的當(dāng)前編碼速率,Rloss為所述丟包率,Rmin為所述視頻編碼器的最小編碼速率,所述max[]表示取最大值;
若所述觸發(fā)模塊出所述丟包正常事件,則估計(jì)所述目標(biāo)編碼速率為:
Rnew=min(R+R_up,Rmax),其中,R_up為碼率上調(diào)步長,Rmax為所述視頻編碼器的最大編碼速率,所述min[]表示取最小值。
在第二個(gè)方面的第五種可能的實(shí)現(xiàn)方式中,該發(fā)送端設(shè)備還包括:
處理模塊,用于接收接收端設(shè)備發(fā)送的反饋信息,所述反饋信息攜帶所述接收端設(shè)備的丟包率,判斷本地緩存中數(shù)據(jù)包的數(shù)量是否超過預(yù)設(shè)緩存門限上限,或者,所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間是否超過預(yù)設(shè)時(shí)延門限上限;以及,丟包率是否超過預(yù)設(shè)丟包率門限上限;
所述觸發(fā)模塊,具體用于若所述處理模塊判斷出所述本地緩存中數(shù)據(jù)包的數(shù)量超過所述預(yù)設(shè)緩存門限上限,或者,所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間超過所述預(yù)設(shè)時(shí)延門限上限;以及,所述丟包率超過所述預(yù)設(shè)丟包率門限上限,則觸發(fā)緩存告警事件與丟包嚴(yán)重事件;否則,
若所述處理模塊判斷出所述本地緩存中數(shù)據(jù)包的數(shù)量未超過所述預(yù)設(shè)緩存門限上限,且所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間未超過所述預(yù)設(shè)時(shí)延門限上限;而且,所述丟包率未超過所述預(yù)設(shè)丟包率門限上限,則觸發(fā)緩存空閑事件與丟包正常事件。
結(jié)合第二個(gè)方面的第五種可能的實(shí)現(xiàn)方式,在第二個(gè)方面的第六種可能的實(shí)現(xiàn)方式中,所述估計(jì)模塊,具體用于若所述觸發(fā)模塊同時(shí)觸發(fā)所述緩存告警事件與所述丟包嚴(yán)重事件,則根據(jù)所述緩存告警事件確定第一編碼速率,根據(jù)所述丟包嚴(yán)重事件確定第二編碼速率,根據(jù)所述第一編碼速率與所述第二編碼速率,確定所述目標(biāo)編碼速率;其中,
R1=max[R-R_down,Rmin],所述R1為所述第一編碼速率,所述R為所述視頻編碼器的當(dāng)前編碼速率,R_down為碼率下調(diào)步長,Rmin為所述視頻編碼 器的最小編碼速率,所述max[]表示取最大值;
R2=max[R×(1-Rloss),Rmin],所述R2為所述第二編碼速率,Rloss為丟包率,Rmin為所述視頻編碼器的最小編碼速率;
Rnew=min[R1,R2],所述Rnew為所述目標(biāo)編碼速率,所述min[]表示取最小值。
結(jié)合第二個(gè)方面的第五種可能的實(shí)現(xiàn)方式,在第二個(gè)方面的第七種可能的實(shí)現(xiàn)方式中,所述估計(jì)模塊,具體用于若所述觸發(fā)模塊同時(shí)觸發(fā)所述緩存空閑事件與所述丟包正常事件,則根據(jù)所述緩存空閑事件確定第三編碼速率,根據(jù)所述丟包正常事件確定第四編碼速率,根據(jù)所述第三編碼速率與所述第四編碼速率,確定所述目標(biāo)編碼速率;其中,
R3=min[R+R_up3,Rmax],所述R3為所述第三編碼速率,所述R為所述視頻編碼器的當(dāng)前編碼速率,所述R_up3為根據(jù)所述R3得出的碼率上調(diào)步長,Rmax為所述視頻編碼器的最大編碼速率,所述min[]表示取最小值;
R4=min[R+R_up4,Rmax],其中,所述R4為所述第四編碼速率,所述R_up4為根據(jù)所述R4得出的碼率上調(diào)步長;
Rnew=min[R3,R4],所述Rnew為所述目標(biāo)編碼速率。
本發(fā)明實(shí)施例提供的視頻碼率自適應(yīng)調(diào)整方法及發(fā)送端設(shè)備,發(fā)送端設(shè)備根據(jù)碼率估計(jì)事件估計(jì)目標(biāo)編碼速率,然后將目標(biāo)編碼速率應(yīng)用于視頻編碼器,從而實(shí)現(xiàn)視頻編碼速率的自適應(yīng)調(diào)整,使得發(fā)送端設(shè)備的視頻編碼器的編碼速率與緩存情況、接收端設(shè)備的接收狀況等相符合,達(dá)到解決現(xiàn)有技術(shù)中視頻丟包、視頻業(yè)務(wù)質(zhì)量下降的問題。
附圖說明
圖1為本發(fā)明視頻碼率自適應(yīng)調(diào)整方法實(shí)施例一的流程圖;
圖2為本發(fā)明發(fā)送端設(shè)備實(shí)施例一的結(jié)構(gòu)示意圖;
圖3為本發(fā)明發(fā)送端設(shè)備實(shí)施例二的結(jié)構(gòu)示意圖;
圖4為本發(fā)明發(fā)送端設(shè)備實(shí)施例三的結(jié)構(gòu)示意圖。
具體實(shí)施方式
圖1為本發(fā)明視頻碼率自適應(yīng)調(diào)整方法實(shí)施例一的流程圖。本實(shí)施例的 執(zhí)行主體為發(fā)送端設(shè)備,適用于需要對(duì)發(fā)送端設(shè)備的視頻編碼器的編碼速率進(jìn)行自適應(yīng)調(diào)整的場(chǎng)景。具體的,本實(shí)施例包括如下步驟:
101、發(fā)送端設(shè)備觸發(fā)碼率估計(jì)事件。
本發(fā)明實(shí)施例中,發(fā)送端設(shè)備指具有產(chǎn)生并發(fā)送視頻流功能的設(shè)備,如具有攝像功能的電腦、手機(jī)等電子產(chǎn)品;碼率估計(jì)事件指發(fā)送端設(shè)備發(fā)現(xiàn)當(dāng)前編碼速率下,發(fā)送端設(shè)備的緩存比較空閑,或者接收端設(shè)備的接受狀況良好時(shí),需要提高當(dāng)前編碼速率而觸發(fā)的事件,如緩存空閑時(shí)間、丟包正常事件等;或者,發(fā)送端設(shè)備發(fā)現(xiàn)當(dāng)前編碼速率下,發(fā)送端設(shè)備的緩存比較緊張、或接收端的接收狀況糟糕時(shí),需要降低當(dāng)前碼率而觸發(fā)的事件。
本步驟中,發(fā)送端設(shè)備實(shí)時(shí)或周期性的對(duì)緩存、接收端設(shè)備的接收狀況等進(jìn)行監(jiān)測(cè),以觸發(fā)相關(guān)的碼率估計(jì)事件。
102、所述發(fā)送端設(shè)備根據(jù)所述碼率估計(jì)事件,估計(jì)視頻編碼器的目標(biāo)編碼速率,所述視頻編碼器為所述發(fā)送端設(shè)備的視頻編碼器。
本步驟中,發(fā)送端設(shè)備根據(jù)其觸發(fā)的碼率估計(jì)事件,估計(jì)視頻編碼器可支持的目標(biāo)編碼速率。
103、所述發(fā)送端設(shè)備將所述視頻編碼器的當(dāng)前編碼速率調(diào)整為所述目標(biāo)編碼速率。
本步驟中,發(fā)送端設(shè)備根據(jù)上述步驟102中估計(jì)出的目標(biāo)編碼速率,將視頻編碼器的當(dāng)前編碼速率調(diào)整為目標(biāo)編碼速率。
本發(fā)明實(shí)施例提供的視頻碼率自適應(yīng)方法,發(fā)送端設(shè)備根據(jù)碼率估計(jì)事件估計(jì)目標(biāo)編碼速率,然后將目標(biāo)編碼速率應(yīng)用于視頻編碼器,從而實(shí)現(xiàn)視頻編碼速率的自適應(yīng)調(diào)整,使得發(fā)送端設(shè)備的視頻編碼器的編碼速率與緩存情況、接收端設(shè)備的接收狀況等相符合,達(dá)到解決現(xiàn)有技術(shù)中視頻丟包、視頻業(yè)務(wù)質(zhì)量下降的問題。
上述實(shí)施例中,發(fā)送端設(shè)備在觸發(fā)碼率估計(jì)事件之前,需要根據(jù)本地緩存情況、接收端設(shè)備的丟包率等確定出相關(guān)的碼率估計(jì)事件。下面,對(duì)發(fā)送端設(shè)備如何確定出相關(guān)的碼率估計(jì)事件進(jìn)行描述。
一種可行的實(shí)現(xiàn)方式中,發(fā)送端設(shè)備根據(jù)本地緩存情況觸發(fā)相關(guān)的碼率估計(jì)事件。
具體的,發(fā)送端設(shè)備觸發(fā)碼率估計(jì)事件之前,周期性的監(jiān)控本地緩存情 況,以判斷本地緩存中數(shù)據(jù)包的數(shù)量是否超過預(yù)設(shè)緩存門限上限,或者,所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間是否超過預(yù)設(shè)時(shí)延門限上限;若所述發(fā)送端設(shè)備判斷出所述本地緩存中數(shù)據(jù)包的數(shù)量超過所述預(yù)設(shè)緩存門限上限,或者,所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間超過所述預(yù)設(shè)時(shí)延門限上限,則所述碼率估計(jì)事件具體為緩存告警事件;否則,若所述發(fā)送端設(shè)備判斷出所述本地緩存中數(shù)據(jù)包的數(shù)量未超過所述預(yù)設(shè)緩存門限上限,且所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間未超過所述預(yù)設(shè)時(shí)延門限上限,則所述碼率估計(jì)事件具體為緩存空閑事件。
另一種可行的實(shí)現(xiàn)方式中,發(fā)送端設(shè)備根據(jù)接收端設(shè)備發(fā)送的反饋信息,觸發(fā)相關(guān)的碼率估計(jì)事件。
具體的,所述發(fā)送端設(shè)備觸發(fā)碼率估計(jì)事件之前,還接收接收端設(shè)備發(fā)送的反饋信息,所述反饋信息攜帶所述接收端設(shè)備的丟包率。所述發(fā)送端設(shè)備判斷所述丟包率是否超過預(yù)設(shè)丟包率門限上限;若所述發(fā)送端設(shè)備判斷出所述丟包率超過所述預(yù)設(shè)丟包率門限上限,則所述碼率估計(jì)事件具體為丟包嚴(yán)重事件;否則,若所述發(fā)送端設(shè)備判斷出所述丟包率未超過所述預(yù)設(shè)丟包率門限上限,則所述碼率估計(jì)事件具體為丟包正常事件。其中,反饋信息可以為實(shí)時(shí)傳輸協(xié)議(Real-time Transport Protocol,RTP)報(bào)告,每次接收到RTP報(bào)告后,解析該RTP報(bào)告中的丟包率,然后對(duì)丟包率進(jìn)行判斷。另外,發(fā)送端設(shè)備也可以周期性的對(duì)丟包率進(jìn)行統(tǒng)計(jì)。例如,發(fā)送端設(shè)備將統(tǒng)計(jì)周期設(shè)置為次數(shù),在接收到預(yù)設(shè)次數(shù)的RTP報(bào)告后,對(duì)其中的最大丟包率進(jìn)行判斷;再如,發(fā)送端設(shè)備將周期設(shè)置為時(shí)長,在預(yù)設(shè)時(shí)長內(nèi)接收RTP報(bào)告,對(duì)其中的最大丟包率進(jìn)行判斷。
由一種可行的實(shí)現(xiàn)方式中,發(fā)送端設(shè)備也可以同時(shí)對(duì)本地緩存情況于接收端設(shè)備的丟包率進(jìn)行判斷,從而確定出相關(guān)的碼率估計(jì)事件。
具體的,發(fā)送端設(shè)備觸發(fā)碼率估計(jì)事件之前,還接收接收端設(shè)備發(fā)送的反饋信息,所述反饋信息攜帶所述接收端設(shè)備的丟包率。然后,發(fā)送端設(shè)備判斷本地緩存中數(shù)據(jù)包的數(shù)量是否超過預(yù)設(shè)緩存門限上限,或者,所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間是否超過預(yù)設(shè)時(shí)延門限上限;以及,所述發(fā)送端設(shè)備判斷丟包率是否超過預(yù)設(shè)丟包率門限上限。
上述判斷過程中,若所述發(fā)送端設(shè)備判斷出所述本地緩存中數(shù)據(jù)包的數(shù) 量超過所述預(yù)設(shè)緩存門限上限,或者,所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間超過所述預(yù)設(shè)時(shí)延門限上限;以及,若所述發(fā)送端設(shè)備判斷出所述丟包率超過所述預(yù)設(shè)丟包率門限上限,則所述碼率估計(jì)事件包括:緩存告警事件與丟包嚴(yán)重事件;否則,若所述發(fā)送端設(shè)備判斷出所述本地緩存中數(shù)據(jù)包的數(shù)量未超過所述預(yù)設(shè)緩存門限上限,且所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間未超過所述預(yù)設(shè)時(shí)延門限上限;而且,若所述發(fā)送端設(shè)備判斷出所述丟包率未超過所述預(yù)設(shè)丟包率門限上限,則所述碼率估計(jì)事件包括:緩存空閑事件與丟包正常事件。
在詳細(xì)描述了發(fā)送端設(shè)備如何確定出相關(guān)的碼率估計(jì)事件之后,下面,對(duì)發(fā)送端設(shè)備如何根據(jù)碼率估計(jì)事件,估計(jì)視頻編碼器的目標(biāo)編碼速率進(jìn)行詳細(xì)說明。
具體的,當(dāng)發(fā)送端設(shè)備觸發(fā)緩存告警事件時(shí),發(fā)送端設(shè)備估計(jì)目標(biāo)編碼速率為:Rnew=max[R-R_down,Rmin],其中,所述Rnew為所述目標(biāo)編碼速率,R為所述視頻編碼器的當(dāng)前編碼速率,R_down為碼率下調(diào)步長,Rmin為所述視頻編碼器的最小編碼速率,所述max[]表示取最大值。
當(dāng)發(fā)送端設(shè)備觸發(fā)緩存空閑事件時(shí),發(fā)送端設(shè)備估計(jì)所述目標(biāo)編碼速率為:Rnew=min[R+R_up,Rmax],其中,所述R_UP為碼率上調(diào)步長,Rmax為所述視頻編碼器的最大編碼速率,所述min[]表示取最小值。
當(dāng)發(fā)送端設(shè)備觸發(fā)丟包嚴(yán)重事件時(shí),發(fā)送端設(shè)備估計(jì)所述目標(biāo)編碼速率為:Rnew=max[R×(1-Rloss),Rmin],其中,所述Rnew為所述目標(biāo)編碼速率,R為所述視頻編碼器的當(dāng)前編碼速率,Rloss為所述丟包率,Rmin為所述視頻編碼器的最小編碼速率,所述max[]表示取最大值。
當(dāng)發(fā)送端設(shè)備觸發(fā)丟包正常事件時(shí),發(fā)送端設(shè)備估計(jì)所述目標(biāo)編碼速率為:Rnew=min(R+R_up,Rmax),其中,R_up為碼率上調(diào)步長,Rmax為所述視頻編碼器的最大編碼速率,所述min[]表示取最小值。
令上述觸發(fā)緩存告警事件時(shí)估計(jì)出的目標(biāo)碼率Rnew為第一編碼速率R1,觸發(fā)緩存空閑事件時(shí)估計(jì)出的目標(biāo)碼率Rnew為第二編碼速率R2,觸發(fā)丟包嚴(yán)重事件時(shí)估計(jì)出的目標(biāo)碼率Rnew為第三編碼速率R3,觸發(fā)丟包正常事件時(shí)估計(jì)出的目標(biāo)碼率Rnew為第四編碼速率R4。
當(dāng)發(fā)送端設(shè)備同時(shí)觸發(fā)所述緩存告警事件與所述丟包嚴(yán)重事件時(shí),此時(shí), 所述發(fā)送端設(shè)備根據(jù)所述第一編碼速率R1與所述第二編碼速率R2,確定所述目標(biāo)編碼速率Rnew:Rnew=min[R1,R2],所述Rnew為所述目標(biāo)編碼速率,所述min[]表示取最小值。
當(dāng)發(fā)送端設(shè)備同時(shí)觸發(fā)所述緩存空閑事件與所述丟包正常事件時(shí),此時(shí),所述發(fā)送端設(shè)備根據(jù)所述第三編碼速率R3與所述第四編碼速率R4,確定所述目標(biāo)編碼速率Rnew。該過程中,R3=min[R+R_up3,Rmax],所述R3為所述第三編碼速率,所述R為所述視頻編碼器的當(dāng)前編碼速率,所述R_up3為根據(jù)所述R3得出的碼率上調(diào)步長,Rmax為所述視頻編碼器的最大編碼速率,所述min[]表示取最小值;R4=min[R+R_up4,Rmax],其中,所述R4為所述第四編碼速率,所述R_up4為根據(jù)所述R4得出的碼率上調(diào)步長;Rnew=min[R3,R4],所述Rnew為所述目標(biāo)編碼速率。
在確定出目標(biāo)編碼速率后,若目標(biāo)編碼速率不等于發(fā)送端設(shè)備的視頻編碼器的當(dāng)前編碼速率,則將該目標(biāo)編碼速率應(yīng)用于視頻編碼器,并重啟監(jiān)控本地緩存和統(tǒng)計(jì)丟包率的周期。如此一來,發(fā)送端設(shè)備就可以周期性的根據(jù)本地緩存情況和接收端設(shè)備的丟包率情況對(duì)編碼速率進(jìn)行上調(diào)或下調(diào),從而實(shí)現(xiàn)自適應(yīng)調(diào)整發(fā)送端設(shè)備的視頻編碼器的編碼速率的目的。
圖2為本發(fā)明發(fā)送端設(shè)備實(shí)施例一的結(jié)構(gòu)示意圖。本實(shí)施例提供的發(fā)送端設(shè)備是與本發(fā)明圖1實(shí)施例對(duì)應(yīng)的裝置實(shí)施例,具體實(shí)現(xiàn)過程在此不再贅述。具體的,本實(shí)施例提供的發(fā)送端設(shè)備包括:
觸發(fā)模塊11,用于觸發(fā)碼率估計(jì)事件;
估計(jì)模塊12,用于根據(jù)所述觸發(fā)模塊11觸發(fā)的所述碼率估計(jì)事件,估計(jì)視頻編碼器的目標(biāo)編碼速率,所述視頻編碼器為所述發(fā)送端設(shè)備的視頻編碼器;
調(diào)整模塊13,用于將所述視頻編碼器的當(dāng)前編碼速率調(diào)整為所述估計(jì)模塊12估計(jì)出的所述目標(biāo)編碼速率。
本發(fā)明實(shí)施例提供的發(fā)送端設(shè)備,根據(jù)碼率估計(jì)事件估計(jì)目標(biāo)編碼速率,然后將目標(biāo)編碼速率應(yīng)用于視頻編碼器,從而實(shí)現(xiàn)視頻編碼速率的自適應(yīng)調(diào)整,使得發(fā)送端設(shè)備的視頻編碼器的編碼速率與緩存情況、接收端設(shè)備的接收狀況等相符合,達(dá)到解決現(xiàn)有技術(shù)中視頻丟包、視頻業(yè)務(wù)質(zhì)量下降的問題。
圖3為本發(fā)明發(fā)送端設(shè)備實(shí)施例二的結(jié)構(gòu)示意圖。如圖3所示,本實(shí)施 例提供的發(fā)送端設(shè)備在圖2所示發(fā)送端設(shè)備的基礎(chǔ)上,進(jìn)一步的,還包括:
判斷模塊14,用于在所述觸發(fā)模塊11觸發(fā)碼率估計(jì)事件之前,判斷本地緩存中數(shù)據(jù)包的數(shù)量是否超過預(yù)設(shè)緩存門限上限,或者,所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間是否超過預(yù)設(shè)時(shí)延門限上限;
所述觸發(fā)模塊11,用于若所述判斷模塊14判斷出所述本地緩存中數(shù)據(jù)包的數(shù)量超過所述預(yù)設(shè)緩存門限上限,或者,所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間超過所述預(yù)設(shè)時(shí)延門限上限,則觸發(fā)緩存告警事件;否則,若所述判斷模塊14判斷出所述本地緩存中數(shù)據(jù)包的數(shù)量未超過所述預(yù)設(shè)緩存門限上限,且所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間未超過所述預(yù)設(shè)時(shí)延門限上限,則觸發(fā)緩存空閑事件。
可選的,在本發(fā)明一實(shí)施例中,所述估計(jì)模塊12,具體用于若所述觸發(fā)模塊11觸發(fā)所述緩存告警事件,則估計(jì)所述目標(biāo)編碼速率為:
Rnew=max[R-R_down,Rmin],其中,所述Rnew為所述目標(biāo)編碼速率,R為所述視頻編碼器的當(dāng)前編碼速率,R_down為碼率下調(diào)步長,Rmin為所述視頻編碼器的最小編碼速率,所述max[]表示取最大值;
若所述觸發(fā)模塊11觸發(fā)所述緩存空閑事件,則估計(jì)所述目標(biāo)編碼速率為:Rnew=min[R+R_up,Rmax],其中,所述R_UP為碼率上調(diào)步長,Rmax為所述視頻編碼器的最大編碼速率,所述min[]表示取最小值。
圖4為本發(fā)明發(fā)送端設(shè)備實(shí)施例三的結(jié)構(gòu)示意圖。如圖4所示,本實(shí)施例提供的發(fā)送端設(shè)備在圖2所示發(fā)送端設(shè)備的基礎(chǔ)上,進(jìn)一步的,還包括:
處理模塊15,用于在所述觸發(fā)模塊11觸發(fā)碼率估計(jì)事件之前,接收接收端設(shè)備發(fā)送的反饋信息,所述反饋信息攜帶所述接收端設(shè)備的丟包率,判斷所述丟包率是否超過預(yù)設(shè)丟包率門限上限;
所述觸發(fā)模塊11,用于若所述處理模塊15判斷出所述丟包率超過所述預(yù)設(shè)丟包率門限上限,則觸發(fā)丟包嚴(yán)重事件;否則,
若所述處理模塊15判斷出所述丟包率未超過所述預(yù)設(shè)丟包率門限上限,則觸發(fā)丟包正常事件。
可選的,在本發(fā)明一實(shí)施例中,所述估計(jì)模塊12,具體用于若所述觸發(fā)模塊11觸發(fā)所述丟包嚴(yán)重事件,則估計(jì)所述目標(biāo)編碼速率為:
Rnew=max[R×(1-Rloss),Rmin],其中,所述Rnew為所述目標(biāo)編碼速率, R為所述視頻編碼器的當(dāng)前編碼速率,Rloss為所述丟包率,Rmin為所述視頻編碼器的最小編碼速率,所述max[]表示取最大值;
若所述觸發(fā)模塊11出所述丟包正常事件,則估計(jì)所述目標(biāo)編碼速率為:
Rnew=min(R+R_up,Rmax),其中,R_up為碼率上調(diào)步長,Rmax為所述視頻編碼器的最大編碼速率,所述min[]表示取最小值。
可選的,在本發(fā)明一實(shí)施例中,處理模塊15,用于接收接收端設(shè)備發(fā)送的反饋信息,所述反饋信息攜帶所述接收端設(shè)備的丟包率,判斷本地緩存中數(shù)據(jù)包的數(shù)量是否超過預(yù)設(shè)緩存門限上限,或者,所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間是否超過預(yù)設(shè)時(shí)延門限上限;以及,丟包率是否超過預(yù)設(shè)丟包率門限上限;
所述觸發(fā)模塊11,具體用于若所述處理模塊15判斷出所述本地緩存中數(shù)據(jù)包的數(shù)量超過所述預(yù)設(shè)緩存門限上限,或者,所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間超過所述預(yù)設(shè)時(shí)延門限上限;以及,所述丟包率超過所述預(yù)設(shè)丟包率門限上限,則觸發(fā)緩存告警事件與丟包嚴(yán)重事件;否則,
若所述處理模塊15判斷出所述本地緩存中數(shù)據(jù)包的數(shù)量未超過所述預(yù)設(shè)緩存門限上限,且所述本地緩存中數(shù)據(jù)包的最大等待時(shí)間未超過所述預(yù)設(shè)時(shí)延門限上限;而且,所述丟包率未超過所述預(yù)設(shè)丟包率門限上限,則觸發(fā)緩存空閑事件與丟包正常事件。
可選的,在本發(fā)明一實(shí)施例中,所述估計(jì)模塊12,具體用于若所述觸發(fā)模塊11同時(shí)觸發(fā)所述緩存告警事件與所述丟包嚴(yán)重事件,則根據(jù)所述緩存告警事件確定第一編碼速率,根據(jù)所述丟包嚴(yán)重事件確定第二編碼速率,根據(jù)所述第一編碼速率與所述第二編碼速率,確定所述目標(biāo)編碼速率;其中,
R1=max[R-R_down,Rmin],所述R1為所述第一編碼速率,所述R為所述視頻編碼器的當(dāng)前編碼速率,R_down為碼率下調(diào)步長,Rmin為所述視頻編碼器的最小編碼速率,所述max[]表示取最大值;
R2=max[R×(1-Rloss),Rmin],所述R2為所述第二編碼速率,Rloss為丟包率,Rmin為所述視頻編碼器的最小編碼速率;
Rnew=min[R1,R2],所述Rnew為所述目標(biāo)編碼速率,所述min[]表示取最小值。
可選的,在本發(fā)明一實(shí)施例中,所述估計(jì)模塊12,具體用于若所述觸發(fā) 模塊11同時(shí)觸發(fā)所述緩存空閑事件與所述丟包正常事件,則根據(jù)所述緩存空閑事件確定第三編碼速率,根據(jù)所述丟包正常事件確定第四編碼速率,根據(jù)所述第三編碼速率與所述第四編碼速率,確定所述目標(biāo)編碼速率;其中,
R3=min[R+R_up3,Rmax],所述R3為所述第三編碼速率,所述R為所述視頻編碼器的當(dāng)前編碼速率,所述R_up3為根據(jù)所述R3得出的碼率上調(diào)步長,Rmax為所述視頻編碼器的最大編碼速率,所述min[]表示取最小值;
R4=min[R+R_up4,Rmax],其中,所述R4為所述第四編碼速率,所述R_up4為根據(jù)所述R4得出的碼率上調(diào)步長;
Rnew=min[R3,R4],所述Rnew為所述目標(biāo)編碼速率。
本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述各方法實(shí)施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成。前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。該程序在執(zhí)行時(shí),執(zhí)行包括上述各方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括:ROM、RAM、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
最后應(yīng)說明的是:以上各實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述各實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。