本發(fā)明涉及視頻通話技術(shù)領(lǐng)域,尤其涉及一種基于volte的視頻通話碼率調(diào)整方法、裝置及移動終端。
背景技術(shù):
volte(voice&videooverlte,lte網(wǎng)絡(luò)音視頻通話)是通過lte(longtermevolution,長期演進)網(wǎng)絡(luò)作為業(yè)務(wù)接入、ims(ipmultimediasubsystem,ip多媒體子系統(tǒng))網(wǎng)絡(luò)實現(xiàn)業(yè)務(wù)控制的音視頻解決方案,它支持高清語音、高清視頻等通信業(yè)務(wù),也可實現(xiàn)與2g/3g網(wǎng)絡(luò)的語音兼容互通。
作為volte的核心業(yè)務(wù)之一,視頻通話業(yè)務(wù)為移動終端用戶提供了新的通話體驗。而在進行視頻通話的過程中,視頻質(zhì)量的好壞也成為了用戶最為關(guān)注的焦點。移動終端進行視頻通話時,會根據(jù)視頻分辨率和幀率來配置視頻編碼的碼率,如果碼率過大的話,會造成網(wǎng)絡(luò)丟包使得對端視頻畫面出現(xiàn)馬賽克,影響用戶體驗。
目前,常見的碼率配置方案是將通話建立時通話雙方協(xié)商的網(wǎng)絡(luò)帶寬作為參照值,并基于此來進行碼率的動態(tài)調(diào)整。
在實現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下技術(shù)問題:
通話建立時通話雙方協(xié)商的網(wǎng)絡(luò)帶寬只是一個經(jīng)驗值,不能精確表征當(dāng)前網(wǎng)絡(luò)的實際帶寬,如果基于此來做動態(tài)調(diào)整不能保證視頻通話質(zhì)量。
技術(shù)實現(xiàn)要素:
本發(fā)明提供的基于volte的視頻通話碼率調(diào)整方法、裝置及移動終端,能夠基于實際網(wǎng)絡(luò)帶寬進行碼率的動態(tài)調(diào)整,保證視頻通話質(zhì)量。
第一方面,本發(fā)明提供一種基于volte的視頻通話碼率調(diào)整方法,所述方法應(yīng)用于數(shù)據(jù)接收方,所述數(shù)據(jù)接收方用于發(fā)送tmmbr包,所述方法包括:
判斷所述數(shù)據(jù)接收方是否為第一次發(fā)送tmmbr包或是否接收到數(shù)據(jù)發(fā)送方的tmmbn包或同一個tmmbr包重傳的次數(shù)是否超過預(yù)定次數(shù);
若為第一次發(fā)送tmmbr包或接收到所述數(shù)據(jù)發(fā)送方的tmmbn包或同一個tmmbr包重傳的次數(shù)超過預(yù)定次數(shù),則估計下行接收碼率并計算rtp包的下行丟包率;
根據(jù)計算出的rtp包的下行丟包率和估計出的下行接收碼率計算請求對端發(fā)送的碼率;
根據(jù)所述請求對端發(fā)送的碼率,向所述數(shù)據(jù)發(fā)送方發(fā)送tmmbr包。
可選的,所述方法還包括:
若不是第一次發(fā)送tmmbr包且未接收到所述數(shù)據(jù)發(fā)送方的tmmbn包且同一個tmmbr包重傳的次數(shù)未超過預(yù)定次數(shù),則根據(jù)上一次計算出的請求對端發(fā)送的碼率向所述數(shù)據(jù)發(fā)送方發(fā)送tmmbr包。
可選的,所述估計下行接收碼率包括:
當(dāng)tcur≥tstart+tperiod時,按照公式(1)更新上一個統(tǒng)計周期的平均碼率bprev:
bprev=(stotal-sprev)×8/(tcur-tstart),tstart>0(1)
其中,stotal為當(dāng)前rtp包有效載荷長度的累積值,sprev為上一個周期rtp包有效載荷長度的累積值,tcur為當(dāng)前時間,tstart為當(dāng)前周期收到第一個包的時間,tperiod為時間周期,每個統(tǒng)計周期結(jié)束之后,tstart被清零,sprev則更新為stotal;
當(dāng)tcur∈[tstart,tstart+tperiod)時,按照公式(2)對下行碼率進行估計:
best=(1-α)·bprev+α·bcur(2)
其中,best為碼率估計值,bprev為上一個統(tǒng)計周期的平均碼率,bcur為當(dāng)前的 平均碼率,α為權(quán)重系數(shù),其中,α按照公式(3)取值:
可選的,所述計算rtp包的下行丟包率包括:
若累計的應(yīng)接收的rtp數(shù)據(jù)包的個數(shù)(slast-sstart)大于等于閾值nthres,則根據(jù)公式(4)計算丟包率ploss:
ploss=(slast-sstart-nrecv)/(slast-sstart),slast-sstart≥nthres(4)
其中,slast為最近一個rtp包的序列號,sstart為統(tǒng)計周期內(nèi)第一個rtp包的序列號,nrecv為統(tǒng)計周期內(nèi)實際收到的rtp包個數(shù)。
可選的,所述根據(jù)計算出的rtp包的下行丟包率和估計出的下行接收碼率計算請求對端發(fā)送的碼率包括:
若ploss≥p1,p1為預(yù)設(shè)的第一丟包率閾值,則令n=0,初始化步進長度h0,并按照公式(5)和(6)計算請求對端發(fā)送的碼率btmmbr,
h0=β·best(5)
btmmbr=best-hn(6)
其中,β為比例系數(shù),0<β<1;
令n=n+1,若ploss≥p2,p2為預(yù)設(shè)的第二丟包率閾值,根據(jù)公式(7)更新步進長度hn,
其中,λ為常數(shù),0<λ<1,p2為丟包率的收斂值,0<p2<p1;
若p2≤ploss<p1且不滿足hn<hmin,則根據(jù)公式(6)計算btmmbr;
若0≤ploss<p2且不滿足hn<hmin,則根據(jù)公式(8)計算btmmbr,
btmmbr=best+hn(8)。
第二方面,本發(fā)明提供一種基于volte的視頻通話碼率調(diào)整方法,所述數(shù)據(jù)發(fā)送方用于接收tmmbr包,所述方法應(yīng)用于數(shù)據(jù)發(fā)送方,所述方法包括:
接收數(shù)據(jù)接收方在第一次發(fā)送tmmbr包或接收到所述數(shù)據(jù)發(fā)送方的tmmbn包或同一個tmmbr包重傳的次數(shù)超過預(yù)定次數(shù)時根據(jù)請求對端發(fā)送的碼率發(fā)送的tmmbr包,其中,所述請求對端發(fā)送的碼率為所述數(shù)據(jù)接收方根據(jù)計算出的rtp包的下行丟包率和估計出的下行接收碼率計算得到;
向所述數(shù)據(jù)接收方發(fā)送tmmbn包;
從所述tmmbr包中解析出對端請求的碼率信息;
根據(jù)所述對端請求的碼率信息計算將要配置的編碼碼率;
根據(jù)所述將要配置的編碼碼率完成編碼碼率的配置。
可選的,所述根據(jù)所述對端請求的碼率信息計算將要配置的編碼碼率包括:
按照公式(9)計算將要配置的編碼碼率bconfig:
其中,btmmbr為從tmmbr包解析出來的碼率,bmax和bmin分別為碼率配置區(qū)間的上限值和下限值。
第三方面,本發(fā)明提供一種基于volte的視頻通話碼率調(diào)整裝置,所述裝置位于數(shù)據(jù)接收方,所述數(shù)據(jù)接收方用于發(fā)送tmmbr包,所述裝置包括:
判斷單元,用于判斷所述數(shù)據(jù)接收方是否為第一次發(fā)送tmmbr包或是否接收到數(shù)據(jù)發(fā)送方的tmmbn包或同一個tmmbr包重傳的次數(shù)是否超過預(yù)定 次數(shù);
估計單元,用于當(dāng)所述判斷單元判斷為第一次發(fā)送tmmbr包或接收到所述數(shù)據(jù)發(fā)送方的tmmbn包或同一個tmmbr包重傳的次數(shù)超過預(yù)定次數(shù)時,估計下行接收碼率;
第一計算單元,用于計算rtp包的下行丟包率;
第二計算單元,用于根據(jù)所述第一計算單元計算出的rtp包的下行丟包率和所述估計單元估計出的下行接收碼率計算請求對端發(fā)送的碼率;
第一發(fā)送單元,用于根據(jù)所述請求對端發(fā)送的碼率,向所述數(shù)據(jù)發(fā)送方發(fā)送tmmbr包。
可選的,所述第一發(fā)送單元,還用于在所述判斷單元判斷不是第一次發(fā)送tmmbr包且未接收到所述數(shù)據(jù)發(fā)送方的tmmbn包且同一個tmmbr包重傳的次數(shù)未超過預(yù)定次數(shù)時,根據(jù)上一次計算出的請求對端發(fā)送的碼率向所述數(shù)據(jù)發(fā)送方發(fā)送tmmbr包。
可選的,所述估計單元,用于按照如下方式估計下行接收碼率:
當(dāng)tcur≥tstart+tperiod時,按照公式(1)更新上一個統(tǒng)計周期的平均碼率bprev:
bprev=(stotal-sprev)×8/(tcur-tstart),tstart>0(1)
其中,stotal為當(dāng)前rtp包有效載荷長度的累積值,sprev為上一個周期rtp包有效載荷長度的累積值,tcur為當(dāng)前時間,tstart為當(dāng)前周期收到第一個包的時間,tperiod為時間周期,每個統(tǒng)計周期結(jié)束之后,tstart被清零,sprev則更新為stotal;
當(dāng)tcur∈[tstart,tstart+tperiod)時,按照公式(2)對下行碼率進行估計:
best=(1-α)·bprev+α·bcur(2)
其中,best為碼率估計值,bprev為上一個統(tǒng)計周期的平均碼率,bcur為當(dāng)前的平均碼率,α為權(quán)重系數(shù),其中,α按照公式(3)取值:
可選的,所述第一計算單元,用于按照如下方式計算rtp包的下行丟包率:
若累計的應(yīng)接收的rtp數(shù)據(jù)包的個數(shù)(slast-sstart)大于等于閾值nthres,則根據(jù)公式(4)計算丟包率ploss:
ploss=(slast-sstart-nrecv)/(slast-sstart),slast-sstart≥nthres(4)
其中,slast為最近一個rtp包的序列號,sstart為統(tǒng)計周期內(nèi)第一個rtp包的序列號,nrecv為統(tǒng)計周期內(nèi)實際收到的rtp包個數(shù)。
可選的,所述第二計算單元,用于按照如下方式計算請求對端發(fā)送的碼率:
若ploss≥p1,p1為預(yù)設(shè)的第一丟包率閾值,則令n=0,初始化步進長度h0,并按照公式(5)和(6)計算請求對端發(fā)送的碼率btmmbr,
h0=β·best(5)
btmmbr=best-hn(6)
其中,β為比例系數(shù),0<β<1;
令n=n+1,若ploss≥p2,p2為預(yù)設(shè)的第二丟包率閾值,根據(jù)公式(7)更新步進長度hn,
其中,λ為常數(shù),0<λ<1,p2為丟包率的收斂值,0<p2<p1;
若p2≤ploss<p1且不滿足hn<hmin,則根據(jù)公式(6)計算btmmbr;
若0≤ploss<p2且不滿足hn<hmin,則根據(jù)公式(8)計算btmmbr,
btmmbr=best+hn(8)。
第四方面,本發(fā)明提供一種基于volte的視頻通話碼率調(diào)整裝置,所述數(shù)據(jù)發(fā)送方用于接收tmmbr包,所述裝置位于數(shù)據(jù)發(fā)送方,所述裝置包括:
接收單元,用于接收數(shù)據(jù)接收方在第一次發(fā)送tmmbr包或接收到所述數(shù)據(jù)發(fā)送方的tmmbn包或同一個tmmbr包重傳的次數(shù)超過預(yù)定次數(shù)時根據(jù)請求對端發(fā)送的碼率發(fā)送的tmmbr包,其中,所述請求對端發(fā)送的碼率為所述數(shù)據(jù)接收方根據(jù)計算出的rtp包的下行丟包率和估計出的下行接收碼率計算得到;
第二發(fā)送單元,用于向所述數(shù)據(jù)接收方發(fā)送tmmbn包;
解析單元,用于從所述tmmbr包中解析出對端請求的碼率信息;
第三計算單元,用于根據(jù)所述對端請求的碼率信息計算將要配置的編碼碼率;
配置單元,用于根據(jù)所述將要配置的編碼碼率完成編碼碼率的配置。
可選的,所述第三計算單元,用于按照如下方式計算將要配置的編碼碼率:
按照公式(9)計算將要配置的編碼碼率bconfig:
其中,btmmbr為從tmmbr包解析出來的碼率,bmax和bmin分別為碼率配置區(qū)間的上限值和下限值。
第五方面,本發(fā)明提供一種移動終端,包括上述位于數(shù)據(jù)接收方的基于volte的視頻通話碼率調(diào)整裝置。
第六方面,本發(fā)明提供一種移動終端,包括上述位于數(shù)據(jù)發(fā)送方的基于volte的視頻通話碼率調(diào)整裝置。
本發(fā)明實施例提供的基于volte的視頻通話碼率調(diào)整方法、裝置及移動終端,當(dāng)為第一次發(fā)送tmmbr包或接收到數(shù)據(jù)發(fā)送方的tmmbn包或同一個tmmbr包重傳的次數(shù)超過預(yù)定次數(shù)時,估計下行接收碼率并計算rtp包的下行丟包率,根據(jù)計算出的rtp包的下行丟包率和估計出的下行接收碼率計算請求對端發(fā)送的碼率,根據(jù)所述請求對端發(fā)送的碼率,向數(shù)據(jù)發(fā)送方發(fā)送tmmbr包,以便數(shù)據(jù)發(fā)送方從所述tmmbr包中解析出對端請求的碼率信息,并計算將要配置的編碼碼率,根據(jù)所述將要配置的編碼碼率完成編碼碼率的配置。與現(xiàn)有技術(shù)相比,本發(fā)明能夠基于實際網(wǎng)絡(luò)帶寬進行碼率的動態(tài)調(diào)整,保證視頻通話質(zhì)量。
附圖說明
圖1為本發(fā)明一實施例基于volte的視頻通話碼率調(diào)整方法的流程圖;
圖2為本發(fā)明另一實施例基于volte的視頻通話碼率調(diào)整方法的流程圖;
圖3為本發(fā)明再一實施例基于volte的視頻通話碼率調(diào)整方法的流程圖;
圖4為圖3中計算請求對端發(fā)送的碼率時的算法狀態(tài)遷移示意圖;
圖5為本發(fā)明一實施例基于volte的視頻通話碼率調(diào)整裝置的結(jié)構(gòu)示意圖;
圖6為本發(fā)明另一實施例基于volte的視頻通話碼率調(diào)整裝置的結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明實施例提供一種基于volte的視頻通話碼率調(diào)整方法,所述方法應(yīng)用于數(shù)據(jù)接收方,所述數(shù)據(jù)接收方用于發(fā)送tmmbr(temporarymaximummediastreambitraterequest,臨時最大媒體流比特率請求)包,如圖1所示,所述方法包括:
s11、判斷所述數(shù)據(jù)接收方是否為第一次發(fā)送tmmbr包或是否接收到數(shù)據(jù)發(fā)送方的tmmbn(temporarymaximummediastreambitratenotification,臨時最大媒體流比特率通知)包或同一個tmmbr包重傳的次數(shù)是否超過預(yù)定次數(shù);
可選的,所述預(yù)定次數(shù)可以為2次。
s12、若為第一次發(fā)送tmmbr包或接收到所述數(shù)據(jù)發(fā)送方的tmmbn包或同一個tmmbr包重傳的次數(shù)超過預(yù)定次數(shù),則估計下行接收碼率并計算rtp(real-timetransportprotocol,實時傳輸協(xié)議)包的下行丟包率;
s13、根據(jù)計算出的rtp包的下行丟包率和估計出的下行接收碼率計算請求對端發(fā)送的碼率;
s14、根據(jù)所述請求對端發(fā)送的碼率,向所述數(shù)據(jù)發(fā)送方發(fā)送tmmbr包。
本發(fā)明實施例提供的基于volte的視頻通話碼率調(diào)整方法,當(dāng)為第一次發(fā)送tmmbr包或接收到數(shù)據(jù)發(fā)送方的tmmbn包或同一個tmmbr包重傳的次數(shù)超過預(yù)定次數(shù)時,估計下行接收碼率并計算rtp包的下行丟包率,根據(jù)計算出的rtp包的下行丟包率和估計出的下行接收碼率計算請求對端發(fā)送的碼率,根據(jù)所述請求對端發(fā)送的碼率,向數(shù)據(jù)發(fā)送方發(fā)送tmmbr包,以便數(shù)據(jù)發(fā)送方從所述tmmbr包中解析出對端請求的碼率信息,并計算將要配置的編碼碼率,根據(jù)所述將要配置的編碼碼率完成編碼碼率的配置。與現(xiàn)有技術(shù)相比,本發(fā)明能夠基于實際網(wǎng)絡(luò)帶寬進行碼率的動態(tài)調(diào)整,保證視頻通話質(zhì)量。
本發(fā)明實施例還提供一種基于volte的視頻通話碼率調(diào)整方法,所述方法應(yīng)用于數(shù)據(jù)發(fā)送方,所述數(shù)據(jù)發(fā)送方用于接收tmmbr包,如圖2所示,所述方法包括:
s21、接收數(shù)據(jù)接收方在第一次發(fā)送tmmbr包或接收到所述數(shù)據(jù)發(fā)送方的tmmbn包或同一個tmmbr包重傳的次數(shù)超過預(yù)定次數(shù)時根據(jù)請求對端發(fā)送的碼率發(fā)送的tmmbr包,其中,所述請求對端發(fā)送的碼率為所述數(shù)據(jù)接收方根據(jù)計算出的rtp包的下行丟包率和估計出的下行接收碼率計算得到;
s22、向所述數(shù)據(jù)接收方發(fā)送tmmbn包;
s23、從所述tmmbr包中解析出對端請求的碼率信息;
s24、根據(jù)所述對端請求的碼率信息計算將要配置的編碼碼率;
s25、根據(jù)所述將要配置的編碼碼率完成編碼碼率的配置。
本發(fā)明實施例提供的基于volte的視頻通話碼率調(diào)整方法,接收數(shù)據(jù)接收方在第一次發(fā)送tmmbr包或接收到所述數(shù)據(jù)發(fā)送方的tmmbn包或同一個tmmbr包重傳的次數(shù)超過預(yù)定次數(shù)時根據(jù)請求對端發(fā)送的碼率發(fā)送的tmmbr包,所述請求對端發(fā)送的碼率為所述數(shù)據(jù)接收方根據(jù)計算出的rtp包的下行丟包率和估計出的下行接收碼率計算得到,從所述tmmbr包中解析出對端請求的碼率信息,并計算將要配置的編碼碼率,根據(jù)所述將要配置的編碼碼率完成編碼碼率的配置。與現(xiàn)有技術(shù)相比,本發(fā)明能夠基于實際網(wǎng)絡(luò)帶寬進行碼率的動態(tài)調(diào)整,保證視頻通話質(zhì)量。
本發(fā)明實施例還提供一種基于volte的視頻通話碼率調(diào)整方法,如圖3所示,所述方法包括:
s301、數(shù)據(jù)接收方判斷是否為第一次發(fā)送tmmbr包或是否接收到對端的tmmbn包或同一個tmmbr包重傳的次數(shù)是否超過預(yù)定次數(shù),若是,則執(zhí)行步 驟s302;若否,則執(zhí)行步驟s305。
可選的,所述預(yù)定次數(shù)可以為2次。
其中,在volte網(wǎng)絡(luò)中,數(shù)據(jù)發(fā)送方與數(shù)據(jù)接收方之間通過sip(sessioninitiationprotocol,會話發(fā)起協(xié)議)完成媒體能力協(xié)商和會話建立。當(dāng)視頻通話建立之后,數(shù)據(jù)發(fā)送方的視頻采集模塊將采集的數(shù)據(jù)輸出給dsp編碼模塊,dsp編碼模塊會對原始數(shù)據(jù)進行壓縮編碼并通過rtp組包的方式經(jīng)由網(wǎng)絡(luò)發(fā)送至數(shù)據(jù)接收方。數(shù)據(jù)接收方接收rtp數(shù)據(jù)并解包,之后將數(shù)據(jù)輸出至抖動抑制模塊,dsp解碼模塊從抖動抑制模塊中獲取視頻幀數(shù)據(jù)并對其進行解碼,最后通過視頻顯示模塊顯示出來。如果數(shù)據(jù)接收方的下行rtp數(shù)據(jù)存在丟包,會出現(xiàn)視頻卡頓和馬賽克的情況,如果丟包嚴(yán)重將會對用戶體驗造成很大的影響。數(shù)據(jù)接收方針對下行丟包的情況,可以通過rtcp(rtpcontrolprotocol,rtp控制協(xié)議)的拓展協(xié)議tmmbr包來請求數(shù)據(jù)發(fā)送方降低視頻編碼碼率,以減少數(shù)據(jù)接收方下行的吞吐量,進而降低rtp的丟包率。當(dāng)數(shù)據(jù)發(fā)送方收到tmmbr包之后,會立刻反饋tmmbn包來響應(yīng)數(shù)據(jù)接收方。
s302、數(shù)據(jù)接收方估計下行接收碼率。
具體地,按照如下方式估計下行接收碼率:
數(shù)據(jù)接收方每接收到一個rtp包,都要統(tǒng)計報文的payload(有效載荷)長度,并計算上一個統(tǒng)計周期的平均碼率bprev,當(dāng)tcur≥tstart+tperiod時,更新bprev,其公式如下:
bprev=(stotal-sprev)×8/(tcur-tstart),tstart>0(1)
其中,stotal為當(dāng)前rtp包payload長度的累積值,sprev為上一個周期rtp包payload長度的累積值,tcur為當(dāng)前時間,tstart為當(dāng)前周期收到第一個包的時間,tperiod為時間周期。每個統(tǒng)計周期結(jié)束之后,tstart被清零,sprev則更新為stotal。
當(dāng)tcur∈[tstart,tstart+tperiod)時,這里對下行碼率的估計通過加權(quán)平均來進行平滑處理,公式如下:
best=(1-α)·bprev+α·bcur(2)
其中,best為碼率估計值,bprev為上一個統(tǒng)計周期的平均碼率,bcur為當(dāng)前的平均碼率,α為權(quán)重系數(shù),在此按照公式(3)對其進行量化處理:
s303、數(shù)據(jù)接收方計算rtp包的下行丟包率。
具體地,按照如下方式計算rtp包的下行丟包率:
rtcp包被周期性地發(fā)送。在每次發(fā)送rtcp包時,如果累計的應(yīng)接收的rtp數(shù)據(jù)包的個數(shù)(slast-sstart)大于等于閾值nthres,則根據(jù)公式(4)計算丟包率ploss:
ploss=(slast-sstart-nrecv)/(slast-sstart),slast-sstart≥nthres(4)
其中,slast為最近一個rtp包的序列號(sequencenumber),sstart為統(tǒng)計周期內(nèi)第一個rtp包的序列號,nrecv為統(tǒng)計周期內(nèi)實際收到的rtp包個數(shù)。
s304、數(shù)據(jù)接收方根據(jù)計算出的rtp包的下行丟包率計算請求對端發(fā)送的碼率btmmbr,并判斷是否滿足發(fā)送tmmbr包的條件,若滿足,則執(zhí)行步驟s305;若不滿足,則結(jié)束。
具體地,當(dāng)發(fā)送tmmbr的標(biāo)志位置1時,滿足發(fā)送tmmbr包的條件;當(dāng)發(fā)送tmmbr的標(biāo)志位置0時,不滿足發(fā)送tmmbr包的條件。
下述的狀態(tài)1、狀態(tài)2、狀態(tài)3均為計算請求對端發(fā)送的碼率btmmbr所采用的算法狀態(tài)。
如圖4所示,在狀態(tài)1中,若ploss<p1,p1為預(yù)設(shè)的第一丟包率閾值,說明此時沒有丟包或有少量丟包但不影響視頻通話質(zhì)量,那么算法狀態(tài)不做改變,并將發(fā)送tmmbr包的標(biāo)志位置0;
若ploss≥p1,則算法狀態(tài)遷移到狀態(tài)2,令n=0,初始化步進長度h0,并按照公式(5)和(6)計算請求對端發(fā)送的碼率btmmbr,
h0=β·best(5)
btmmbr=best-hn(6)
其中,β為比例系數(shù),0<β<1,將其置為0.1;并將發(fā)送tmmbr包的標(biāo)志位置1。
在狀態(tài)2中,令n=n+1,若ploss≥p2,p2為預(yù)設(shè)的第二丟包率閾值,根據(jù)公式(7)更新步進長度hn,
其中,λ為常數(shù),0<λ<1,可以取λ為0.5,p2為丟包率的收斂值,0<p2<p1,這里取p2為0.5%;若p2≤ploss<p1,則根據(jù)公式(6)計算btmmbr,并將發(fā)送tmmbr包的標(biāo)志位置1;如果此時hn<hmin,則算法狀態(tài)遷移到狀態(tài)1;
若0≤ploss<p2,則算法狀態(tài)遷移到狀態(tài)3,根據(jù)公式(8)計算btmmbr,
btmmbr=best+hn(8)
并將發(fā)送tmmbr包的標(biāo)志位置1;如果此時hn<hmin,則算法狀態(tài)遷移到狀態(tài)1。
在狀態(tài)3中,令n=n+1,若ploss≥p2,則算法狀態(tài)遷移到狀態(tài)2,根據(jù)公式(7)更新步長hn,然后通過公式(6)計算btmmbr,并將發(fā)送tmmbr的標(biāo)志位置1;如果此時hn<hmin,則算法狀態(tài)遷移到狀態(tài)1;
若0≤ploss<p2,則步長hn=hn-1,根據(jù)公式(8)計算btmmbr,并將發(fā)送tmmbr 包的標(biāo)志位置1,此時算法狀態(tài)不做遷移。
s305、數(shù)據(jù)接收方根據(jù)btmmbr設(shè)置tmmbr包中碼率參數(shù)的相關(guān)字段。
其中,若在步驟s301中數(shù)據(jù)接收方判斷為第一次發(fā)送tmmbr包或接收到對端的tmmbn包或同一個tmmbr包重傳的次數(shù)超過預(yù)定次數(shù),則根據(jù)步驟s304中計算出的btmmbr設(shè)置tmmbr包的相關(guān)字段;若在步驟s301中數(shù)據(jù)接收方判斷不是第一次發(fā)送tmmbr包且未接收到對端的tmmbn包且同一個tmmbr包重傳的次數(shù)未超過預(yù)定次數(shù),則根據(jù)上一次計算出的btmmbr設(shè)置tmmbr包的相關(guān)字段。
s306、數(shù)據(jù)接收方向數(shù)據(jù)發(fā)送方發(fā)送tmmbr包。
s307、數(shù)據(jù)發(fā)送方接收到數(shù)據(jù)接收方發(fā)送的tmmbr包之后,向數(shù)據(jù)接收方發(fā)送tmmbn包。
s308、數(shù)據(jù)發(fā)送方從tmmbr包的字段中解析出對端請求的碼率信息。
s309、數(shù)據(jù)發(fā)送方按照如下公式計算將要配置的編碼碼率bconfig:
其中,btmmbr為從tmmbr報文中解析出來的碼率,bmax和bmin分別為碼率配置區(qū)間的上限值和下限值。
s310、數(shù)據(jù)發(fā)送方的dsp編碼模塊根據(jù)bconfig完成編碼碼率的配置。
具體地,數(shù)據(jù)發(fā)送方的視頻質(zhì)量控制模塊控制dsp編碼模塊根據(jù)根據(jù)bconfig完成編碼碼率的配置。
至此,數(shù)據(jù)發(fā)送方和數(shù)據(jù)接收方之間完成基于volte的視頻通話碼率調(diào)整。
本發(fā)明實施例還提供一種基于volte的視頻通話碼率調(diào)整裝置,如圖5所示,所述裝置位于數(shù)據(jù)接收方,所述數(shù)據(jù)接收方用于發(fā)送tmmbr包,所述裝 置包括:
判斷單元11,用于判斷所述數(shù)據(jù)接收方是否為第一次發(fā)送tmmbr包或是否接收到數(shù)據(jù)發(fā)送方的tmmbn包或同一個tmmbr包重傳的次數(shù)是否超過預(yù)定次數(shù);
可選的,所述預(yù)定次數(shù)可以為2次。
估計單元12,用于當(dāng)所述判斷單元判斷為第一次發(fā)送tmmbr包或接收到所述數(shù)據(jù)發(fā)送方的tmmbn包或同一個tmmbr包重傳的次數(shù)超過預(yù)定次數(shù)時,估計下行接收碼率;
第一計算單元13,用于計算rtp包的下行丟包率;
第二計算單元14,用于根據(jù)所述第一計算單元13計算出的rtp包的下行丟包率和所述估計單元14估計出的下行接收碼率計算請求對端發(fā)送的碼率;
第一發(fā)送單元15,用于根據(jù)所述請求對端發(fā)送的碼率,向所述數(shù)據(jù)發(fā)送方發(fā)送tmmbr包。
本發(fā)明實施例提供的基于volte的視頻通話碼率調(diào)整裝置,當(dāng)為第一次發(fā)送tmmbr包或接收到數(shù)據(jù)發(fā)送方的tmmbn包或同一個tmmbr包重傳的次數(shù)超過預(yù)定次數(shù)時,估計下行接收碼率并計算rtp包的下行丟包率,根據(jù)計算出的rtp包的下行丟包率和估計出的下行接收碼率計算請求對端發(fā)送的碼率,根據(jù)所述請求對端發(fā)送的碼率,向數(shù)據(jù)發(fā)送方發(fā)送tmmbr包,以便數(shù)據(jù)發(fā)送方從所述tmmbr包中解析出對端請求的碼率信息,并計算將要配置的編碼碼率,根據(jù)所述將要配置的編碼碼率完成編碼碼率的配置。與現(xiàn)有技術(shù)相比,本發(fā)明能夠基于實際網(wǎng)絡(luò)帶寬進行碼率的動態(tài)調(diào)整,保證視頻通話質(zhì)量。
可選的,所述第一發(fā)送單元15,還用于在所述判斷單元判斷不是第一次發(fā)送tmmbr包且未接收到所述數(shù)據(jù)發(fā)送方的tmmbn包且同一個tmmbr包重 傳的次數(shù)未超過預(yù)定次數(shù)時,根據(jù)上一次計算出的請求對端發(fā)送的碼率向所述數(shù)據(jù)發(fā)送方發(fā)送tmmbr包。
可選的,所述估計單元12,用于按照如下方式估計下行接收碼率:
當(dāng)tcur≥tstart+tperiod時,按照公式(1)更新上一個統(tǒng)計周期的平均碼率bprev:
bprev=(stotal-sprev)×8/(tcur-tstart),tstart>0(1)
其中,stotal為當(dāng)前rtp包有效載荷長度的累積值,sprev為上一個周期rtp包有效載荷長度的累積值,tcur為當(dāng)前時間,tstart為當(dāng)前周期收到第一個包的時間,tperiod為時間周期,每個統(tǒng)計周期結(jié)束之后,tstart被清零,sprev則更新為stotal;
當(dāng)tcur∈[tstart,tstart+tperiod)時,按照公式(2)對下行碼率進行估計:
best=(1-α)·bprev+α·bcur(2)
其中,best為碼率估計值,bprev為上一個統(tǒng)計周期的平均碼率,bcur為當(dāng)前的平均碼率,α為權(quán)重系數(shù),其中,α按照公式(3)取值:
可選的,所述第一計算單元13,用于按照如下方式計算rtp包的下行丟包率:
若累計的應(yīng)接收的rtp數(shù)據(jù)包的個數(shù)(slast-sstart)大于等于閾值nthres,則根據(jù)公式(4)計算丟包率ploss:
ploss=(slast-sstart-nrecv)/(slast-sstart),slast-sstart≥nthres(4)
其中,slast為最近一個rtp包的序列號,sstart為統(tǒng)計周期內(nèi)第一個rtp包的序列號,nrecv為統(tǒng)計周期內(nèi)實際收到的rtp包個數(shù)。
可選的,所述第二計算單元14,用于按照如下方式計算請求對端發(fā)送的碼率:
若ploss≥p1,p1為預(yù)設(shè)的第一丟包率閾值,則令n=0,初始化步進長度h0,并按照公式(5)和(6)計算請求對端發(fā)送的碼率btmmbr,
h0=β·best(5)
btmmbr=best-hn(6)
其中,β為比例系數(shù),0<β<1;
令n=n+1,若ploss≥p2,p2為預(yù)設(shè)的第二丟包率閾值,根據(jù)公式(7)更新步進長度hn,
其中,λ為常數(shù),0<λ<1,p2為丟包率的收斂值,0<p2<p1;
若p2≤ploss<p1且不滿足hn<hmin,則根據(jù)公式(6)計算btmmbr;
若0≤ploss<p2且不滿足hn<hmin,則根據(jù)公式(8)計算btmmbr,
btmmbr=best+hn(8)。
本發(fā)明實施例還提供一種基于volte的視頻通話碼率調(diào)整裝置,如圖6所示,所述裝置位于數(shù)據(jù)發(fā)送方,所述數(shù)據(jù)發(fā)送方用于接收tmmbr包,所述裝置包括:
接收單元21,用于接收數(shù)據(jù)接收方在第一次發(fā)送tmmbr包或接收到所述數(shù)據(jù)發(fā)送方的tmmbn包或同一個tmmbr包重傳的次數(shù)超過預(yù)定次數(shù)時根據(jù)請求對端發(fā)送的碼率發(fā)送的tmmbr包,其中,所述請求對端發(fā)送的碼率為所述數(shù)據(jù)接收方根據(jù)計算出的rtp包的下行丟包率和估計出的下行接收碼率計算得到;
第二發(fā)送單元22,用于向所述數(shù)據(jù)接收方發(fā)送tmmbn包;
解析單元23,用于從所述tmmbr包中解析出對端請求的碼率信息;
第三計算單元24,用于根據(jù)所述對端請求的碼率信息計算將要配置的編碼碼率;
配置單元25,用于根據(jù)所述將要配置的編碼碼率完成編碼碼率的配置。
本發(fā)明實施例提供的基于volte的視頻通話碼率調(diào)整裝置,接收數(shù)據(jù)接收方在第一次發(fā)送tmmbr包或接收到所述數(shù)據(jù)發(fā)送方的tmmbn包或同一個tmmbr包重傳的次數(shù)超過預(yù)定次數(shù)時根據(jù)請求對端發(fā)送的碼率發(fā)送的tmmbr包,所述請求對端發(fā)送的碼率為所述數(shù)據(jù)接收方根據(jù)計算出的rtp包的下行丟包率和估計出的下行接收碼率計算得到,從所述tmmbr包中解析出對端請求的碼率信息,并計算將要配置的編碼碼率,根據(jù)所述將要配置的編碼碼率完成編碼碼率的配置。與現(xiàn)有技術(shù)相比,本發(fā)明能夠基于實際網(wǎng)絡(luò)帶寬進行碼率的動態(tài)調(diào)整,保證視頻通話質(zhì)量。
可選的,所述第三計算單元24,用于按照如下方式計算將要配置的編碼碼率:
按照公式(9)計算將要配置的編碼碼率bconfig:
其中,btmmbr為從tmmbr包解析出來的碼率,bmax和bmin分別為碼率配置區(qū)間的上限值和下限值。
本發(fā)明實施例還提供一種移動終端,包括上述位于數(shù)據(jù)接收方的基于volte的視頻通話碼率調(diào)整裝置。
本發(fā)明實施例還提供一種移動終端,包括上述位于數(shù)據(jù)發(fā)送方的基于volte的視頻通話碼率調(diào)整裝置。
在本發(fā)明實施例中,所述移動終端可以為支持volte的手機、pad等,但不僅限于此。
本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(read-onlymemory,rom)或隨機存儲記憶體(randomaccessmemory,ram)等。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)該以權(quán)利要求的保護范圍為準(zhǔn)。