本發(fā)明涉及計算機(jī)互聯(lián)網(wǎng)的音視頻直播領(lǐng)域,尤其是涉及一種降低網(wǎng)絡(luò)直播延時的方法。
背景技術(shù):
隨著internet的飛速發(fā)展,網(wǎng)絡(luò)直播已經(jīng)從實驗階段走向了實用階段。網(wǎng)絡(luò)直播吸取和延續(xù)了互聯(lián)網(wǎng)的優(yōu)勢,利用視訊方式進(jìn)行網(wǎng)上現(xiàn)場直播,可以將產(chǎn)品展示、相關(guān)會議、背景介紹、方案測評、網(wǎng)上調(diào)查、對話訪談、在線培訓(xùn)等內(nèi)容現(xiàn)場發(fā)布到互聯(lián)網(wǎng)上,利用互聯(lián)網(wǎng)的直觀、快速,表現(xiàn)形式好、內(nèi)容豐富、交互性強(qiáng)、地域不受限制、受眾可劃分等特點,加強(qiáng)活動現(xiàn)場的推廣效果?,F(xiàn)場直播完成后,還可以隨時為讀者繼續(xù)提供重播、點播,有效延長了直播的時間和空間,發(fā)揮直播內(nèi)容的最大價值。
國內(nèi)“網(wǎng)絡(luò)直播”大致分兩類,一是在網(wǎng)上提供電視信號的觀看,例如各類體育比賽和文藝活動的直播,這類直播原理是將電視(模擬)信號通過采集,轉(zhuǎn)換為數(shù)字信號輸入電腦,實時上傳網(wǎng)站供人觀看,相當(dāng)于“網(wǎng)絡(luò)電視”;另一類則是真正意義上的“網(wǎng)絡(luò)直播”:在現(xiàn)場架設(shè)獨立的信號采集設(shè)備(音頻+視頻)導(dǎo)入導(dǎo)播端(導(dǎo)播設(shè)備或平臺),再通過網(wǎng)絡(luò)上傳至服務(wù)器,發(fā)布至網(wǎng)址供人觀看。這類網(wǎng)絡(luò)直播較前者的最大區(qū)別就在于直播的自主性:獨立可控的音視頻采集,完全不同于轉(zhuǎn)播電視信號的單一(況且觀看效果不如電視觀看的流暢)收看。同時可以為政務(wù)公開會議、群眾聽證會、法庭庭審直播、公務(wù)員考試培訓(xùn)、產(chǎn)品發(fā)布會、企業(yè)年會、行業(yè)年會、展會直播等電視媒體難以直播的應(yīng)用進(jìn)行網(wǎng)絡(luò)直播。
網(wǎng)絡(luò)直播技術(shù)是針對有現(xiàn)場直播需求的用戶,利用互聯(lián)網(wǎng)(或?qū)>W(wǎng))和先進(jìn)的多媒體通信技術(shù),通過在網(wǎng)上構(gòu)建一個系集音頻、視頻、桌面共享、文檔共享、互動環(huán)節(jié)為一體的多功能網(wǎng)絡(luò)直播平臺,企業(yè)或個人可以直接在線進(jìn)行語音、視頻、數(shù)據(jù)的全面交流與互動。
目前主流的直播形式是:主播端本地采集音視頻數(shù)據(jù),推流到媒體服務(wù)器,服務(wù)器轉(zhuǎn)碼并發(fā)分發(fā)數(shù)據(jù),觀看端接受數(shù)據(jù)進(jìn)行播放。
由于網(wǎng)絡(luò)環(huán)境的不同,觀看端接受數(shù)據(jù)的速度不一致,造成觀看端的實時性難以保障。服務(wù)端為了保障用戶觀看的流暢性,會在服務(wù)端緩存一定量的數(shù)據(jù)然后再一并分發(fā)給用戶。造成了網(wǎng)絡(luò)直播的延時普遍略高。目前正常情況下,網(wǎng)絡(luò)直播的延時都在3-8秒左右。在一些教學(xué)場景的直播應(yīng)用中,延時過高會造成教學(xué)過程不流程,教學(xué)體驗差的情況。所以,如何降低直播延時也是當(dāng)今眾多研發(fā)機(jī)構(gòu)面臨的一個難題。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是針對上述問題提供一種降低網(wǎng)絡(luò)直播延時的方法。
本發(fā)明的目的可以通過以下技術(shù)方案來實現(xiàn):
一種降低網(wǎng)絡(luò)直播延時的方法,用于降低使用rtmp及其擴(kuò)展協(xié)議的直播平臺的延時效果,所述方法包括下列步驟:
1)服務(wù)器分別與發(fā)布端和接收端連接,并向接收端發(fā)送拉流請求信號;
2)接收端接收到步驟1)中服務(wù)器發(fā)送的拉流請求信號后,播放視頻流并計算當(dāng)前網(wǎng)絡(luò)下的延時情況;
3)接收端根據(jù)步驟2)計算得到的延時情況,跳幀并開始播放。
所述步驟1)具體為:
11)服務(wù)器分別與發(fā)布端和接收端進(jìn)行可靠連接;
12)發(fā)布端向服務(wù)器發(fā)送流名戳,并向服務(wù)器推流;
13)服務(wù)器接收步驟12)中發(fā)布端的推流信號,并向所有可靠連接的接收端發(fā)送拉流請求信號。
所述可靠連接包括驗證并記錄接收端和發(fā)布端的登錄信息是否合法。
所述計算當(dāng)前網(wǎng)絡(luò)下的延時情況包括計算延時差或?qū)ふ易罱訒r播放點。
所述計算延時差具體為:
211)接收端開始嘗試播放視頻流,并記錄當(dāng)前的時間點a,并開始等待接收流播放事件;
212)接收端記錄下接收到流播放事件的時間點b;
213)接收端根據(jù)步驟211)記錄的時間點a和步驟212)記錄的時間點b,計算得到延時時間差c。
所述延時時間差c具體為:
c=|b-a|。
所述跳幀包括:以計算得到的延時時間差c作為時間跨度進(jìn)行跳幀。
所述尋找最近延時播放點具體為:
221)接收端直接播放視頻流,并進(jìn)行規(guī)定時長的跳幀;
222)接收端判斷跳幀是否可以成功完成,若是則返回步驟221),若否則表明跳幀失敗,接收服務(wù)器反饋的錯誤狀態(tài)事件;
223)接收端讀取錯誤狀態(tài)事件中的最后有效位置信息,即為最近延時播放點。
所述規(guī)定時長不小于20秒。
所述跳幀包括:直接跳幀至最近延時播放點。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果:
(1)本方法通過利用使用rtmp及其擴(kuò)展協(xié)議的直播平臺本身所具有的命令,可以在直播流程中直接計算當(dāng)前網(wǎng)絡(luò)下的延時情況,只需在原有的直播過程進(jìn)行改進(jìn)即可,簡單方便,無需額外增加過多工作量,便于實現(xiàn)。
(2)本方法實時計算當(dāng)前網(wǎng)絡(luò)下的延時情況,可以根據(jù)不同的網(wǎng)絡(luò)環(huán)境來調(diào)整跳幀的幅度,避免讓網(wǎng)絡(luò)環(huán)境較差的用戶雪上加霜,也不會影響網(wǎng)絡(luò)環(huán)境較好的用戶的直播體驗,應(yīng)用靈活,適用范圍廣。
(3)通過根據(jù)計算出的延時情況進(jìn)行跳幀,可以有效降低延時時間,提高直播的實時性和交互體驗,最理想的情況下可將延時降低到1秒以內(nèi),極其有利的保證了直播的實時效果。
(4)服務(wù)器在對發(fā)布端和接收端進(jìn)行連接時,均要驗證并記錄登錄信息,安全性能高。
(5)在尋找最近延時播放點時,每次均先跳幀不小于20秒,對于大部分的直播來說,一般不會達(dá)到20秒的延時,因而這種方法可以最為快速的找到最近的延時播放點,從而省略了計算的步驟,進(jìn)一步縮小延時的時間。
附圖說明
圖1為本發(fā)明的方法流程圖;
圖2為直播的流程示意圖。
具體實施方式
下面結(jié)合附圖和具體實施例對本發(fā)明進(jìn)行詳細(xì)說明。本實施例以本發(fā)明技術(shù)方案為前提進(jìn)行實施,給出了詳細(xì)的實施方式和具體的操作過程,但本發(fā)明的保護(hù)范圍不限于下述的實施例。
如圖1所示,本實施例提出了一種降低網(wǎng)絡(luò)直播延時的方法,用于降低使用rtmp及其擴(kuò)展協(xié)議的直播平臺的延時效果,該方法包括下列步驟:
1)服務(wù)器分別與發(fā)布端和接收端連接,并向接收端發(fā)送拉流請求信號:
11)服務(wù)器分別與發(fā)布端和接收端進(jìn)行可靠連接(包括驗證并記錄接收端和發(fā)布端的登錄信息是否合法);
12)發(fā)布端向服務(wù)器發(fā)送流名戳,并向服務(wù)器推流;
13)服務(wù)器接收步驟12)中發(fā)布端的推流信號,并向所有可靠連接的接收端發(fā)送拉流請求信號;
2)接收端接收到步驟1)中服務(wù)器發(fā)送的拉流請求信號后,播放視頻流并計算當(dāng)前網(wǎng)絡(luò)下的延時情況,具體包括計算延時差或?qū)ふ易罱訒r播放點,其中,計算延時差具體為:
211)接收端開始嘗試播放視頻流,并記錄當(dāng)前的時間點a,并開始等待接收流播放事件;
212)接收端記錄下接收到流播放事件的時間點b;
213)接收端根據(jù)步驟211)記錄的時間點a和步驟212)記錄的時間點b,計算得到延時時間差c:
c=|b-a|;
尋找最近延時播放點具體為:
221)接收端直接播放視頻流,并進(jìn)行規(guī)定時長(不小于20秒)的跳幀;
222)接收端判斷跳幀是否可以成功完成,若是則返回步驟221),若否則表明跳幀失敗,接收服務(wù)器反饋的錯誤狀態(tài)事件;
223)接收端讀取錯誤狀態(tài)事件中的最后有效位置信息,即為最近延時播放點
3)接收端根據(jù)步驟2)計算得到的延時情況,跳幀并開始播放,具體包括:以計算得到的延時時間差c作為時間跨度進(jìn)行跳幀或直接跳幀至最近延時播放點。
根據(jù)上述步驟進(jìn)行具體的直播,過程如圖2所示:
接收端和發(fā)布端使用flash的技術(shù)來進(jìn)行制作,flashplayer的版本要求12.0以上即可。服務(wù)器可使用red5來進(jìn)行制作。服務(wù)器主要功用是用來同步和轉(zhuǎn)發(fā)各種直播狀態(tài)和消息。
有兩種方案可以選擇。
方案一:
(1)接收端和發(fā)布端都需要去連接服務(wù)器。服務(wù)器會驗證并記錄登錄信息是否合法。
(2)發(fā)布端把流名戳發(fā)送至服務(wù)器,并開始推流。服務(wù)器收到推流信號之后,開始轉(zhuǎn)發(fā)消息到各個登錄成功的接收端,告訴接收端準(zhǔn)備拉流。
(3)接收端收到拉流信號后,接受端開始嘗試播放流,并記錄下時間點a。等待接收到netstream.play.start事件(流播放事件),記錄下時間點b,計算時間點a與時間點b的時間差c。時間差c越大,就代表延時越大,接收端的網(wǎng)絡(luò)情況越不穩(wěn)定。接收端使用seek命令進(jìn)行跳幀播放,時間跨度是剛才計算出來的時間差c。一般情況下來說,時間差在3-5秒左右,具體的結(jié)果根據(jù)不同的網(wǎng)絡(luò)環(huán)境,會有差異。
(4)接收端拋棄掉超時的內(nèi)容,直接獲取到更實時的流數(shù)據(jù),就能達(dá)到低延遲,高實時性的效果。
方案二:
此方案在方案一的基礎(chǔ)上,將第(3)點的步驟修改為:
接收端收到拉流信號后,直接播放流,并且使用seek命令,跳幀20秒。一般來說,是無法在那么短的時間里緩存20秒的流數(shù)據(jù)的。所以會接受到一個錯誤狀態(tài)事件netstream.seek.invalidtime。該事件對象的info.details屬性里會包含當(dāng)前可搜索的最后有效位置的信息。取到這個時間信息后,再次seek這個時間點。即可把延時的時間長度縮短到最小,確保最低的延時性。