本發(fā)明實施例涉及通信技術(shù),尤其涉及一種音視頻播放方法及設(shè)備。
背景技術(shù):
隨著第四代移動通信技術(shù)(the 4 Generation mobile communication technology,簡稱4G)的普及,視頻播放的應(yīng)用越來越廣泛,用戶在終端設(shè)備上安裝流媒體播放器后,就可以實現(xiàn)在線瀏覽視頻。
現(xiàn)有技術(shù)中的流媒體播放器在播放音視頻數(shù)據(jù)時,先對音視頻數(shù)據(jù)進(jìn)行緩沖處理,再進(jìn)行播放。一般情況下,音視頻數(shù)據(jù)的緩沖值為固定值,流媒體播放器只有緩沖固定播放長度的音視頻數(shù)據(jù)后,才進(jìn)行播放。
然而,若該音視頻數(shù)據(jù)的緩沖值過大,則使用戶看到第一幀的時間增加,若該音視頻數(shù)據(jù)的緩沖值過小,則解碼的速度大于緩沖的速度,造成視頻卡頓,最終影響用戶體驗。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供一種音視頻播放方法及設(shè)備,能夠自適應(yīng)的調(diào)整音視頻的緩沖值。
第一方面,本發(fā)明實施例提供一種音視頻播放方法,包括:
獲取音頻幀的抖動值和視頻幀的抖動值;
根據(jù)所述音頻幀的抖動值、所述視頻幀的抖動值、預(yù)設(shè)音視頻緩沖最大值以及預(yù)設(shè)音視頻緩沖最小值,確定音頻緩沖值和視頻緩沖值;
根據(jù)所述音頻緩沖值和所述視頻緩沖值,確定音視頻緩沖值。
第二方面,本發(fā)明實施例提供一種音視頻播放設(shè)備,包括:
獲取模塊,用于獲取音頻幀的抖動值和視頻幀的抖動值;
第一緩沖值確定模塊,用于根據(jù)所述音頻幀的抖動值、所述視頻幀的抖動值、預(yù)設(shè)音視頻緩沖最大值以及預(yù)設(shè)音視頻緩沖最小值,確定音頻緩沖值 和視頻緩沖值;
第二緩沖值確定模塊,用于根據(jù)所述音頻緩沖值和所述視頻緩沖值,確定音視頻緩沖值。
本發(fā)明實施例提供的音視頻播放方法,通過獲取音頻幀的抖動值和視頻幀的抖動值,根據(jù)音頻幀的抖動值、視頻幀的抖動值、預(yù)設(shè)音視頻緩沖最大值以及預(yù)設(shè)音視頻緩沖最小值,通過音頻幀的抖動值以及視頻幀的抖動值來評估當(dāng)前網(wǎng)絡(luò)狀況,得到與音頻抖動值對應(yīng)的音頻緩沖值,與視頻抖動值對應(yīng)的視頻緩沖值,再根據(jù)音頻緩沖值以及視頻緩沖值,得到音視頻緩沖值,在網(wǎng)絡(luò)狀況好的情況下,得到的音視頻緩沖值較小,可以使用戶快速的看到第一幀圖像,在網(wǎng)絡(luò)狀況差的情況下,得到的音視頻緩沖值較大,考慮了流暢性,對無線網(wǎng)絡(luò)傳輸抖動具有很好的自適應(yīng)性。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明音視頻播放方法實施例一的流程圖;
圖2為本發(fā)明音視頻播放方法實施例二的流程圖;
圖3為本發(fā)明音視頻播放設(shè)備實施例一的結(jié)構(gòu)圖;
圖4為本發(fā)明音視頻播放設(shè)備實施例二的結(jié)構(gòu)圖。
具體實施方式
為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。
圖1為本發(fā)明音視頻播放方法實施例一的流程圖,本實施例的執(zhí)行主體為可以使用流媒體播放器播放音視頻的終端設(shè)備。該終端設(shè)備可以通過軟件 和/或硬件實現(xiàn)。該終端設(shè)備在本實施例中所起的功能為接收功能,因此,在如下的實施例中,將該終端設(shè)備稱為接收端。如圖1所示,本實施例的方法可以包括:
步驟101、獲取音頻幀的抖動值和視頻幀的抖動值;
步驟102、根據(jù)所述音頻幀的抖動值、所述視頻幀的抖動值、預(yù)設(shè)音視頻緩沖最大值以及預(yù)設(shè)音視頻緩沖最小值,確定音頻緩沖值和視頻緩沖值;
步驟103、根據(jù)所述音頻緩沖值和所述視頻緩沖值,確定音視頻緩沖值。
在具體實現(xiàn)過程中,接收端接收發(fā)送端發(fā)送的音視頻數(shù)據(jù)之前,接收端獲取初始化識別幀,根據(jù)該初始化識別幀,獲取音視頻的分辨率,根據(jù)該音視頻的分辨率,對音視頻解碼器進(jìn)行初始化。
具體地,在發(fā)送端準(zhǔn)備發(fā)送音視頻數(shù)據(jù)時,在初始階段,發(fā)送端每隔預(yù)設(shè)時間發(fā)送初始化識別幀,接收端接收發(fā)送端發(fā)送的初始化識別幀,該初始化識別幀中攜帶音視頻的分辨率信息,接收端根據(jù)該初始化識別幀獲取視頻的分別率信息,然后根據(jù)該視頻的分辨率信息進(jìn)行初始化。
初始化識別幀可以為H.264序列參數(shù)集(Sequence Parameter Set,簡稱SPS)SPS,圖像參數(shù)集(Picture Parameter Sets,簡稱PPS)幀。由于PPS和SPS幀很小,均小于100個字節(jié),因此,連續(xù)多次發(fā)送不會對網(wǎng)絡(luò)造成帶寬的浪費。例如,接收端接收發(fā)送端發(fā)送的H264 SPS PPS數(shù)據(jù)為:64 00 1f ac 172a 01 40 16 e8 40 00 01 c2 00 00,接收端根據(jù)該H264 SPS PPS,計算出視頻的分辨率為W*H=1280*720。
通過接收發(fā)送端發(fā)送的初始化識別幀,獲取視頻分辨率,進(jìn)而進(jìn)行初始化,避免了現(xiàn)有技術(shù)中的接收端的解碼器在初始化時,解碼器設(shè)置的視頻分辨率為W*H,而發(fā)送端發(fā)送的音視頻數(shù)據(jù)中的圖像的分辨率是W1*H1,解碼器需要根據(jù)發(fā)送端的圖像的分辨率進(jìn)行重新初始化,增加了預(yù)覽第一幀圖像的時間的問題。
在解碼器初始化完成之后,在步驟101中,接收端接收發(fā)送端發(fā)送的音頻數(shù)據(jù)包和視頻數(shù)據(jù)包,將屬于同一音頻幀的多個音頻數(shù)據(jù)包組成音頻幀,并記錄各音頻數(shù)據(jù)包組成音頻幀的時間,即記錄每一個音頻數(shù)據(jù)包組成音頻幀的時間。將屬于同一視頻幀的多個視頻數(shù)據(jù)包組成視頻幀,并記錄各視頻數(shù)據(jù)包組成視頻幀的時間,即記錄每一個視頻數(shù)據(jù)包組成視頻幀的時間。
然后,根據(jù)音頻數(shù)據(jù)包中的時間戳和各音頻數(shù)據(jù)包組成音頻幀的時間獲取音頻幀的抖動值,根據(jù)視頻數(shù)據(jù)包中的時間戳和各視頻數(shù)據(jù)包組成視頻幀的時間獲取視頻幀的抖動值。
在步驟102中,接收端根據(jù)音頻幀的抖動值、視頻幀的抖動值、預(yù)設(shè)音視頻緩沖最大值以及預(yù)設(shè)音視頻緩沖最小值,確定音頻緩沖值和視頻緩沖值。其中,預(yù)設(shè)音視頻緩沖最大值以及預(yù)設(shè)音視頻緩沖最小值可以根據(jù)網(wǎng)絡(luò)狀況進(jìn)行取值。
具體地,對于音頻幀,可將音頻幀的抖動值與預(yù)設(shè)音視頻緩沖最大值以及預(yù)設(shè)音視頻緩沖最小值的進(jìn)行大小比較,根據(jù)比較結(jié)果,獲取音頻緩沖值;例如,音頻的抖動值大于預(yù)設(shè)音視頻緩沖最小值,小于預(yù)設(shè)音視頻緩沖最大值,則將音頻的抖動值乘以經(jīng)驗系數(shù),即可得到音頻緩沖值;在音頻幀的抖動值小于預(yù)設(shè)音視頻緩沖最小值時,則將該預(yù)設(shè)音視頻最小值作為音頻緩沖值;在音頻幀的抖動值大于預(yù)設(shè)音頻緩沖最大值時,則將該預(yù)設(shè)音頻最大值作為音頻緩沖值。
對于視頻幀,可將視頻的抖動值與預(yù)設(shè)音視頻緩沖最大值以及預(yù)設(shè)音視頻緩沖最小值的進(jìn)行大小比較,根據(jù)比較結(jié)果,獲取視頻緩沖值。獲取視頻緩沖值的方法與獲取音頻幀緩沖值的方法類似,視頻緩沖值的獲取方法具體可參見音頻幀緩沖值的獲取方法,本實施例此處不再贅述。
在步驟103中,接收端根據(jù)音頻緩沖值和視頻緩沖值,確定音視頻緩沖值。具體地,接收端可根據(jù)實際需要,確定音視頻的緩沖值。例如,在為了降低用戶面延時的情況下,可選擇音頻緩沖值和視頻緩沖值中比較小的作為音視頻緩沖值,在為了保證音頻和視頻更加同步的情況下,選擇音頻緩沖值和視頻緩沖值中較大的值作為音視頻緩沖值。
在確定音視頻緩沖值之后,接收端對音視頻開始緩沖,再緩沖完畢后,進(jìn)行解碼播放。本實施例通過音頻幀的抖動值以及視頻幀的抖動值來評估當(dāng)前網(wǎng)絡(luò)狀況,在網(wǎng)絡(luò)狀況好的情況下,得到的音視頻緩沖值會很小,音視頻將緩沖很小的數(shù)據(jù)進(jìn)行播放,用戶可以很快看到第一幀圖像,在網(wǎng)絡(luò)狀況不好的情況下,得到的音視頻緩沖值會相對比較大,此時,用戶不會很快看到第一幀圖像,但是播放不會卡。
本發(fā)明實施例提供的音視頻播放方法,通過獲取音頻幀的抖動值和視頻 幀的抖動值,根據(jù)音頻幀的抖動值、視頻幀的抖動值、預(yù)設(shè)音視頻緩沖最大值以及預(yù)設(shè)音視頻緩沖最小值,通過音頻幀的抖動值以及視頻幀的抖動值來評估當(dāng)前網(wǎng)絡(luò)狀況,得到與音頻抖動值對應(yīng)的音頻緩沖值,與視頻抖動值對應(yīng)的視頻緩沖值,再根據(jù)音頻緩沖值以及視頻緩沖值,得到音視頻緩沖值,在網(wǎng)絡(luò)狀況好的情況下,得到的音視頻緩沖值較小,可以使用戶快速的看到第一幀圖像,在網(wǎng)絡(luò)狀況差的情況下,得到的音視頻緩沖值較大,考慮了流暢性,對無線網(wǎng)絡(luò)傳輸抖動具有很好的自適應(yīng)性。
下面采用具體的實施例,說明獲取獲取音頻幀的抖動值和視頻幀的抖動值以及音視頻緩沖值的實現(xiàn)方式。
通過如下公式四獲取音頻幀的抖動值:
D(i-1,i)=(Ri-Ri-1)-(Si-Si-1)=(Ri-Si)-(Ri-1-Si-1)
J(i)=J(i-1)+(|D(i-1,i)|-J(i-1))/16
其中,Si代表第i個音頻數(shù)據(jù)包的時間戳,Si-1代表第i-1個音頻數(shù)據(jù)包的時間戳,Ri代表第i個音頻數(shù)據(jù)包組成音頻幀的時間,Ri-1代表第i-1個音頻數(shù)據(jù)包組成音頻幀的時間,J(i)代表音頻幀的抖動值,J(0)=0。
通過如下公式五獲取視頻幀的抖動值:
M(i-1,i)=(Qi-Qi-1)-(Ti-Ti-1)=(Qi-Ti)-(Qi-1-Ti-1)
N(i)=N(i-1)+(|M(i-1,i)|-N(i-1))/16
其中,Ti代表第i個音頻數(shù)據(jù)包的時間戳,Ti-1代表第i-1個音頻數(shù)據(jù)包的時間戳,Qi代表第i個音頻數(shù)據(jù)包組成音頻幀的時間,Qi-1代表第i-1個音頻數(shù)據(jù)包組成音頻幀的時間,N(i)代表音頻幀的抖動值,N(0)=0。
圖2為本發(fā)明音視頻播放方法實施例二的流程圖。本實施例在圖1實施例的基礎(chǔ)上實現(xiàn),如圖2所示,本發(fā)明實施例提供的音視頻播放方法包括:
步驟201、獲取音頻幀的抖動值;
步驟202、獲取視頻幀的抖動值;
步驟201與步驟202沒有嚴(yán)格的時序關(guān)系,具體的過程可參見上述實施例,本實施例此處不再贅述。
步驟203、設(shè)置與網(wǎng)絡(luò)狀況匹配的預(yù)設(shè)音視頻緩沖最大值以及預(yù)設(shè)音視頻緩沖最小值;
步驟203與步驟201與步驟202沒有嚴(yán)格的時序關(guān)系。
步驟204、根據(jù)音頻幀的抖動值、預(yù)設(shè)音視頻緩沖最大值以及預(yù)設(shè)音視頻緩沖最小值,確定音頻緩沖值;
步驟205、根據(jù)視頻幀的抖動值、預(yù)設(shè)音視頻緩沖最大值以及預(yù)設(shè)音視頻緩沖最小值,確定視頻緩沖值;
步驟204與步驟205沒有嚴(yán)格的時序關(guān)系。
步驟206、根據(jù)音頻緩沖值和視頻緩沖值,確定音視頻緩沖值。
在步驟204中,通過公式一確定音頻緩沖值:
ABuffMs=MAX(kMinMs,MIN(kMaxMs,C*JA)) 公式一
其中,ABuffMs代表音頻緩沖值,kMinMs代表預(yù)設(shè)音視頻緩沖最小值,kMaxMs代表預(yù)設(shè)音視頻緩沖最大值,JA代表音頻幀的抖動值,C代表與網(wǎng)絡(luò)條件成反比的參數(shù);
在步驟205中,通過公式二確定視頻緩沖值:
VBuffMs=MAX(kMinMs,MIN(kMaxMs,C*JV)) 公式二
其中,VBuffMs代表視頻緩沖值,kMinMs代表預(yù)設(shè)音視頻緩沖最小值,kMaxMs代表預(yù)設(shè)音視頻緩沖最大值,JV代表視頻幀的抖動值,C為代表與網(wǎng)絡(luò)條件成反比的參數(shù)。
在步驟206中,通過公式三確定音視頻緩沖值:
AVBuffMs=MIN(VBuffMs,ABuffMs) 公式三
其中,AVBuffMs代表音視頻緩沖值,VBuffMs代表視頻緩沖值,ABuffMs代表音頻緩沖值。
在步驟204與步驟205中,與網(wǎng)絡(luò)條件成反比的參數(shù)C可以進(jìn)行調(diào)整,如果網(wǎng)絡(luò)速度比較慢,與網(wǎng)絡(luò)條件成反比的參數(shù)C可以調(diào)的大一些,如果網(wǎng)絡(luò)速度比較快,與網(wǎng)絡(luò)條件成反比的參數(shù)C為2足夠,通過調(diào)整與網(wǎng)絡(luò)條件成反比的參數(shù)C,可以防止解碼的速度大于緩沖的速度,避免造成播放卡頓。
下面采用具體的實施例,對本發(fā)明實施例進(jìn)行詳細(xì)說明。
在網(wǎng)絡(luò)狀況好的情況下
JV=11ms,JA=15ms,C=5,kMinMs=50,kMaxMs=100
VBuffMs=MAX(kMinMs,MIN(kMaxMs,2*JV))=MAX(50,MIN(1000,2*11))=50ms
ABuffMs=MAX(kMinMs,MIN(kMaxMs,2*JA))=MAX(50,MIN(1000,2*15))=50ms
AVBuffMs=MIN(VBuffMs,ABuffMs)=MIN(50,50)=50ms
在上述網(wǎng)絡(luò)條件好的情況下,只需要緩沖50ms的音視頻數(shù)據(jù)就可以進(jìn)行解碼播放。
在網(wǎng)絡(luò)狀況差的情況下
JV=100ms,JA=120ms,C=5,kMinMs=50,kMaxMs=100
VBuffMs=MAX(kMinMs,MIN(kMaxMs,2*JV))=MAX(50,MIN(1000,2*100))=200ms
ABuffMs=MAX(kMinMs,MIN(kMaxMs,2*JA))=MAX(50,MIN(1000,2*120))=240ms
AVBuffMs=MIN(VBuffMs,ABuffMs)=MIN(200,240)=200ms
在上述網(wǎng)絡(luò)條件相對不好的情況下,只需要緩沖200ms音視頻的數(shù)據(jù)就可以進(jìn)行解碼播放。
根據(jù)在長期演進(jìn)技術(shù)(Long Term Evolution,簡稱LTE)網(wǎng)絡(luò)環(huán)境下的實驗數(shù)據(jù),采用本實施例的方法,在網(wǎng)絡(luò)狀況好的情況下播放1080P視頻數(shù)據(jù),用戶面時延在700ms-900ms之間,采用現(xiàn)有技術(shù),1080P用戶面時延在1500ms-2000ms之間,用戶面時延提升了一倍。
本實施例通過音頻幀的抖動值以及視頻幀的抖動值來評估當(dāng)前網(wǎng)絡(luò)狀況,在網(wǎng)絡(luò)狀況好的情況下,得到的音視頻緩沖值會很小,音視頻將緩沖很小的數(shù)據(jù)進(jìn)行播放,用戶可以很快看到第一幀圖像,在網(wǎng)絡(luò)狀況不好的情況下,得到的音視頻緩沖值會相對比較大,此時,用戶不會很快看到第一幀圖像,但是播放不會卡。
圖3為本發(fā)明音視頻播放設(shè)備實施例一的結(jié)構(gòu)圖。如圖3所示,本發(fā)明實施例提供的音視頻播放設(shè)備包括:
獲取模塊301,用于獲取音頻幀的抖動值和視頻幀的抖動值;
第一緩沖值確定模塊302,用于根據(jù)所述音頻幀的抖動值、所述視頻幀的抖動值、預(yù)設(shè)音視頻緩沖最大值以及預(yù)設(shè)音視頻緩沖最小值,確定音頻緩沖值和視頻緩沖值;
第二緩沖值確定模塊303,用于根據(jù)所述音頻緩沖值和所述視頻緩沖值,確定音視頻緩沖值。
本發(fā)明實施例提供的音視頻播放設(shè)備,可執(zhí)行上述方法實施例,其具體實現(xiàn)原理和技術(shù)效果,可參見上述方法實施例,本實施例此處不再贅述。
圖4為本發(fā)明音視頻播放設(shè)備實施例二的結(jié)構(gòu)圖。如圖4所示,本發(fā)明實施例提供的音視頻播放設(shè)備在圖3實施例的基礎(chǔ)上實現(xiàn),具體如下:
所述獲取模塊301具體用于:
將接收的音頻數(shù)據(jù)包和視頻數(shù)據(jù)包分別組成音頻幀和視頻幀,并記錄各所述音頻數(shù)據(jù)包組成所述音頻幀的時間以及各所述視頻數(shù)據(jù)包組成所述視頻幀的時間;
根據(jù)所述音頻數(shù)據(jù)包中的時間戳和各所述音頻數(shù)據(jù)包組成所述音頻幀的時間獲取所述音頻幀的抖動值,根據(jù)所述視頻數(shù)據(jù)包中的時間戳和各所述視頻數(shù)據(jù)包組成所述視頻幀的時間獲取所述視頻幀的抖動值。
所述第一緩沖值確定模塊302具體用于:
通過公式一確定音頻緩沖值:
ABuffMs=MAX(kMinMs,MIN(kMaxMs,C*JA)) 公式一
其中,ABuffMs代表音頻緩沖值,kMinMs代表預(yù)設(shè)音視頻緩沖最小值,kMaxMs代表預(yù)設(shè)音視頻緩沖最大值,JA代表音頻幀的抖動值,C為與網(wǎng)絡(luò)條件成反比的參數(shù);
通過公式二確定視頻緩沖值:
VBuffMs=MAX(kMinMs,MIN(kMaxMs,C*JV)) 公式二
其中,VBuffMs代表視頻緩沖值,kMinMs代表預(yù)設(shè)音視頻緩沖最小值,kMaxMs代表預(yù)設(shè)音視頻緩沖最大值,JV代表視頻幀的抖動值,C為與網(wǎng)絡(luò)條件成反比的參數(shù)。
所述第二緩沖值確定模塊303具體用于:
通過公式三確定音視頻緩沖值:
AVBuffMs=MIN(VBuffMs,ABuffMs) 公式三
其中,AVBuffMs代表音視頻緩沖值,VBuffMs代表視頻緩沖值,ABuffMs代表音頻緩沖值。
還包括:初始化模塊304,用于在所述獲取音頻幀的抖動值和視頻幀的抖動值之前,
獲取初始化識別幀,根據(jù)所述初始化識別幀,獲取視頻的分辨率;
根據(jù)所述視頻的分辨率,對音視頻解碼器進(jìn)行初始化。
本發(fā)明實施例提供的音視頻播放設(shè)備,可執(zhí)行上述方法實施例,其具體 實現(xiàn)原理和技術(shù)效果,可參見上述方法實施例,本實施例此處不再贅述。
本領(lǐng)域普通技術(shù)人員可以理解:實現(xiàn)上述各方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成。前述的程序可以存儲于一計算機(jī)可讀取存儲介質(zhì)中。該程序在執(zhí)行時,執(zhí)行包括上述各方法實施例的步驟;而前述的存儲介質(zhì)包括:ROM、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
最后應(yīng)說明的是:以上各實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的范圍。