本發(fā)明涉及互聯(lián)網(wǎng)流媒體技術(shù)領(lǐng)域,尤其涉及一種轉(zhuǎn)碼控制方法及裝置、視頻直播方法及系統(tǒng)。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展以及我國(guó)帶寬不斷提速,互聯(lián)網(wǎng)的主導(dǎo)內(nèi)容從文字、圖片逐步發(fā)展為以音視頻為主導(dǎo)內(nèi)容。近幾年移動(dòng)互聯(lián)網(wǎng)的爆炸性發(fā)展,使得互聯(lián)網(wǎng)與人們的生活聯(lián)系的更加密切,人們?cè)絹?lái)越期望從互聯(lián)網(wǎng)獲取多媒體信息來(lái)滿足自己的各種需求。于是催生了大批的音視頻內(nèi)容提供商,并極大的促進(jìn)了內(nèi)容分發(fā)網(wǎng)絡(luò)(Content Delivery Network,CDN)行業(yè)的發(fā)展。簡(jiǎn)單的音視頻不再滿足人們的需求,人們需求的是不管是在PC端還是在各種各樣的移動(dòng)端,不管是網(wǎng)絡(luò)質(zhì)量?jī)?yōu)良的情況下還是網(wǎng)絡(luò)質(zhì)量差的情況下,都能享受到高品質(zhì)高質(zhì)量的音視頻內(nèi)容。
對(duì)于互聯(lián)網(wǎng)流媒體領(lǐng)域,由于存在大大小小很多的視頻源提供商,這些視頻源提供商并不能保證提供的音視頻格式的準(zhǔn)確性,例如視頻的幀率信息。同時(shí),在視頻轉(zhuǎn)碼過(guò)程中視頻源還可能會(huì)對(duì)視頻流的幀率信息進(jìn)行實(shí)時(shí)改變。這就導(dǎo)致不能按照準(zhǔn)確的視頻幀率對(duì)視頻流進(jìn)行轉(zhuǎn)碼,按照不準(zhǔn)確的幀率轉(zhuǎn)碼會(huì)導(dǎo)致:
1.轉(zhuǎn)碼后的碼率無(wú)法控制,錯(cuò)誤的過(guò)大的幀率設(shè)置可能導(dǎo)致轉(zhuǎn)碼后的碼率過(guò)大,導(dǎo)致帶寬浪費(fèi)。
2.轉(zhuǎn)碼時(shí)的幀率與轉(zhuǎn)碼前的視頻真實(shí)幀率不一致,轉(zhuǎn)碼過(guò)程中根據(jù)錯(cuò)誤的幀率進(jìn)行視頻轉(zhuǎn)碼,會(huì)對(duì)視頻做抽幀或復(fù)制一些幀的操作,影響視頻的播放效果。
技術(shù)實(shí)現(xiàn)要素:
為了解決現(xiàn)有技術(shù)的問(wèn)題,本發(fā)明實(shí)施例提供了一種轉(zhuǎn)碼控制方法及裝置、視頻直播方法及系統(tǒng)。所述技術(shù)方案如下:
一方面,提供了一種轉(zhuǎn)碼控制方法,包括如下步驟:
對(duì)視頻流當(dāng)前探測(cè)時(shí)間片段的視頻幀率進(jìn)行探測(cè),得出當(dāng)前視頻幀率,并設(shè)置所述當(dāng)前視頻幀率為轉(zhuǎn)碼幀率,按照所述轉(zhuǎn)碼幀率對(duì)所述視頻流進(jìn)行轉(zhuǎn)碼;
根據(jù)所述當(dāng)前視頻幀率與之前視頻幀率,確定所述視頻流下一探測(cè)時(shí)間片段;
對(duì)所述視頻流所述下一探測(cè)時(shí)間片段的視頻幀率進(jìn)行探測(cè),得出下一視頻幀率,并將所述轉(zhuǎn)碼幀率更新為所述下一視頻幀率,按照更新后的所述轉(zhuǎn)碼幀率對(duì)所述視頻流進(jìn)行轉(zhuǎn)碼。
進(jìn)一步的,所述對(duì)視頻流當(dāng)前探測(cè)時(shí)間片段的視頻幀率進(jìn)行探測(cè),得出當(dāng)前視頻幀率,并設(shè)置所述當(dāng)前視頻幀率為轉(zhuǎn)碼幀率,按照所述轉(zhuǎn)碼幀率對(duì)所述視頻流進(jìn)行轉(zhuǎn)碼的步驟具體包括:
根據(jù)幀率探測(cè)算法探測(cè)所述當(dāng)前探測(cè)時(shí)間片段的視頻幀率,得出所述當(dāng)前視頻幀率;
將所述當(dāng)前視頻幀率設(shè)置為轉(zhuǎn)碼幀率,按照所述轉(zhuǎn)碼幀率對(duì)所述當(dāng)前探測(cè)時(shí)間片段及所述當(dāng)前探測(cè)時(shí)間片段至所述下一探測(cè)時(shí)間片段之間的所述視頻流進(jìn)行轉(zhuǎn)碼。
進(jìn)一步的,所述根據(jù)所述當(dāng)前視頻幀率與之前視頻幀率,確定所述視頻流下一探測(cè)時(shí)間片段的步驟具體包括:
計(jì)算所述當(dāng)前視頻幀率與所述之前視頻幀率的差值;
如果所述差值大于設(shè)定差值,則縮短所述當(dāng)前探測(cè)時(shí)間片段與所述下一探測(cè)時(shí)間片段的時(shí)間間隔;
如果所述差值小于等于設(shè)定差值,則延長(zhǎng)所述當(dāng)前探測(cè)時(shí)間片段與所述下一探測(cè)時(shí)間片段的時(shí)間間隔。
進(jìn)一步的,所述對(duì)所述視頻流所述下一探測(cè)時(shí)間片段的視頻幀率進(jìn)行探測(cè),得出下一視頻幀率,并將所述轉(zhuǎn)碼幀率更新為所述下一視頻幀率,按照更新后的所述轉(zhuǎn)碼幀率對(duì)所述視頻流進(jìn)行轉(zhuǎn)碼的步驟具體包括:
根據(jù)所述幀率探測(cè)算法探測(cè)所述下一探測(cè)時(shí)間片段的視頻幀率,得出所述下一視頻幀率;
將所述轉(zhuǎn)碼幀率更新為所述下一視頻幀率,按照更新后的所述轉(zhuǎn)碼幀率對(duì)所述下一探測(cè)時(shí)間片段及所述下一探測(cè)時(shí)間片段至再次探測(cè)前的所述視頻流進(jìn)行轉(zhuǎn)碼。
另一方面,提供了一種視頻直播方法,包括所述的轉(zhuǎn)碼控制方法。
再一方面,提供了一種轉(zhuǎn)碼控制裝置,包括:
第一探測(cè)模塊,用于對(duì)視頻流當(dāng)前探測(cè)時(shí)間片段的視頻幀率進(jìn)行探測(cè),得出當(dāng)前視頻幀率,并設(shè)置所述當(dāng)前視頻幀率為轉(zhuǎn)碼幀率,按照所述轉(zhuǎn)碼幀率對(duì)所述視頻流進(jìn)行轉(zhuǎn)碼;
控制模塊,用于根據(jù)所述當(dāng)前視頻幀率與之前視頻幀率,確定所述視頻流下一探測(cè)時(shí)間片段;
第二探測(cè)模塊,用于對(duì)所述視頻流所述下一探測(cè)時(shí)間片段的視頻幀率進(jìn)行探測(cè),得出下一視頻幀率,并將所述轉(zhuǎn)碼幀率更新為所述下一視頻幀率,按照更新后的所述轉(zhuǎn)碼幀率對(duì)所述視頻流進(jìn)行轉(zhuǎn)碼。
進(jìn)一步的,所述第一探測(cè)模塊包括第一探測(cè)子模塊和第一設(shè)置子模塊;
所述第一探測(cè)子模塊,用于根據(jù)幀率探測(cè)算法探測(cè)所述當(dāng)前探測(cè)時(shí)間片段的視頻幀率,得出所述當(dāng)前視頻幀率;
所述第一設(shè)置子模塊,用于將所述當(dāng)前視頻幀率設(shè)置為轉(zhuǎn)碼幀率,按照所述轉(zhuǎn)碼幀率對(duì)所述當(dāng)前探測(cè)時(shí)間片段及所述當(dāng)前探測(cè)時(shí)間片段至所述下一探測(cè)時(shí)間片段之間的所述視頻流進(jìn)行轉(zhuǎn)碼。
進(jìn)一步的,所述控制模塊包括計(jì)算子模塊和判斷子模塊;
所述計(jì)算子模塊,用于計(jì)算所述當(dāng)前視頻幀率與所述之前視頻幀率的差值;
所述判斷子模塊,用于判斷:
如果所述差值大于設(shè)定差值,則縮短所述當(dāng)前探測(cè)時(shí)間片段與所述下一探測(cè)時(shí)間片段的時(shí)間間隔;或者
如果所述差值小于等于設(shè)定差值,則延長(zhǎng)所述當(dāng)前探測(cè)時(shí)間片段與所述下一探測(cè)時(shí)間片段的時(shí)間間隔。
進(jìn)一步的,所述第二探測(cè)模塊包括第二探測(cè)子模塊和第二設(shè)置子模塊;
所述第二探測(cè)子模塊,用于根據(jù)所述幀率探測(cè)算法探測(cè)所述下一探測(cè)時(shí)間片段的視頻幀率,得出所述下一視頻幀率;
所述第二設(shè)置子模塊,用于將所述轉(zhuǎn)碼幀率更新為所述下一視頻幀率,按照更新后的所述轉(zhuǎn)碼幀率對(duì)所述下一探測(cè)時(shí)間片段及所述下一探測(cè)時(shí)間片段至再次探測(cè)前的所述視頻流進(jìn)行轉(zhuǎn)碼。
再一方面,提供了一種視頻直播系統(tǒng),包括所述的轉(zhuǎn)碼控制裝置。
本發(fā)明實(shí)施例提供的技術(shù)方案帶來(lái)的有益效果是:
通過(guò)對(duì)視頻流幀率的實(shí)時(shí)探測(cè),保證了視頻流轉(zhuǎn)碼過(guò)程中轉(zhuǎn)碼幀率的準(zhǔn)確性,避免錯(cuò)誤的過(guò)大的幀率導(dǎo)致的帶寬浪費(fèi),以及錯(cuò)誤的過(guò)小的幀率導(dǎo)致畫(huà)面質(zhì)量的下降,保證轉(zhuǎn)碼前后畫(huà)面質(zhì)量和碼率的一致性。進(jìn)而保證了視頻流轉(zhuǎn)碼的質(zhì)量和效果。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實(shí)施例一提供的轉(zhuǎn)碼控制方法流程圖;
圖2是本發(fā)明實(shí)施例一提供的轉(zhuǎn)碼控制方法流程圖;
圖3是本發(fā)明實(shí)施例一提供的轉(zhuǎn)碼控制方法流程圖;
圖4是本發(fā)明實(shí)施例一提供的轉(zhuǎn)碼控制方法流程圖;
圖5是本發(fā)明實(shí)施例一提供的轉(zhuǎn)碼流程圖;
圖6是本發(fā)明實(shí)施例二提供的轉(zhuǎn)碼控制裝置的結(jié)構(gòu)示意圖;
圖7是本發(fā)明實(shí)施例二提供的第一探測(cè)模塊的結(jié)構(gòu)示意圖;
圖8是本發(fā)明實(shí)施例二提供的控制模塊的結(jié)構(gòu)示意圖;
圖9是本發(fā)明實(shí)施例二提供的第二探測(cè)模塊的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。
實(shí)施例一
本發(fā)明實(shí)施例提供了一種轉(zhuǎn)碼控制方法,參見(jiàn)圖1,包括如下步驟:
S101:對(duì)視頻流當(dāng)前探測(cè)時(shí)間片段的視頻幀率進(jìn)行探測(cè),得出當(dāng)前視頻幀率,并設(shè)置所述當(dāng)前視頻幀率為轉(zhuǎn)碼幀率,按照所述轉(zhuǎn)碼幀率對(duì)所述視頻流進(jìn)行轉(zhuǎn)碼。
在直播場(chǎng)景中,視頻源提供商提供視頻流并決定所提供視頻流的格式,由于這些視頻源的格式各不相同,因而需要對(duì)視頻源進(jìn)行實(shí)時(shí)轉(zhuǎn)碼,再將轉(zhuǎn)碼處理后的視頻流輸出至用戶終端。由于轉(zhuǎn)碼過(guò)程中,因不同原因,例如視頻流所攜帶的視頻幀率信息不準(zhǔn)確或者未攜帶視頻幀率信息,將導(dǎo)致直接解析視頻流獲取的視頻幀率不準(zhǔn)確,進(jìn)而導(dǎo)致轉(zhuǎn)碼不正?;蛘咿D(zhuǎn)碼后的視頻無(wú)法正常顯示。
本方法通過(guò)對(duì)視頻流的視頻幀率進(jìn)行實(shí)時(shí)探測(cè),并根據(jù)實(shí)時(shí)探測(cè)得知的視頻幀率對(duì)視頻流進(jìn)行轉(zhuǎn)碼,保證了轉(zhuǎn)碼質(zhì)量。
在本實(shí)施例中,所述對(duì)視頻流當(dāng)前探測(cè)時(shí)間片段的視頻幀率進(jìn)行探測(cè),得出當(dāng)前視頻幀率,并設(shè)置所述當(dāng)前視頻幀率為轉(zhuǎn)碼幀率,按照所述轉(zhuǎn)碼幀率對(duì)所述視頻流進(jìn)行轉(zhuǎn)碼的步驟S101具體包括S1011-S1012兩個(gè)子步驟,如圖2所示。
S1011:根據(jù)幀率探測(cè)算法探測(cè)所述當(dāng)前探測(cè)時(shí)間片段的視頻幀率,得出所述當(dāng)前視頻幀率。
幀率(Frame rate)是用于測(cè)量顯示幀數(shù)的量度,其測(cè)量單位為每秒顯示幀數(shù)(Frames per Second,F(xiàn)PS),例如一秒鐘顯示30幀,則幀率為30FPS。對(duì)于幀率的探測(cè),其探測(cè)算法多種多樣,探測(cè)的精度越高則算法的計(jì)算復(fù)雜度也越高,因而在選用時(shí)綜合考慮精度和計(jì)算復(fù)雜度來(lái)選用不同的探測(cè)算法。
由于在直播場(chǎng)景中,要考慮到時(shí)延,對(duì)視頻流的處理是極其迅速的,同時(shí)還要考慮到設(shè)備性能,因而,選取的探測(cè)時(shí)間片段都很短,在幾百毫秒的范圍內(nèi)進(jìn)行選取,盡管探測(cè)時(shí)間片段都很短,但是選取的探測(cè)時(shí)間片段長(zhǎng)短決定了對(duì)本時(shí)間片段幀率探測(cè)的準(zhǔn)確程度,由于較長(zhǎng)的探測(cè)時(shí)間片段內(nèi)數(shù)據(jù)更多,因而得出的探測(cè)結(jié)果更準(zhǔn)確。
在本實(shí)施例中,在接收并處理視頻流的最初,上述當(dāng)前探測(cè)時(shí)間片段為第一個(gè)選取的探測(cè)時(shí)間片段,通過(guò)幀率探測(cè)算法對(duì)該探測(cè)時(shí)間片段進(jìn)行視頻幀率探測(cè),得出當(dāng)前視頻幀率。
S1012:將所述當(dāng)前視頻幀率設(shè)置為轉(zhuǎn)碼幀率,按照所述轉(zhuǎn)碼幀率對(duì)所述當(dāng)前探測(cè)時(shí)間片段及所述當(dāng)前探測(cè)時(shí)間片段至所述下一探測(cè)時(shí)間片段之間的所述視頻流進(jìn)行轉(zhuǎn)碼。
在本實(shí)施例中,探測(cè)到的當(dāng)前視頻幀率將作為轉(zhuǎn)碼的轉(zhuǎn)碼幀率,通過(guò)將該當(dāng)前視頻幀率設(shè)置至轉(zhuǎn)碼裝置中,例如設(shè)置到解碼器的上下文參數(shù)和編碼器的上下文參數(shù)中,轉(zhuǎn)碼裝置按照轉(zhuǎn)碼幀率,即探測(cè)到的當(dāng)前視頻幀率,對(duì)當(dāng)前探測(cè)時(shí)間片段,以及當(dāng)前探測(cè)時(shí)間片段至所述下一探測(cè)時(shí)間片段之間的視頻流進(jìn)行轉(zhuǎn)碼。
可以看出,探測(cè)到的當(dāng)前視頻幀率是有局限性的,其只作為特定時(shí)間片段內(nèi)的視頻流的轉(zhuǎn)碼幀率,這是因?yàn)椋瑢?duì)視頻流的探測(cè)過(guò)程是實(shí)時(shí)的,通過(guò)實(shí)時(shí)探測(cè)視頻流的視頻幀率,很好的克服了因網(wǎng)絡(luò)不穩(wěn)定導(dǎo)致視頻流抖動(dòng)而造成的視頻幀率改變的問(wèn)題。
S102:根據(jù)所述當(dāng)前視頻幀率與之前視頻幀率,確定所述視頻流下一探測(cè)時(shí)間片段。
在本實(shí)施例中,每次探測(cè)完成后,還會(huì)進(jìn)行下一次探測(cè),直至轉(zhuǎn)碼過(guò)程結(jié)束。在轉(zhuǎn)碼過(guò)程中,探測(cè)視頻幀率會(huì)占用系統(tǒng)資源,如果頻繁的進(jìn)行探測(cè)會(huì)極大增加系統(tǒng)負(fù)擔(dān),因而要對(duì)探測(cè)的時(shí)機(jī)進(jìn)行恰當(dāng)?shù)脑O(shè)置,平衡轉(zhuǎn)碼質(zhì)量和系統(tǒng)性能。
在本實(shí)施例中,所述根據(jù)所述當(dāng)前視頻幀率與之前視頻幀率,確定所述視頻流下一探測(cè)時(shí)間片段的步驟S102具體包括S1021-S1022兩個(gè)子步驟,如圖3所示。
S1021:計(jì)算所述當(dāng)前視頻幀率與所述之前視頻幀率的差值。
在視頻流轉(zhuǎn)碼初期,當(dāng)前視頻幀率為第一次探測(cè)得出的視頻幀率,因而不存在之前視頻幀率,在這種情況下,提前設(shè)定好當(dāng)前探測(cè)時(shí)間片段和下一探測(cè)時(shí)間片段。
第二次視頻幀率探測(cè)完成時(shí),當(dāng)前視頻幀率為第二次探測(cè)得出的視頻幀率,此時(shí),之前視頻幀率為第一次探測(cè)得出的視頻幀率。
第三次視頻幀率探測(cè)完成時(shí),當(dāng)前視頻幀率為第三次探測(cè)得出的視頻幀率,此時(shí),之前視頻幀率有多種設(shè)定方式。
之前視頻幀率的一種設(shè)定方式為,之前視頻幀率為第二次探測(cè)得出的視頻幀率,即之前視頻幀率為當(dāng)前探測(cè)的前一次探測(cè)得出的視頻幀率,這種設(shè)定方式下,之前視頻幀率不需要統(tǒng)計(jì)歷次探測(cè)得出的視頻幀率,能夠?qū)崟r(shí)反映當(dāng)前視頻流的幀率變化情況。
之前視頻幀率的另一種設(shè)定方式為,之前視頻幀率為綜合第一次探測(cè)得出的視頻幀率和第二次探測(cè)得出的視頻幀率而得出的參考視頻幀率,即之前視頻幀率為綜合當(dāng)前探測(cè)的之前歷次探測(cè)的視頻幀率而得出的參考視頻幀率,例如對(duì)第一次探測(cè)值和第二次探測(cè)值設(shè)定權(quán)重,假設(shè)第一次探測(cè)值的權(quán)重為40%,第二次探測(cè)值的權(quán)重為60%,按照權(quán)重計(jì)算方式計(jì)算得出參考視頻幀率。這種設(shè)定方式下,之前視頻幀率參考了歷次探測(cè)數(shù)據(jù),更接近視頻流的實(shí)際幀率。
在已經(jīng)進(jìn)行過(guò)兩次視頻幀率探測(cè)的情況下,通過(guò)計(jì)算當(dāng)前視頻幀率與之前視頻幀率的差值,確定下一探測(cè)時(shí)間片段。
S1022:如果所述差值大于設(shè)定差值,則縮短所述當(dāng)前探測(cè)時(shí)間片段與所述下一探測(cè)時(shí)間片段的時(shí)間間隔;如果所述差值小于等于設(shè)定差值,則延長(zhǎng)所述當(dāng)前探測(cè)時(shí)間片段與所述下一探測(cè)時(shí)間片段的時(shí)間間隔。
在本實(shí)施例中,當(dāng)前視頻幀率與之前視頻幀率的差值越小,說(shuō)明當(dāng)前視頻流的穩(wěn)定程度越好,可以延長(zhǎng)當(dāng)前視頻幀率作為轉(zhuǎn)碼幀率的適用時(shí)間,此時(shí),需要適當(dāng)延長(zhǎng)進(jìn)行下一探測(cè)的時(shí)間間隔。如果當(dāng)前視頻幀率與之前視頻幀率的差值越大,說(shuō)明當(dāng)前視頻流的穩(wěn)定程度較差,此時(shí),需要適當(dāng)縮短進(jìn)行下一探測(cè)的時(shí)間間隔,增加探測(cè)次數(shù),按照探測(cè)得到的視頻幀率作為轉(zhuǎn)碼幀率。
需要說(shuō)明的是,上述設(shè)定差值反映了轉(zhuǎn)碼后視頻流穩(wěn)定程度的可接受度,例如當(dāng)設(shè)定差值較小時(shí),得到的視頻流穩(wěn)定程度較高,此時(shí)可接受度較高;當(dāng)設(shè)定差值較大時(shí),得到的視頻流穩(wěn)定程度較低,此時(shí)可接受度較低。
S103:對(duì)所述視頻流所述下一探測(cè)時(shí)間片段的視頻幀率進(jìn)行探測(cè),得出下一視頻幀率,并將所述轉(zhuǎn)碼幀率更新為所述下一視頻幀率,按照更新后的所述轉(zhuǎn)碼幀率對(duì)所述視頻流進(jìn)行轉(zhuǎn)碼。
由于視頻幀率的探測(cè)過(guò)程是不斷進(jìn)行的,因而需要不斷地調(diào)整轉(zhuǎn)碼幀率,進(jìn)而更好地對(duì)視頻流進(jìn)行轉(zhuǎn)碼。
在本實(shí)施例中,所述對(duì)所述視頻流所述下一探測(cè)時(shí)間片段的視頻幀率進(jìn)行探測(cè),得出下一視頻幀率,并將所述轉(zhuǎn)碼幀率更新為所述下一視頻幀率,按照更新后的所述轉(zhuǎn)碼幀率對(duì)所述視頻流進(jìn)行轉(zhuǎn)碼的步驟S103具體包括S1031-S1032兩個(gè)子步驟,如圖4所示。
S1031:根據(jù)所述幀率探測(cè)算法探測(cè)所述下一探測(cè)時(shí)間片段的視頻幀率,得出所述下一視頻幀率。
在本實(shí)施例中,整個(gè)轉(zhuǎn)碼過(guò)程中采用的幀率探測(cè)算法是相同的,根據(jù)幀率探測(cè)算法探測(cè)下一探測(cè)時(shí)間片段的視頻幀率,得出下一視頻幀率。需要說(shuō)明的是,進(jìn)行下一探測(cè)時(shí)間片段的視頻幀率探測(cè)時(shí),其過(guò)程與步驟S101一樣,并且在對(duì)下一探測(cè)時(shí)間片段進(jìn)行探測(cè)時(shí),該下一探測(cè)時(shí)間片段即為當(dāng)前時(shí)間片段。本方法中的當(dāng)前探測(cè)時(shí)間片段與下一探測(cè)時(shí)間片段的命名,其命名目的是為了區(qū)分幀率探測(cè)的前后順序。
S1032:將所述轉(zhuǎn)碼幀率更新為所述下一視頻幀率,按照更新后的所述轉(zhuǎn)碼幀率對(duì)所述下一探測(cè)時(shí)間片段及所述下一探測(cè)時(shí)間片段至再次探測(cè)前的所述視頻流進(jìn)行轉(zhuǎn)碼。
當(dāng)探測(cè)到下一視頻幀率后,之前的轉(zhuǎn)碼幀率停止使用,將轉(zhuǎn)碼幀率更新為下一視頻幀率,按照更新后的轉(zhuǎn)碼幀率,對(duì)下一探測(cè)時(shí)間片段以及下一探測(cè)時(shí)間片段至再次探測(cè)前的時(shí)間間隔內(nèi)的視頻流進(jìn)行轉(zhuǎn)碼。
需要說(shuō)明的是,當(dāng)前的視頻幀率和之前的視頻幀率共同決定下一次視頻探測(cè)的時(shí)機(jī),即對(duì)視頻流的視頻幀率探測(cè)是循環(huán)進(jìn)行的,直至視頻流轉(zhuǎn)碼結(jié)束。
通過(guò)對(duì)視頻流幀率的實(shí)時(shí)探測(cè),保證了視頻流轉(zhuǎn)碼過(guò)程中轉(zhuǎn)碼幀率的準(zhǔn)確性,避免錯(cuò)誤的過(guò)大的幀率導(dǎo)致的帶寬浪費(fèi),以及錯(cuò)誤的過(guò)小的幀率導(dǎo)致畫(huà)面質(zhì)量的下降,保證轉(zhuǎn)碼前后畫(huà)面質(zhì)量和碼率的一致性。進(jìn)而保證了視頻流轉(zhuǎn)碼的質(zhì)量和效果。
可以看出,本實(shí)施例所述的轉(zhuǎn)碼控制方法是通過(guò)實(shí)時(shí)探測(cè)的轉(zhuǎn)碼幀率來(lái)對(duì)轉(zhuǎn)碼過(guò)程進(jìn)行控制。參見(jiàn)圖5,圖5示出了應(yīng)用本轉(zhuǎn)碼控制方法的轉(zhuǎn)碼具體流程圖。
首先,讀取輸入的音視頻流,并獲取音視頻流的封裝格式、音視頻參數(shù)以及編解碼參數(shù)信息。
之后,對(duì)音視頻流解封裝,分離音視頻數(shù)據(jù)。
對(duì)于視頻數(shù)據(jù),通過(guò)本實(shí)施例的轉(zhuǎn)碼控制方法獲取視頻幀率后,將視頻幀率設(shè)置至解碼器上下文參數(shù)和編碼器上下文參數(shù)中,進(jìn)而解碼視頻數(shù)據(jù),對(duì)視頻濾鏡處理,并編碼濾鏡處理后的視頻數(shù)據(jù)。
對(duì)于音頻數(shù)據(jù),解碼音頻數(shù)據(jù),對(duì)音頻數(shù)據(jù)濾鏡處理,并編碼濾鏡處理后的音頻數(shù)據(jù)。
最后,按照輸出文件類型對(duì)音視頻數(shù)據(jù)封裝,輸出轉(zhuǎn)碼后的音視頻。
圖5所示的是該轉(zhuǎn)碼控制方法在視頻直播過(guò)程中對(duì)視頻流進(jìn)行轉(zhuǎn)碼處理的一種實(shí)施方式,不作為對(duì)該轉(zhuǎn)碼控制方法的其他實(shí)施方式的限定。
實(shí)施例二
參見(jiàn)圖6,本發(fā)明實(shí)施例提供了一種轉(zhuǎn)碼控制裝置,可以執(zhí)行實(shí)施例一中提供的轉(zhuǎn)碼控制方法,包括:
第一探測(cè)模塊210,用于對(duì)視頻流當(dāng)前探測(cè)時(shí)間片段的視頻幀率進(jìn)行探測(cè),得出當(dāng)前視頻幀率,并設(shè)置當(dāng)前視頻幀率為轉(zhuǎn)碼幀率,按照轉(zhuǎn)碼幀率對(duì)視頻流進(jìn)行轉(zhuǎn)碼;
控制模塊220,用于根據(jù)當(dāng)前視頻幀率與之前視頻幀率,確定視頻流下一探測(cè)時(shí)間片段;
第二探測(cè)模塊230,用于對(duì)視頻流下一探測(cè)時(shí)間片段的視頻幀率進(jìn)行探測(cè),得出下一視頻幀率,并將轉(zhuǎn)碼幀率更新為下一視頻幀率,按照更新后的轉(zhuǎn)碼幀率對(duì)視頻流進(jìn)行轉(zhuǎn)碼。
在本實(shí)施例中,上述轉(zhuǎn)碼控制裝置在探測(cè)視頻流的視頻幀率時(shí),還需要其它裝置的配合,例如視頻流封裝模式的獲取裝置、解封裝處理裝置、編碼器、解碼器等,這些裝置完成了現(xiàn)有視頻流的轉(zhuǎn)碼流程,該轉(zhuǎn)碼控制裝置是在現(xiàn)有轉(zhuǎn)碼流程的基礎(chǔ)上中添加的一個(gè)探測(cè)視頻流視頻幀率的裝置。
參見(jiàn)圖7,在本實(shí)施例中,第一探測(cè)模塊210包括第一探測(cè)子模塊211和第一設(shè)置子模塊212。
第一探測(cè)子模塊211,用于根據(jù)幀率探測(cè)算法探測(cè)當(dāng)前探測(cè)時(shí)間片段的視頻幀率,得出當(dāng)前視頻幀率。
第一設(shè)置子模塊212,用于將當(dāng)前視頻幀率設(shè)置為轉(zhuǎn)碼幀率,按照轉(zhuǎn)碼幀率對(duì)當(dāng)前探測(cè)時(shí)間片段及當(dāng)前探測(cè)時(shí)間片段至下一探測(cè)時(shí)間片段之間的視頻流進(jìn)行轉(zhuǎn)碼。
參見(jiàn)圖8,在本實(shí)施例中,控制模塊220包括計(jì)算子模塊221和判斷子模塊222。
計(jì)算子模塊221,用于計(jì)算當(dāng)前視頻幀率與之前視頻幀率的差值。
判斷子模塊222,用于判斷:
如果差值大于設(shè)定差值,則縮短當(dāng)前探測(cè)時(shí)間片段與下一探測(cè)時(shí)間片段的時(shí)間間隔;或者
如果差值小于等于設(shè)定差值,則延長(zhǎng)當(dāng)前探測(cè)時(shí)間片段與下一探測(cè)時(shí)間片段的時(shí)間間隔。
參見(jiàn)圖9,在本實(shí)施例中,第二探測(cè)模塊230包括第二探測(cè)子模塊231和第二設(shè)置子模塊232。
第二探測(cè)子模塊231,用于根據(jù)幀率探測(cè)算法探測(cè)下一探測(cè)時(shí)間片段的視頻幀率,得出下一視頻幀率。
第二設(shè)置子模塊232,用于將轉(zhuǎn)碼幀率更新為下一視頻幀率,按照更新后的轉(zhuǎn)碼幀率對(duì)下一探測(cè)時(shí)間片段及下一探測(cè)時(shí)間片段至再次探測(cè)前的視頻流進(jìn)行轉(zhuǎn)碼。
實(shí)施例三
本發(fā)明實(shí)施例提供了一種視頻直播方法,包括實(shí)施例一中提供的轉(zhuǎn)碼控制方法。
現(xiàn)有的視頻直播方法中,對(duì)視頻流的轉(zhuǎn)碼是依靠視頻源提供商提供的視頻格式信息,包括視頻分辨率、碼率、幀率,在對(duì)視頻流的轉(zhuǎn)碼過(guò)程中,如果直接按照上述視頻格式信息進(jìn)行轉(zhuǎn)碼,當(dāng)上述視頻格式信息不準(zhǔn)確時(shí),會(huì)造成轉(zhuǎn)碼質(zhì)量不佳,影響直播效果。
在本實(shí)施例中,再次參加圖5,在直播過(guò)程中,首先,讀取輸入的直播音視頻流,并獲取音視頻流的封裝格式、音視頻參數(shù)以及編解碼參數(shù)信息。
之后,對(duì)音視頻流解封裝,分離音視頻數(shù)據(jù)。
對(duì)于視頻數(shù)據(jù),通過(guò)實(shí)施例一的轉(zhuǎn)碼控制方法獲取視頻幀率后,將視頻幀率設(shè)置至解碼器上下文參數(shù)和編碼器上下文參數(shù)中,進(jìn)而解碼視頻數(shù)據(jù),對(duì)視頻濾鏡處理,并編碼濾鏡處理后的視頻數(shù)據(jù)。
對(duì)于音頻數(shù)據(jù),解碼音頻數(shù)據(jù),對(duì)音頻數(shù)據(jù)濾鏡處理,并編碼濾鏡處理后的音頻數(shù)據(jù)。
最后,按照輸出文件類型對(duì)音視頻數(shù)據(jù)封裝,將轉(zhuǎn)碼后的音視頻輸出至接收直播的各種接收終端,例如用戶手機(jī)、個(gè)人電腦等。
通過(guò)在該直播方法中實(shí)施實(shí)施例一提供的轉(zhuǎn)碼控制方法,得到了視頻流準(zhǔn)確的視頻幀率,更好地改善了直播效果。
實(shí)施例四
本發(fā)明實(shí)施例提供了一種視頻直播系統(tǒng),包括實(shí)施例二中提供的轉(zhuǎn)碼控制裝置。
在本實(shí)施例中,該視頻直播系統(tǒng)包括:
封裝模式獲取裝置,用于從音視頻流中獲取封裝格式信息、音視頻參數(shù)以及編解碼參數(shù)信息。
解封裝處理裝置,用于解封裝分離音視頻。
轉(zhuǎn)碼控制裝置,用于探測(cè)視頻幀率。
音視頻解碼裝置,用于將視頻解碼為YUV數(shù)據(jù),音頻解碼為PCM數(shù)據(jù)。
濾鏡處理裝置,用于音視頻的濾鏡處理。
音視頻編碼裝置,用于將濾鏡處理后的音視頻數(shù)據(jù)進(jìn)行編碼。
封裝處理裝置,用于將編碼后的音視頻數(shù)據(jù)按照要求的封裝格式進(jìn)行封裝。
該視頻直播系統(tǒng)將封裝處理后的音視頻輸出至接收直播的各種接收終端。
上述本發(fā)明實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。
以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性的勞動(dòng)的情況下,即可以理解并實(shí)施。
通過(guò)以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到各實(shí)施方式可借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn),當(dāng)然也可以通過(guò)硬件?;谶@樣的理解,上述技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品可以存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,如ROM/RAM、磁碟、光盤(pán)等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。