本發(fā)明涉及互聯(lián)網(wǎng)技術(shù),特別涉及一種音視頻直播的實(shí)現(xiàn)方法和服務(wù)器。
背景技術(shù):
在音視頻直播過程中,首屏打開時(shí)間和端到端延遲是影響用戶體驗(yàn)質(zhì)量的兩個(gè)主要指標(biāo)。
為了減少首屏打開時(shí)間,現(xiàn)有技術(shù)中通常采用以下處理方式:在服務(wù)器中緩存距離當(dāng)前時(shí)刻最近的畫面組(GOP,Group of Pictures)數(shù)據(jù),當(dāng)有新的客戶端接入時(shí),從所緩存的GOP數(shù)據(jù)中的第一幀數(shù)據(jù)開始,依次將各幀數(shù)據(jù)發(fā)送給客戶端,客戶端即從GOP數(shù)據(jù)中的第一幀數(shù)據(jù)開始播放,從而會(huì)導(dǎo)致引入一個(gè)GOP的端到端延遲。
而為了減少端到端延遲,現(xiàn)有技術(shù)中通常采用以下處理方式:不進(jìn)行數(shù)據(jù)緩存,新接入的客戶端直接從最新的幀數(shù)據(jù)開始播放,但由于最新的幀數(shù)據(jù)往往不是關(guān)鍵幀,不能獨(dú)立解碼播放,因此會(huì)導(dǎo)致出現(xiàn)一段時(shí)間的黑屏或花屏,即導(dǎo)致首屏打開時(shí)間變長(zhǎng),影響首屏體驗(yàn)。
可見,現(xiàn)有方式中,如果要減少首屏打開時(shí)間,則會(huì)導(dǎo)致端到端延遲變長(zhǎng),如果要減少端到端延遲,則會(huì)導(dǎo)致首屏打開時(shí)間變長(zhǎng),無論是哪種方式,均會(huì)降低直播質(zhì)量。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供了一種音視頻直播的實(shí)現(xiàn)方法和服務(wù)器,能夠提升直播質(zhì)量。
具體技術(shù)方案如下:
一種音視頻直播的實(shí)現(xiàn)方法,包括:
當(dāng)有新的客戶端接入時(shí),按照快進(jìn)播放的原則,對(duì)所緩存的距離當(dāng)前時(shí)刻最近的畫面組GOP數(shù)據(jù)進(jìn)行修改;
將修改后的GOP數(shù)據(jù)發(fā)送給所述客戶端進(jìn)行播放。
根據(jù)本發(fā)明一優(yōu)選實(shí)施例,
所述GOP數(shù)據(jù)中包括:距離當(dāng)前時(shí)刻最近的I幀數(shù)據(jù),以及,所述I幀數(shù)據(jù)之后到所述當(dāng)前時(shí)刻的所有幀數(shù)據(jù);
對(duì)所述GOP數(shù)據(jù)進(jìn)行修改包括:依次對(duì)所述GOP數(shù)據(jù)中的各幀數(shù)據(jù)進(jìn)行時(shí)間戳壓縮。
根據(jù)本發(fā)明一優(yōu)選實(shí)施例,
所述依次對(duì)所述GOP數(shù)據(jù)中的各幀數(shù)據(jù)進(jìn)行時(shí)間戳壓縮之前,進(jìn)一步包括:丟棄所述GOP數(shù)據(jù)中的部分或全部非參考幀數(shù)據(jù);
所述依次對(duì)所述GOP數(shù)據(jù)中的各幀數(shù)據(jù)進(jìn)行時(shí)間戳壓縮包括:依次對(duì)所述GOP數(shù)據(jù)中剩余的各幀數(shù)據(jù)進(jìn)行時(shí)間戳壓縮。
根據(jù)本發(fā)明一優(yōu)選實(shí)施例,
所述將修改后的GOP數(shù)據(jù)發(fā)送給所述客戶端進(jìn)行播放之后,進(jìn)一步包括:
當(dāng)獲取到的新的音視頻數(shù)據(jù)時(shí),將所述音視頻數(shù)據(jù)發(fā)送給所述客戶端進(jìn)行播放。
根據(jù)本發(fā)明一優(yōu)選實(shí)施例,
該方法進(jìn)一步包括:為所述客戶端創(chuàng)建一個(gè)隊(duì)列;
所述將修改后的GOP數(shù)據(jù)發(fā)送給所述客戶端包括:
將所述修改后的GOP數(shù)據(jù)放入到所述隊(duì)列中,將所述隊(duì)列中的數(shù)據(jù)發(fā)送給所述客戶端;
所述將所述音視頻數(shù)據(jù)發(fā)送給所述客戶端包括:
將所述音視頻數(shù)據(jù)加入到所述隊(duì)列中,將所述隊(duì)列中的數(shù)據(jù)發(fā)送給所述客戶端。
一種服務(wù)器,包括:處理單元和發(fā)送單元;
所述處理單元,用于當(dāng)有新的客戶端接入時(shí),按照快進(jìn)播放的原則,對(duì)所緩存的距離當(dāng)前時(shí)刻最近的畫面組GOP數(shù)據(jù)進(jìn)行修改,并將修改后的GOP數(shù)據(jù)發(fā)送給所述發(fā)送單元;
所述發(fā)送單元,用于將所述修改后的GOP數(shù)據(jù)發(fā)送給所述客戶端進(jìn)行播放。
根據(jù)本發(fā)明一優(yōu)選實(shí)施例,
所述GOP數(shù)據(jù)中包括:距離當(dāng)前時(shí)刻最近的I幀數(shù)據(jù),以及,所述I幀數(shù)據(jù)之后到所述當(dāng)前時(shí)刻的所有幀數(shù)據(jù);
所述處理單元中包括:緩存子單元以及修改子單元;
所述緩存子單元,用于緩存所述GOP數(shù)據(jù);
所述修改子單元,用于當(dāng)有新的客戶端接入時(shí),從所述緩存子單元中獲取所述GOP數(shù)據(jù),并依次對(duì)所述GOP數(shù)據(jù)中的各幀數(shù)據(jù)進(jìn)行時(shí)間戳壓縮,將修改后的GOP數(shù)據(jù)發(fā)送給所述發(fā)送單元。
根據(jù)本發(fā)明一優(yōu)選實(shí)施例,
所述修改子單元進(jìn)一步用于,
在依次對(duì)所述GOP數(shù)據(jù)中的各幀數(shù)據(jù)進(jìn)行時(shí)間戳壓縮之前,丟棄所述GOP數(shù)據(jù)中的部分或全部非參考幀數(shù)據(jù);
依次對(duì)所述GOP數(shù)據(jù)中剩余的各幀數(shù)據(jù)進(jìn)行時(shí)間戳壓縮。
根據(jù)本發(fā)明一優(yōu)選實(shí)施例,
所述處理單元中進(jìn)一步包括:獲取子單元;
所述獲取子單元,用于當(dāng)獲取到的新的音視頻數(shù)據(jù)時(shí),將所述音視頻數(shù)據(jù)發(fā)送給所述發(fā)送單元。
根據(jù)本發(fā)明一優(yōu)選實(shí)施例,
所述發(fā)送單元進(jìn)一步用于,
為所述客戶端創(chuàng)建一個(gè)隊(duì)列;
將接收到的所述修改后的GOP數(shù)據(jù)以及所述音視頻數(shù)據(jù)均加入到所述隊(duì)列中;
將所述隊(duì)列中的數(shù)據(jù)發(fā)送給所述客戶端。
通過上述介紹可以看出,采用本發(fā)明所述方案,可對(duì)所緩存的GOP數(shù)據(jù)進(jìn)行修改,以使得這些數(shù)據(jù)在到達(dá)客戶端時(shí)能夠快進(jìn)播放,從而盡可能地減少了端到端延遲,而且,通過緩存GOP數(shù)據(jù),減少了首屏打開時(shí)間,從而提高了直播質(zhì)量。
【附圖說明】
圖1為本發(fā)明所述音視頻直播的實(shí)現(xiàn)方法實(shí)施例的流程圖。
圖2為本發(fā)明所述隊(duì)列的示意圖。
圖3為本發(fā)明所述音視頻直播的實(shí)現(xiàn)方法較佳實(shí)施例的流程圖。
圖4為本發(fā)明所述服務(wù)器實(shí)施例的組成結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
為了使本發(fā)明的技術(shù)方案更加清楚、明白,以下參照附圖并舉實(shí)施例,對(duì)本發(fā)明所述方案作進(jìn)一步地詳細(xì)說明。
實(shí)施例一
圖1為本發(fā)明所述音視頻直播的實(shí)現(xiàn)方法實(shí)施例的流程圖,如圖1所示,包括以下具體實(shí)現(xiàn)方式:
在11中,當(dāng)有新的客戶端接入時(shí),按照快進(jìn)播放的原則,對(duì)所緩存的距離當(dāng)前時(shí)刻最近的GOP數(shù)據(jù)進(jìn)行修改;
在12中,將修改后的GOP數(shù)據(jù)發(fā)送給客戶端進(jìn)行播放。
在實(shí)際應(yīng)用中,上述11和12的執(zhí)行主體可為服務(wù)器,如可為流媒體服務(wù)器等。
可在服務(wù)器上緩存距離當(dāng)前時(shí)刻最近的GOP數(shù)據(jù),由于所述“當(dāng)前時(shí)刻”是在不斷變化的,那么對(duì)應(yīng)的所緩存的GOP數(shù)據(jù)也會(huì)不斷變化。
所緩存的GOP數(shù)據(jù)中可包括:距離當(dāng)前時(shí)刻最近的I幀數(shù)據(jù),以及,I幀數(shù)據(jù)之后到當(dāng)前時(shí)刻的所有幀數(shù)據(jù)。
這樣,當(dāng)有新的客戶端接入時(shí),可首先獲取距離當(dāng)前時(shí)刻最近的GOP數(shù)據(jù),并對(duì)其進(jìn)行修改,以便當(dāng)這些數(shù)據(jù)發(fā)送到客戶端時(shí),可以快進(jìn)播放。
所述修改可采用以下方式:依次對(duì)GOP數(shù)據(jù)中的各幀數(shù)據(jù)進(jìn)行時(shí)間戳壓縮。
比如,前一幀數(shù)據(jù)的時(shí)間戳為t,正常播放的情況下,下一幀數(shù)據(jù)的時(shí)間戳為t+33ms(如果是30fps的話),那么可將下一幀數(shù)據(jù)的時(shí)間戳修改為t+3.3ms,以實(shí)現(xiàn)時(shí)間戳壓縮。
將各幀數(shù)據(jù)的時(shí)間戳分別修改為多少可根據(jù)實(shí)際需要而定,需要的快進(jìn)速度越快,時(shí)間戳壓縮的就會(huì)越多。
由于GOP數(shù)據(jù)中的第一幀數(shù)據(jù)為I幀數(shù)據(jù),作為第一幀數(shù)據(jù),可不用對(duì)其進(jìn)行時(shí)間戳壓縮,而是對(duì)I幀數(shù)據(jù)之后的各幀數(shù)據(jù)依次進(jìn)行時(shí)間戳壓縮。
通過進(jìn)行時(shí)間戳壓縮,后續(xù)客戶端可以實(shí)現(xiàn)快進(jìn)播放,即加快GOP數(shù)據(jù)對(duì)應(yīng)的一段視頻的播放速度。
為了進(jìn)一步加快播放速度,還可以在進(jìn)行時(shí)間戳壓縮之前,先進(jìn)行非參考幀數(shù)據(jù)丟棄,即在獲取到距離當(dāng)前時(shí)刻最近的GOP數(shù)據(jù)之后,可首先丟棄其中的部分或全部的非參考幀數(shù)據(jù),然后再依次對(duì)GOP數(shù)據(jù)中剩余的各幀數(shù)據(jù)進(jìn)行時(shí)間戳壓縮。
具體丟棄哪些非參考幀數(shù)據(jù)可根據(jù)實(shí)際需要而定,比如,可丟棄部分B幀數(shù)據(jù)。
GOP數(shù)據(jù)中可包括三種類型的幀數(shù)據(jù),分別為I幀數(shù)據(jù)、P幀數(shù)據(jù)和B幀數(shù)據(jù)。
其中,I幀為關(guān)鍵幀,I幀畫面完整保留,解碼時(shí)只需要本幀數(shù)據(jù)即可完成。
P幀為前向預(yù)測(cè)幀,記錄的是這一幀和之前的一個(gè)關(guān)鍵幀或P幀的差別,解碼時(shí)需要用之前緩存的畫面疊加上本幀定義的差別,生成最終畫面。
B幀為雙向內(nèi)插幀,記錄的是本幀與前后幀的差別,換言之,要解碼B幀,不僅需要取得之前的緩存畫面,還要解碼之后的畫面,通過前后畫面與本幀數(shù)據(jù)的疊加取得最終的畫面。
在緩存GOP數(shù)據(jù)時(shí),可同時(shí)緩存GOP數(shù)據(jù)對(duì)應(yīng)的音頻數(shù)據(jù),即從I幀時(shí)刻開始的音頻數(shù)據(jù),由于快進(jìn)播放時(shí)有聲音的話效果會(huì)比較差,因此,當(dāng)緩存有GOP數(shù)據(jù)對(duì)應(yīng)的音頻數(shù)據(jù)時(shí),在修改GOP數(shù)據(jù)時(shí),通常會(huì)丟棄音頻數(shù)據(jù),所以也可以直接不緩存音頻數(shù)據(jù)。
服務(wù)器可將修改后的GOP數(shù)據(jù)發(fā)送給客戶端進(jìn)行播放,之后,當(dāng)獲取到新的音視頻數(shù)據(jù)時(shí),即當(dāng)有新的音視頻數(shù)據(jù)到達(dá)服務(wù)器中時(shí),服務(wù)器可將新的音視頻數(shù)據(jù)直接發(fā)送給客戶端進(jìn)行播放。
在實(shí)際應(yīng)用中,還可以針對(duì)每個(gè)客戶端,分別創(chuàng)建一個(gè)隊(duì)列,如當(dāng)有一個(gè)新的客戶端接入時(shí),則可為其創(chuàng)建一個(gè)隊(duì)列,當(dāng)GOP數(shù)據(jù)修改完畢后,可將修改后的GOP數(shù)據(jù)加入到隊(duì)列中,并將隊(duì)列中的數(shù)據(jù)發(fā)送給客戶端,同樣地,當(dāng)獲取到新的音視頻數(shù)據(jù)時(shí),可將新的音視頻數(shù)據(jù)加入到隊(duì)列中,并將隊(duì)列中的數(shù)據(jù)發(fā)送給客戶端。
圖2為本發(fā)明所述隊(duì)列的示意圖,如圖2所示,針對(duì)同一客戶端,將需要發(fā)送給客戶端的數(shù)據(jù)均加入到其對(duì)應(yīng)的隊(duì)列中,進(jìn)而將隊(duì)列中的數(shù)據(jù)發(fā)送給客戶端。
實(shí)施例二
基于上述介紹,圖3為本發(fā)明所述音視頻直播的實(shí)現(xiàn)方法較佳實(shí)施例的流程圖,如圖3所示,包括以下具體實(shí)現(xiàn)方式。
在31中,實(shí)時(shí)緩存距離當(dāng)前時(shí)刻最近的GOP數(shù)據(jù)。
在32中,當(dāng)有新的客戶端接入時(shí),為客戶端創(chuàng)建一個(gè)隊(duì)列。
在33中,對(duì)當(dāng)前所緩存的GOP數(shù)據(jù)進(jìn)行修改,包括:丟棄部分或全部非參考幀數(shù)據(jù)以及時(shí)間戳壓縮。
在34中,將修改后的GOP數(shù)據(jù)加入到隊(duì)列中,并將隊(duì)列中的數(shù)據(jù)發(fā)送給客戶端進(jìn)行播放。
在35中,當(dāng)獲取到新的音視頻數(shù)據(jù)時(shí),將新的音視頻數(shù)據(jù)加入到隊(duì)列中,并將隊(duì)列中的數(shù)據(jù)發(fā)送給客戶端進(jìn)行播放。
以上是關(guān)于方法實(shí)施例的介紹,以下通過裝置實(shí)施例,對(duì)本發(fā)明所述方案進(jìn)行進(jìn)一步說明。
實(shí)施例三
圖4為本發(fā)明所述服務(wù)器實(shí)施例的組成結(jié)構(gòu)示意圖,如圖4所示,包括:處理單元41和發(fā)送單元42。
處理單元41,用于當(dāng)有新的客戶端接入時(shí),按照快進(jìn)播放的原則,對(duì)所緩存的距離當(dāng)前時(shí)刻最近的GOP數(shù)據(jù)進(jìn)行修改,并將修改后的GOP數(shù)據(jù)發(fā)送給發(fā)送單元42。
發(fā)送單元42,用于將修改后的GOP數(shù)據(jù)發(fā)送給客戶端進(jìn)行播放。
其中,所述GOP數(shù)據(jù)中可包括:距離當(dāng)前時(shí)刻最近的I幀數(shù)據(jù),以及,I幀數(shù)據(jù)之后到當(dāng)前時(shí)刻的所有幀數(shù)據(jù)。
相應(yīng)地,處理單元41中可具體包括:緩存子單元411以及修改子單元412。
緩存子單元411,用于緩存GOP數(shù)據(jù),當(dāng)所述“當(dāng)前時(shí)刻”發(fā)生變化時(shí),對(duì)應(yīng)的所緩存的GOP數(shù)據(jù)也會(huì)發(fā)生變化。
修改子單元412,用于當(dāng)有新的客戶端接入時(shí),從緩存子單元411中獲取GOP數(shù)據(jù),并依次對(duì)GOP數(shù)據(jù)中的各幀數(shù)據(jù)進(jìn)行時(shí)間戳壓縮,將修改后的GOP數(shù)據(jù)發(fā)送給發(fā)送單元42。
通過進(jìn)行時(shí)間戳壓縮,后續(xù)客戶端可以實(shí)現(xiàn)快進(jìn)播放,即加快GOP數(shù)據(jù)對(duì)應(yīng)的一段視頻的播放速度。
為了進(jìn)一步加快播放速度,還可以在進(jìn)行時(shí)間戳壓縮之前,先進(jìn)行非參考幀數(shù)據(jù)丟棄,即在獲取到距離當(dāng)前時(shí)刻最近的GOP數(shù)據(jù)之后,可首先丟棄其中的部分或全部的非參考幀數(shù)據(jù),然后再依次對(duì)GOP數(shù)據(jù)中剩余的各幀數(shù)據(jù)進(jìn)行時(shí)間戳壓縮。
相應(yīng)地,修改子單元412可進(jìn)一步用于,在依次對(duì)GOP數(shù)據(jù)中的各幀數(shù)據(jù)進(jìn)行時(shí)間戳壓縮之前,丟棄GOP數(shù)據(jù)中的部分或全部非參考幀數(shù)據(jù),之后依次對(duì)GOP數(shù)據(jù)中剩余的各幀數(shù)據(jù)進(jìn)行時(shí)間戳壓縮。
具體丟棄哪些非參考幀數(shù)據(jù)可根據(jù)實(shí)際需要而定,比如,可丟棄部分B幀數(shù)據(jù)。
另外,如圖4所示,處理單元41中還可進(jìn)一步包括:獲取子單元413。
獲取子單元413,用于當(dāng)獲取到的新的音視頻數(shù)據(jù)時(shí),將新的音視頻數(shù)據(jù)發(fā)送給發(fā)送單元42。
發(fā)送單元42可為每個(gè)接入的客戶端創(chuàng)建一個(gè)隊(duì)列,并將接收到的修改后的GOP數(shù)據(jù)以及新的音視頻數(shù)據(jù)均加入到隊(duì)列中,進(jìn)而將隊(duì)列中的數(shù)據(jù)發(fā)送給客戶端。
圖4所示裝置實(shí)施例的具體工作流程請(qǐng)參照前述方法實(shí)施例中的相應(yīng)說明,此處不再贅述。
總之,采用本發(fā)明所述方案,可對(duì)所緩存的GOP數(shù)據(jù)進(jìn)行修改,以使得這些數(shù)據(jù)在到達(dá)客戶端時(shí)能夠快進(jìn)播放,從而盡可能地減少了端到端延遲,而且,通過緩存GOP數(shù)據(jù),減少了首屏打開時(shí)間,通過減少端到端延遲和首屏打開時(shí)間,提高了直播質(zhì)量。
而且,本發(fā)明所述方案中,采用的是服務(wù)器端的追趕播放技術(shù),完全兼容現(xiàn)有的視頻編解碼以及視頻傳輸協(xié)議,不需要對(duì)客戶端進(jìn)行改動(dòng)。
另外,本發(fā)明所述方案既適用于單向的音視頻直播,也適用于互動(dòng)音視頻直播等,適用的業(yè)務(wù)場(chǎng)景可包括:游戲直播、賽事直播、活動(dòng)直播、美女直播等,具有廣泛適用性。
在本發(fā)明所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用硬件加軟件功能單元的形式實(shí)現(xiàn)。
上述以軟件功能單元的形式實(shí)現(xiàn)的集成的單元,可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。上述軟件功能單元存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或處理器(processor)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤、移動(dòng)硬盤、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。