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