本申請(qǐng)涉及音視頻處理技術(shù)領(lǐng)域,特別涉及一種網(wǎng)絡(luò)推流質(zhì)量的優(yōu)化方法及優(yōu)化系統(tǒng)。
背景技術(shù):
近年來,移動(dòng)視頻直播越來越火爆,在娛樂、教育、游戲電競、體育等領(lǐng)域都得到廣泛應(yīng)用,各種直播產(chǎn)品競爭激烈,而能夠提供優(yōu)秀用戶體驗(yàn)的直播產(chǎn)品和服務(wù)終將在這場競爭中脫穎而出。
影響直播觀看體驗(yàn)的因素總體而言分為兩個(gè)維度,一是畫面清晰度(即畫質(zhì)),二是流暢度。畫質(zhì)與碼率和分辨率正相關(guān),流暢度與幀率和數(shù)據(jù)帶寬正相關(guān)。當(dāng)網(wǎng)絡(luò)的帶寬一定的情況下,流暢度與碼率呈一種負(fù)相關(guān)的關(guān)系,即當(dāng)碼率超出實(shí)際網(wǎng)絡(luò)數(shù)據(jù)吞吐率時(shí),流暢度就會(huì)降低。理想情況下,當(dāng)主播端與觀眾端都有無限帶寬時(shí),只需要選擇一個(gè)直播設(shè)備所能承受的最佳畫質(zhì)進(jìn)行推流,便能獲得高清流暢的優(yōu)質(zhì)觀看體驗(yàn)。然而考慮到直播者(即主播)所處的網(wǎng)絡(luò)環(huán)境千差萬別,從直播端到推流服務(wù)器的鏈路上經(jīng)常發(fā)生丟包、抖動(dòng)和延遲等情況,導(dǎo)致直播推流不暢,造成觀看的體驗(yàn)下降。在這種情況下,必定要權(quán)衡畫質(zhì)與流暢度這兩個(gè)維度來維持較好的觀看體驗(yàn),大量用戶反饋表明,使用較低畫質(zhì)和高流暢度,與高畫質(zhì)和頻繁卡頓的直播相比,前者能帶來更好的用戶觀看體驗(yàn)。此時(shí),一種能夠根據(jù)直播端的網(wǎng)絡(luò)質(zhì)量來動(dòng)態(tài)調(diào)節(jié)推流質(zhì)量的技術(shù)方案顯得尤為必要。
目前直播推流的通用協(xié)議標(biāo)準(zhǔn)為rtmp(realtimemessagingprotocol,實(shí)時(shí)消息傳輸協(xié)議)協(xié)議,是基于tcp進(jìn)行傳輸,其本身是面向連接、可靠的傳輸層協(xié)議,內(nèi)部實(shí)現(xiàn)了擁塞控制策略。在高丟包率的網(wǎng)絡(luò)環(huán)境中,tcp的自動(dòng)重傳策略會(huì)占用很大一部分帶寬,從而導(dǎo)致單位時(shí)間內(nèi)網(wǎng)絡(luò)數(shù)據(jù)吞吐量減少,造成播放端的卡頓。當(dāng)前市面上應(yīng)對(duì)弱網(wǎng)推流的方案主要有以下三種:
由主播根據(jù)觀眾反饋?zhàn)孕羞x擇推流的清晰度,即推流端不做自動(dòng)判斷網(wǎng)絡(luò)處理;
在直播開始時(shí)判斷網(wǎng)絡(luò)質(zhì)量,若檢測到較差的網(wǎng)絡(luò)條件,則直接采用一個(gè)較低的推流配置開始直播,并在整個(gè)直播過程中始終采用該配置;
將推流質(zhì)量配置預(yù)設(shè)高低兩個(gè)檔次,在直播過程中根據(jù)網(wǎng)絡(luò)狀況在這兩個(gè)檔次間來回切換。
以上方案能在一定程度上緩解由網(wǎng)絡(luò)波動(dòng)或弱網(wǎng)所引發(fā)的直播端推流不流暢問題,但也都分別存在一系列的缺陷,具體分析如下:
依靠主播根據(jù)觀眾反饋來選擇推流清晰度,本身太過于依賴主播的經(jīng)驗(yàn),并且觀眾的反饋信息無法準(zhǔn)確判斷直播卡頓的根源,主播端的網(wǎng)絡(luò)不佳或者觀眾自身的網(wǎng)絡(luò)存在問題均可能造成直播體驗(yàn)的負(fù)面反饋;
未考慮到網(wǎng)絡(luò)波動(dòng)的因素,可能直播開始時(shí)網(wǎng)絡(luò)處于波動(dòng)狀態(tài),導(dǎo)致采用低畫質(zhì)進(jìn)行推流,而后直播過程中網(wǎng)絡(luò)恢復(fù)穩(wěn)定,直播卻只能始終采用低畫質(zhì),無法達(dá)到觀看體驗(yàn)的最優(yōu)化。另外,可能一開始采用高畫質(zhì)推流,直播過程中網(wǎng)絡(luò)波動(dòng),也將造成頻繁卡頓;
采用高低兩檔畫質(zhì)配置根據(jù)網(wǎng)絡(luò)情況來回切換,會(huì)帶來的兩個(gè)問題。問題一是播放端能夠明顯感知畫質(zhì)的抖動(dòng),二是頻繁從低畫質(zhì)切換到高畫質(zhì)時(shí),可能瞬時(shí)增大網(wǎng)絡(luò)負(fù)擔(dān),使發(fā)送的碼率超過實(shí)際帶寬,造成卡頓,總而言之無法做到平滑切換。
應(yīng)該注意,上面對(duì)技術(shù)背景的介紹只是為了方便對(duì)本申請(qǐng)的技術(shù)方案進(jìn)行清楚、完整的說明,并方便本領(lǐng)域技術(shù)人員的理解而闡述的。不能僅僅因?yàn)檫@些方案在本申請(qǐng)的背景技術(shù)部分進(jìn)行了闡述而認(rèn)為上述技術(shù)方案為本領(lǐng)域技術(shù)人員所公知。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)實(shí)施方式的目的在于提供一種網(wǎng)絡(luò)推流質(zhì)量的優(yōu)化方法及優(yōu)化系統(tǒng),能夠平滑地調(diào)整推流的碼率和幀率。
為實(shí)現(xiàn)上述目的,本申請(qǐng)一方面提供一種網(wǎng)絡(luò)推流質(zhì)量的優(yōu)化方法,所述方法包括:按照預(yù)設(shè)周期采集推流的特征信息,所述特征信息包括平均碼率、平均幀率、緩沖區(qū)數(shù)據(jù)吞吐量、每幀tcp平均發(fā)送時(shí)長;根據(jù)當(dāng)前每幀tcp平均發(fā)送時(shí)長以及當(dāng)前緩沖區(qū)數(shù)據(jù)吞吐量,對(duì)下一周期的碼率進(jìn)行調(diào)整,并將調(diào)整后的碼率作為目標(biāo)碼率反饋至編碼器;根據(jù)當(dāng)前緩沖區(qū)數(shù)據(jù)吞吐量,對(duì)下一周期的幀率進(jìn)行調(diào)整,并根據(jù)調(diào)整后的幀率確定兩幀之間的時(shí)間間隔;基于確定的所述時(shí)間間隔對(duì)進(jìn)入編碼器的音視頻數(shù)據(jù)進(jìn)行過濾,以生成符合調(diào)整后的幀率的音視頻數(shù)據(jù);按照調(diào)整后的碼率和調(diào)整后的幀率進(jìn)行音視頻數(shù)據(jù)的編碼及傳輸。
進(jìn)一步地,根據(jù)當(dāng)前每幀tcp平均發(fā)送時(shí)長以及當(dāng)前緩沖區(qū)數(shù)據(jù)吞吐量,對(duì)下一周期的碼率進(jìn)行調(diào)整具體包括:當(dāng)所述當(dāng)前每幀tcp平均發(fā)送時(shí)長大于第一預(yù)設(shè)風(fēng)險(xiǎn)值時(shí),按照預(yù)設(shè)碼率步長下降當(dāng)前碼率,并將下降后的碼率作為下一周期的碼率;當(dāng)所述當(dāng)前每幀tcp平均發(fā)送時(shí)長小于或者等于所述第一預(yù)設(shè)風(fēng)險(xiǎn)值時(shí),判斷所述當(dāng)前每幀tcp平均發(fā)送時(shí)長是否大于第二預(yù)設(shè)風(fēng)險(xiǎn)值;若所述當(dāng)前每幀tcp平均發(fā)送時(shí)長大于第二預(yù)設(shè)風(fēng)險(xiǎn)值并且當(dāng)前緩沖區(qū)的數(shù)據(jù)占有率大于預(yù)設(shè)閾值時(shí),按照預(yù)設(shè)碼率步長下降當(dāng)前碼率,并將下降后的碼率作為下一周期的碼率。
進(jìn)一步地,所述方法還包括:判斷上一次進(jìn)行的碼率調(diào)整是否為下降碼率,若是,將所述預(yù)設(shè)碼率步長增加至預(yù)設(shè)值,并按照增加后的預(yù)設(shè)值下降當(dāng)前碼率。
進(jìn)一步地,根據(jù)當(dāng)前每幀tcp平均發(fā)送時(shí)長以及當(dāng)前緩沖區(qū)數(shù)據(jù)吞吐量,對(duì)下一周期的碼率進(jìn)行調(diào)整具體包括:判斷當(dāng)前緩沖區(qū)的吐出數(shù)據(jù)量與吞入數(shù)據(jù)量之間的關(guān)系,當(dāng)吐出數(shù)據(jù)量大于或者等于吞入數(shù)據(jù)量時(shí),將計(jì)數(shù)器的計(jì)數(shù)值加一;當(dāng)吐出數(shù)據(jù)量小于吞入數(shù)據(jù)量時(shí),將計(jì)數(shù)器的計(jì)數(shù)值減一;根據(jù)當(dāng)前計(jì)數(shù)器中計(jì)數(shù)值的大小,調(diào)整下一周期的碼率。
進(jìn)一步地,根據(jù)當(dāng)前計(jì)數(shù)器中計(jì)數(shù)值的大小,調(diào)整下一周期的碼率具體包括:當(dāng)所述計(jì)數(shù)器中的計(jì)數(shù)值小于第一判定閾值時(shí),按照預(yù)設(shè)碼率步長下降當(dāng)前碼率,并將下降后的碼率作為下一周期的碼率,同時(shí)將所述計(jì)數(shù)器的計(jì)數(shù)值歸零;當(dāng)所述計(jì)數(shù)器中的計(jì)數(shù)值大于第二判定閾值時(shí),按照預(yù)設(shè)碼率步長提高當(dāng)前碼率,并將提高后的碼率作為下一周期的碼率,同時(shí)將所述計(jì)數(shù)器的計(jì)數(shù)值歸零。
進(jìn)一步地,所述方法還包括:判斷上一次進(jìn)行的碼率調(diào)整是否為下降碼率,若是,將所述預(yù)設(shè)碼率步長增加至預(yù)設(shè)值,并按照增加后的預(yù)設(shè)值下降當(dāng)前碼率;判斷上一次進(jìn)行的碼率調(diào)整是否為提高碼率,若是,將所述預(yù)設(shè)碼率步長增加至預(yù)設(shè)值,并按照增加后的預(yù)設(shè)值提高當(dāng)前碼率。
進(jìn)一步地,所述推流按照下述方式生成:將預(yù)先采集的音視頻數(shù)據(jù)經(jīng)過編碼器進(jìn)行編碼,并將編碼后的音視頻數(shù)據(jù)經(jīng)過封包后通過實(shí)時(shí)消息傳輸協(xié)議rtmp進(jìn)行傳輸,以生成所述推流。
為實(shí)現(xiàn)上述目的,本申請(qǐng)實(shí)施方式另一方面還提供一種網(wǎng)絡(luò)推流質(zhì)量的優(yōu)化系統(tǒng),所述系統(tǒng)包括:流數(shù)據(jù)收集控制模塊,用于按照預(yù)設(shè)周期采集推流的特征信息,所述特征信息包括平均碼率、平均幀率、緩沖區(qū)數(shù)據(jù)吞吐量、每幀tcp平均發(fā)送時(shí)長;自適應(yīng)碼率控制模塊,用于根據(jù)當(dāng)前每幀tcp平均發(fā)送時(shí)長以及當(dāng)前緩沖區(qū)數(shù)據(jù)吞吐量,對(duì)下一周期的碼率進(jìn)行調(diào)整,并將調(diào)整后的碼率作為目標(biāo)碼率反饋至編碼器;動(dòng)態(tài)幀率控制模塊,用于根據(jù)當(dāng)前緩沖區(qū)數(shù)據(jù)吞吐量,對(duì)下一周期的幀率進(jìn)行調(diào)整,并根據(jù)調(diào)整后的幀率確定兩幀之間的時(shí)間間隔;基于確定的所述時(shí)間間隔對(duì)進(jìn)入編碼器的音視頻數(shù)據(jù)進(jìn)行過濾,以生成符合調(diào)整后的幀率的音視頻數(shù)據(jù);傳輸控制模塊,用于按照調(diào)整后的碼率和調(diào)整后的幀率進(jìn)行音視頻數(shù)據(jù)的編碼及傳輸。
進(jìn)一步地,所述自適應(yīng)碼率控制模塊具體包括:第一判斷單元,用于當(dāng)所述當(dāng)前每幀tcp平均發(fā)送時(shí)長大于第一預(yù)設(shè)風(fēng)險(xiǎn)值時(shí),按照預(yù)設(shè)碼率步長下降當(dāng)前碼率,并將下降后的碼率作為下一周期的碼率;第二判斷單元,用于當(dāng)所述當(dāng)前每幀tcp平均發(fā)送時(shí)長小于或者等于所述第一預(yù)設(shè)風(fēng)險(xiǎn)值時(shí),判斷所述當(dāng)前每幀tcp平均發(fā)送時(shí)長是否大于第二預(yù)設(shè)風(fēng)險(xiǎn)值;第三判斷單元,用于若所述當(dāng)前每幀tcp平均發(fā)送時(shí)長大于第二預(yù)設(shè)風(fēng)險(xiǎn)值并且當(dāng)前緩沖區(qū)的數(shù)據(jù)占有率大于預(yù)設(shè)閾值時(shí),按照預(yù)設(shè)碼率步長下降當(dāng)前碼率,并將下降后的碼率作為下一周期的碼率。
進(jìn)一步地,所述自適應(yīng)碼率控制模塊具體包括:吞吐量判斷單元,用于判斷當(dāng)前緩沖區(qū)的吐出數(shù)據(jù)量與吞入數(shù)據(jù)量之間的關(guān)系,當(dāng)吐出數(shù)據(jù)量大于或者等于吞入數(shù)據(jù)量時(shí),將計(jì)數(shù)器的計(jì)數(shù)值加一;當(dāng)吐出數(shù)據(jù)量小于吞入數(shù)據(jù)量時(shí),將計(jì)數(shù)器的計(jì)數(shù)值減一;碼率調(diào)整單元,用于根據(jù)當(dāng)前計(jì)數(shù)器中計(jì)數(shù)值的大小,調(diào)整下一周期的碼率。
本發(fā)明實(shí)施方式利用碼率與幀率調(diào)整相互配合作用,一方面有效控制網(wǎng)絡(luò)波動(dòng)情況下的音視頻數(shù)據(jù)發(fā)送量,緩解網(wǎng)絡(luò)擁塞,同時(shí)又能給播放端帶來流暢的觀看體驗(yàn);另一方面在網(wǎng)絡(luò)質(zhì)量恢復(fù)時(shí)能夠確保音視頻的碼率幀率是以設(shè)定的最優(yōu)質(zhì)量配置進(jìn)行推流,并且能使不同碼率幀率配置切換時(shí)以一種更為平滑的方式進(jìn)行,不會(huì)給觀看端帶來畫質(zhì)波動(dòng)的突兀感。
參照后文的說明和附圖,詳細(xì)公開了本申請(qǐng)的特定實(shí)施方式,指明了本申請(qǐng)的原理可以被采用的方式。應(yīng)該理解,本申請(qǐng)的實(shí)施方式在范圍上并不因而受到限制。在所附權(quán)利要求的精神和條款的范圍內(nèi),本申請(qǐng)的實(shí)施方式包括許多改變、修改和等同。
針對(duì)一種實(shí)施方式描述和/或示出的特征可以以相同或類似的方式在一個(gè)或更多個(gè)其它實(shí)施方式中使用,與其它實(shí)施方式中的特征相組合,或替代其它實(shí)施方式中的特征。
應(yīng)該強(qiáng)調(diào),術(shù)語“包括/包含”在本文使用時(shí)指特征、整件、步驟或組件的存在,但并不排除一個(gè)或更多個(gè)其它特征、整件、步驟或組件的存在或附加。
附圖說明
所包括的附圖用來提供對(duì)本申請(qǐng)實(shí)施方式的進(jìn)一步的理解,其構(gòu)成了說明書的一部分,用于例示本申請(qǐng)的實(shí)施方式,并與文字描述一起來闡釋本申請(qǐng)的原理。顯而易見地,下面描述中的附圖僅僅是本申請(qǐng)的一些實(shí)施方式,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。在附圖中:
圖1為本申請(qǐng)實(shí)施方式提供的一種網(wǎng)絡(luò)推流質(zhì)量的優(yōu)化方法的流程圖;
圖2為本申請(qǐng)實(shí)施方式中網(wǎng)絡(luò)推流質(zhì)量優(yōu)化的原理圖;
圖3為本申請(qǐng)實(shí)施方式中碼率調(diào)整的流程圖;
圖4為本申請(qǐng)實(shí)施方式提供的一種網(wǎng)絡(luò)推流質(zhì)量的優(yōu)化系統(tǒng)的功能模塊圖。
具體實(shí)施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本申請(qǐng)中的技術(shù)方案,下面將結(jié)合本申請(qǐng)實(shí)施方式中的附圖,對(duì)本申請(qǐng)實(shí)施方式中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施方式僅僅是本申請(qǐng)一部分實(shí)施方式,而不是全部的實(shí)施方式?;诒旧暾?qǐng)中的實(shí)施方式,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施方式,都應(yīng)當(dāng)屬于本申請(qǐng)保護(hù)的范圍。
圖1為本申請(qǐng)實(shí)施方式提供的一種網(wǎng)絡(luò)推流質(zhì)量的優(yōu)化方法的流程圖。雖然下文描述流程包括以特定順序出現(xiàn)的多個(gè)操作,但是應(yīng)該清楚了解,這些過程可以包括更多或更少的操作,這些操作可以順序執(zhí)行或并行執(zhí)行(例如使用并行處理器或多線程環(huán)境)。如圖1所示,所述方法可以包括:
步驟s1:按照預(yù)設(shè)周期采集推流的特征信息,所述特征信息包括平均碼率、平均幀率、緩沖區(qū)數(shù)據(jù)吞吐量、每幀tcp平均發(fā)送時(shí)長。
在本實(shí)施方式種,可以對(duì)當(dāng)前系統(tǒng)的推流進(jìn)行一段時(shí)間的數(shù)據(jù)采集,以獲取推流的歷史數(shù)據(jù)。具體地,請(qǐng)參閱圖2,源音視頻文件通過音視頻采集模塊可以進(jìn)行采樣操作,從而能夠從源音視頻文件中采集音視頻數(shù)據(jù)。在實(shí)際應(yīng)用過程中,音視頻采集模塊可以按照預(yù)設(shè)采樣周期進(jìn)行音視頻數(shù)據(jù)采集。
在本實(shí)施方式種,采集的音視頻數(shù)據(jù)可以進(jìn)入編碼器,以編碼器中設(shè)置的編碼格式和碼率進(jìn)行編碼。編碼后的音視頻幀在經(jīng)過封包后,便可以通過傳輸控制模塊中的實(shí)時(shí)消息傳輸協(xié)議(realtimemessagingprotocol,rtmp)進(jìn)行傳輸,以生成所述推流。即將傳輸?shù)囊粢曨l數(shù)據(jù)可以暫存于所述傳輸控制模塊中的發(fā)送緩沖區(qū)內(nèi),這樣,可以保證音視頻數(shù)據(jù)能夠?qū)崟r(shí)傳輸。
在本實(shí)施方式中,可以通過流數(shù)據(jù)收集控制模塊按照預(yù)設(shè)周期采集推流的特征信息,所述特征信息可以包括平均碼率、平均幀率、緩沖區(qū)數(shù)據(jù)吞吐量、每幀tcp平均發(fā)送時(shí)長。
步驟s2:根據(jù)當(dāng)前每幀tcp平均發(fā)送時(shí)長以及當(dāng)前緩沖區(qū)數(shù)據(jù)吞吐量,對(duì)下一周期的碼率進(jìn)行調(diào)整,并將調(diào)整后的碼率作為目標(biāo)碼率反饋至編碼器。
在本實(shí)施方式中,為了對(duì)推流質(zhì)量進(jìn)行優(yōu)化,可以對(duì)采集的當(dāng)前特征信息進(jìn)行分析,從而能夠預(yù)測下一個(gè)周期是否需要調(diào)整推流的碼率和幀率。具體地,可以根據(jù)當(dāng)前每幀tcp平均發(fā)送時(shí)長以及當(dāng)前緩沖區(qū)數(shù)據(jù)吞吐量,對(duì)下一周期的碼率進(jìn)行調(diào)整。請(qǐng)參閱圖3,當(dāng)所述當(dāng)前每幀tcp平均發(fā)送時(shí)長大于第一預(yù)設(shè)風(fēng)險(xiǎn)值時(shí),則表明可能即將發(fā)生緩沖區(qū)內(nèi)丟幀的情況,此時(shí)可以按照預(yù)設(shè)碼率步長下降當(dāng)前碼率,并將下降后的碼率作為下一周期的碼率。
當(dāng)所述當(dāng)前每幀tcp平均發(fā)送時(shí)長小于或者等于所述第一預(yù)設(shè)風(fēng)險(xiǎn)值時(shí),可以繼續(xù)判斷所述當(dāng)前每幀tcp平均發(fā)送時(shí)長是否大于第二預(yù)設(shè)風(fēng)險(xiǎn)值。其中,所述第二預(yù)設(shè)風(fēng)險(xiǎn)值可以小于所述第一預(yù)設(shè)風(fēng)險(xiǎn)值。
若所述當(dāng)前每幀tcp平均發(fā)送時(shí)長大于第二預(yù)設(shè)風(fēng)險(xiǎn)值并且當(dāng)前緩沖區(qū)的數(shù)據(jù)占有率大于預(yù)設(shè)閾值時(shí),同樣可能發(fā)生緩沖區(qū)內(nèi)丟幀的情況,此時(shí)可以按照預(yù)設(shè)碼率步長下降當(dāng)前碼率,并將下降后的碼率作為下一周期的碼率。
在本實(shí)施方式中,對(duì)于每個(gè)周期內(nèi)的碼率均可以進(jìn)行分析,并實(shí)時(shí)預(yù)測下一個(gè)周期的碼率。在實(shí)際應(yīng)用過程中,當(dāng)網(wǎng)絡(luò)發(fā)生波動(dòng)時(shí),可能會(huì)導(dǎo)致連續(xù)幾個(gè)周期的碼率均需要下降。在這種情況下,為了能夠減少碼率下降的次數(shù),可以相應(yīng)地增加碼率下降的速率。具體地,可以判斷上一次進(jìn)行的碼率調(diào)整是否為下降碼率,若是,表明當(dāng)前的網(wǎng)絡(luò)條件處于碼率連續(xù)下降的情況,這樣便可以將所述預(yù)設(shè)碼率步長增加至預(yù)設(shè)值,從而提高碼率下降的速度,并按照增加后的預(yù)設(shè)值下降當(dāng)前碼率。
在本實(shí)施方式中,可以對(duì)緩沖區(qū)數(shù)據(jù)吞吐量進(jìn)行分析,以確定是否需要調(diào)整下一個(gè)周期的碼率。具體地,可以判斷當(dāng)前緩沖區(qū)的吐出數(shù)據(jù)量與吞入數(shù)據(jù)量之間的關(guān)系,當(dāng)吐出數(shù)據(jù)量大于或者等于吞入數(shù)據(jù)量時(shí),可以將計(jì)數(shù)器的計(jì)數(shù)值加一;當(dāng)吐出數(shù)據(jù)量小于吞入數(shù)據(jù)量時(shí),可以將計(jì)數(shù)器的計(jì)數(shù)值減一。這樣,根據(jù)計(jì)數(shù)器中計(jì)數(shù)值的大小,便可以獲知之前幾個(gè)周期內(nèi)吐出數(shù)據(jù)量與吞入數(shù)據(jù)量的大小關(guān)系,從而可以根據(jù)當(dāng)前計(jì)數(shù)器中計(jì)數(shù)值的大小,調(diào)整下一周期的碼率。
具體地,當(dāng)所述計(jì)數(shù)器中的計(jì)數(shù)值小于第一判定閾值時(shí),則說明緩沖區(qū)連續(xù)幾次都是數(shù)據(jù)吞入量大于數(shù)據(jù)吐出量。例如,所述第一判定閾值可以是-3,這樣,可以表明緩沖區(qū)連續(xù)3次以上都是數(shù)據(jù)吞入量大于數(shù)據(jù)吐出量。這種情況下會(huì)產(chǎn)生丟幀的風(fēng)險(xiǎn),因此可以按照預(yù)設(shè)碼率步長下降當(dāng)前碼率,并將下降后的碼率作為下一周期的碼率,同時(shí)將所述計(jì)數(shù)器的計(jì)數(shù)值歸零。
當(dāng)所述計(jì)數(shù)器中的計(jì)數(shù)值大于第二判定閾值時(shí),則說明緩沖區(qū)連續(xù)幾次都是數(shù)據(jù)吐出量大于數(shù)據(jù)吞入量。例如,所述第二判定閾值可以是3,這樣,可以表明緩沖區(qū)連續(xù)3次以上都是數(shù)據(jù)吐出量大于數(shù)據(jù)吞入量。這種情況下表明網(wǎng)絡(luò)狀態(tài)良好,帶寬足夠,因此可以按照預(yù)設(shè)碼率步長提高當(dāng)前碼率,并將提高后的碼率作為下一周期的碼率,同時(shí)將所述計(jì)數(shù)器的計(jì)數(shù)值歸零。
在本實(shí)施方式中,在對(duì)緩沖區(qū)數(shù)據(jù)吞吐量進(jìn)行判斷時(shí),可以判斷上一次進(jìn)行的碼率調(diào)整是否為下降碼率,若是,則表明當(dāng)前的網(wǎng)絡(luò)條件處于碼率連續(xù)下降的情況,于是可以將所述預(yù)設(shè)碼率步長增加至預(yù)設(shè)值,以提高碼率下降的速率,并按照增加后的預(yù)設(shè)值下降當(dāng)前碼率;
此外,還可以判斷上一次進(jìn)行的碼率調(diào)整是否為提高碼率,若是,則表明當(dāng)前的網(wǎng)絡(luò)條件處于碼率連續(xù)上升的情況,于是可以將所述預(yù)設(shè)碼率步長增加至預(yù)設(shè)值,以提高碼率上升的速率,并按照增加后的預(yù)設(shè)值提高當(dāng)前碼率。
這樣,通過對(duì)當(dāng)前每幀tcp平均發(fā)送時(shí)長以及當(dāng)前緩沖區(qū)數(shù)據(jù)吞吐量進(jìn)行分析,從而可以實(shí)時(shí)預(yù)測下一個(gè)周期的傳輸碼率,能夠?qū)崿F(xiàn)碼率的靈活切換。由于是每個(gè)周期進(jìn)行分析,也避免了碼率切換過于跳躍,保證用戶的流暢觀看體驗(yàn)。
步驟s3:根據(jù)當(dāng)前緩沖區(qū)數(shù)據(jù)吞吐量,對(duì)下一周期的幀率進(jìn)行調(diào)整,并根據(jù)調(diào)整后的幀率確定兩幀之間的時(shí)間間隔;基于確定的所述時(shí)間間隔對(duì)進(jìn)入編碼器的音視頻數(shù)據(jù)進(jìn)行過濾,以生成符合調(diào)整后的幀率的音視頻數(shù)據(jù)。
在本實(shí)施方式中,可以采用與步驟s2中類似的方式,對(duì)當(dāng)前緩沖區(qū)數(shù)據(jù)吞吐量進(jìn)行分析,從而可以對(duì)下一周期的幀率進(jìn)行調(diào)整。調(diào)整后的幀率可以表明兩幀之間的時(shí)間間隔,通過該時(shí)間間隔,從而可以對(duì)進(jìn)入編碼器的音視頻數(shù)據(jù)進(jìn)行過濾,以生成符合調(diào)整后的幀率的音視頻數(shù)據(jù)。
需要說明的是,在本實(shí)施方式中,碼率調(diào)整的過程可以在自適應(yīng)碼率控制模塊中進(jìn)行,幀率調(diào)整的過程可以在動(dòng)態(tài)幀率控制模塊中進(jìn)行。在各種對(duì)比過程中,各個(gè)比較的閾值可以根據(jù)tcp發(fā)送時(shí)長預(yù)測算子或者緩沖區(qū)大小預(yù)測算子進(jìn)行確定。所述自適應(yīng)碼率控制模塊和所述動(dòng)態(tài)幀率控制模塊可以由自適應(yīng)流質(zhì)量控制模塊同一管理。以上所述的自適應(yīng)碼率模塊和動(dòng)態(tài)幀率控制模塊可單獨(dú)開啟或關(guān)閉,使用者可根據(jù)自身的需求來決定該技術(shù)方案的應(yīng)用形態(tài)。如果使用場景要求盡量保持較高畫質(zhì)推流,則可使用動(dòng)態(tài)幀率控制模塊,優(yōu)先調(diào)節(jié)幀率來控制單位時(shí)間內(nèi)進(jìn)入編碼器的數(shù)據(jù)量,從而控制傳輸數(shù)據(jù)量;反之對(duì)幀率要求較高的場景則可優(yōu)先使用自適應(yīng)碼率控制模塊。
步驟s4:按照調(diào)整后的碼率和調(diào)整后的幀率進(jìn)行音視頻數(shù)據(jù)的編碼及傳輸。
在本實(shí)施方式種,調(diào)整后的幀率可以對(duì)音視頻采集模塊采集的音視頻數(shù)據(jù)進(jìn)行調(diào)節(jié),調(diào)整后的碼率可以應(yīng)用于編碼器中,對(duì)編碼器中處理的數(shù)據(jù)進(jìn)行調(diào)節(jié)。這樣,按照調(diào)整后的碼率和調(diào)整后的幀率,便可以進(jìn)行音視頻數(shù)據(jù)的編碼及傳輸。
請(qǐng)參閱圖4,本申請(qǐng)實(shí)施方式還提供一種網(wǎng)絡(luò)推流質(zhì)量的優(yōu)化系統(tǒng),所述系統(tǒng)包括:
流數(shù)據(jù)收集控制模塊100,用于按照預(yù)設(shè)周期采集推流的特征信息,所述特征信息包括平均碼率、平均幀率、緩沖區(qū)數(shù)據(jù)吞吐量、每幀tcp平均發(fā)送時(shí)長;
自適應(yīng)碼率控制模塊200,用于根據(jù)當(dāng)前每幀tcp平均發(fā)送時(shí)長以及當(dāng)前緩沖區(qū)數(shù)據(jù)吞吐量,對(duì)下一周期的碼率進(jìn)行調(diào)整,并將調(diào)整后的碼率作為目標(biāo)碼率反饋至編碼器;
動(dòng)態(tài)幀率控制模塊300,用于根據(jù)當(dāng)前緩沖區(qū)數(shù)據(jù)吞吐量,對(duì)下一周期的幀率進(jìn)行調(diào)整,并根據(jù)調(diào)整后的幀率確定兩幀之間的時(shí)間間隔;基于確定的所述時(shí)間間隔對(duì)進(jìn)入編碼器的音視頻數(shù)據(jù)進(jìn)行過濾,以生成符合調(diào)整后的幀率的音視頻數(shù)據(jù);
傳輸控制模塊400,用于按照調(diào)整后的碼率和調(diào)整后的幀率進(jìn)行音視頻數(shù)據(jù)的編碼及傳輸。
在本申請(qǐng)實(shí)施方式中,所述自適應(yīng)碼率控制模塊200具體包括:
第一判斷單元,用于當(dāng)所述當(dāng)前每幀tcp平均發(fā)送時(shí)長大于第一預(yù)設(shè)風(fēng)險(xiǎn)值時(shí),按照預(yù)設(shè)碼率步長下降當(dāng)前碼率,并將下降后的碼率作為下一周期的碼率;
第二判斷單元,用于當(dāng)所述當(dāng)前每幀tcp平均發(fā)送時(shí)長小于或者等于所述第一預(yù)設(shè)風(fēng)險(xiǎn)值時(shí),判斷所述當(dāng)前每幀tcp平均發(fā)送時(shí)長是否大于第二預(yù)設(shè)風(fēng)險(xiǎn)值;
第三判斷單元,用于若所述當(dāng)前每幀tcp平均發(fā)送時(shí)長大于第二預(yù)設(shè)風(fēng)險(xiǎn)值并且當(dāng)前緩沖區(qū)的數(shù)據(jù)占有率大于預(yù)設(shè)閾值時(shí),按照預(yù)設(shè)碼率步長下降當(dāng)前碼率,并將下降后的碼率作為下一周期的碼率。
在本申請(qǐng)實(shí)施方式中,所述自適應(yīng)碼率控制模塊200具體包括:
吞吐量判斷單元,用于判斷當(dāng)前緩沖區(qū)的吐出數(shù)據(jù)量與吞入數(shù)據(jù)量之間的關(guān)系,當(dāng)吐出數(shù)據(jù)量大于或者等于吞入數(shù)據(jù)量時(shí),將計(jì)數(shù)器的計(jì)數(shù)值加一;當(dāng)吐出數(shù)據(jù)量小于吞入數(shù)據(jù)量時(shí),將計(jì)數(shù)器的計(jì)數(shù)值減一;
碼率調(diào)整單元,用于根據(jù)當(dāng)前計(jì)數(shù)器中計(jì)數(shù)值的大小,調(diào)整下一周期的碼率。
本發(fā)明實(shí)施方式利用碼率與幀率調(diào)整相互配合作用,一方面有效控制網(wǎng)絡(luò)波動(dòng)情況下的音視頻數(shù)據(jù)發(fā)送量,緩解網(wǎng)絡(luò)擁塞,同時(shí)又能給播放端帶來流暢的觀看體驗(yàn);另一方面在網(wǎng)絡(luò)質(zhì)量恢復(fù)時(shí)能夠確保音視頻的碼率幀率是以設(shè)定的最優(yōu)質(zhì)量配置進(jìn)行推流,并且能使不同碼率幀率配置切換時(shí)以一種更為平滑的方式進(jìn)行,不會(huì)給觀看端帶來畫質(zhì)波動(dòng)的突兀感。
上面對(duì)本申請(qǐng)的各種實(shí)施方式的描述以描述的目的提供給本領(lǐng)域技術(shù)人員。其不旨在是窮舉的、或者不旨在將本發(fā)明限制于單個(gè)公開的實(shí)施方式。如上所述,本申請(qǐng)的各種替代和變化對(duì)于上述技術(shù)所屬領(lǐng)域技術(shù)人員而言將是顯而易見的。因此,雖然已經(jīng)具體討論了一些另選的實(shí)施方式,但是其它實(shí)施方式將是顯而易見的,或者本領(lǐng)域技術(shù)人員相對(duì)容易得出。本申請(qǐng)旨在包括在此已經(jīng)討論過的本發(fā)明的所有替代、修改、和變化,以及落在上述申請(qǐng)的精神和范圍內(nèi)的其它實(shí)施方式。