一種實時視頻傳輸裝置及方法
【技術領域】:
[0001] 本發(fā)明屬于實時視頻傳輸技術領域,具體涉及一種基于流媒體服務器實時視頻傳 輸裝置及方法,提高視頻傳輸?shù)膶崟r性。
【背景技術】:
[0002] 隨著無線通信技術的發(fā)展,以智能手機為代表的便攜式移動終端的高度普及為構 建面向移動環(huán)境的實時視頻傳輸提供了便利條件,在網(wǎng)絡視頻聊天、視頻會議和醫(yī)療示教 等對視頻傳輸實時性要求較高的領域,視頻傳輸?shù)难訒r成為衡量實時視頻傳輸系統(tǒng)性能的 關鍵指標;目前,以智能手機作為視頻采集設備的實時視頻傳輸系統(tǒng)有較大的延時,因為要 使流媒體服務器支持實時視頻傳輸,需要新建可以從內存中讀取數(shù)據(jù)的數(shù)據(jù)源代替原有的 數(shù)據(jù)源,新建的數(shù)據(jù)源從流媒體服務器緩沖區(qū)中讀取數(shù)據(jù),某一時間段內,采集端設備的數(shù) 據(jù)處理能力下降或者網(wǎng)絡出現(xiàn)擁塞時數(shù)據(jù)就不會被及時傳送到服務器接收緩存區(qū)中,導致 數(shù)據(jù)源讀取不到數(shù)據(jù),出現(xiàn)實時視頻傳輸延時,視頻播放中斷或出現(xiàn)馬賽克圖像,存在實時 視頻傳輸?shù)馁|量得不到有效保障的問題,例如live555開源項目默認的數(shù)據(jù)傳輸邏輯是基 于視頻文件點播的,要想實現(xiàn)實時的視頻傳輸,一方面要在緩沖區(qū)中對數(shù)據(jù)進行實時化處 理,另一方面要修改live555中的數(shù)據(jù)傳輸結構、抽象數(shù)據(jù)源和接口;現(xiàn)有技術中的重傳方 法不適用實時性要求較高的視頻傳輸系統(tǒng)。因此,研發(fā)一種適用于實時性要求較高場合的 實時視頻傳輸裝置和方法,實現(xiàn)視頻在實時傳輸中延時少,在播放中不中斷,很有社會價值 和應用前景。
【發(fā)明內容】
:
[0003] 本發(fā)明的目的在于克服現(xiàn)有技術存在的缺點,設計一種適用于實時性要求較高場 合的實時視頻傳輸裝置和方法,使視頻在實時傳輸中不延時,在播放中不中斷,提高視頻傳 輸?shù)姆€(wěn)定性和視頻播放的質量。
[0004] 為了實現(xiàn)上述目的,本發(fā)明所述實時視頻傳輸裝置的主體結構包括采集端、流媒 體服務器端和播放端,采集端將采集的視頻數(shù)據(jù)進行編碼后以UDP(用戶數(shù)據(jù)報協(xié)議)方 式將視頻數(shù)據(jù)傳輸?shù)搅髅襟w服務器端;流媒體服務器端由視頻數(shù)據(jù)接口、實時處理邏輯模 塊、數(shù)據(jù)緩沖區(qū)、重傳模塊、自適應調節(jié)模塊、數(shù)據(jù)源處理模塊、RTP(實時傳輸協(xié)議)編碼 模塊、會話管理模塊和RTSP(實時流傳輸協(xié)議)交互模塊按照電學原理連接組成,視頻數(shù) 據(jù)接口接收UDP視頻數(shù)據(jù)并將其保存到數(shù)據(jù)緩沖區(qū)中,實時處理邏輯模塊對接收到的UDP 視頻數(shù)據(jù)進行實時化處理,重傳模塊根據(jù)緩沖區(qū)是否接收到新的視頻數(shù)據(jù)判斷是否重傳視 頻數(shù)據(jù)以保持視頻數(shù)據(jù)的連續(xù)性,重傳模塊配合自適應調節(jié)模塊對采集端視頻數(shù)據(jù)發(fā)送速 率進行動態(tài)調節(jié)并創(chuàng)建對應于實時視頻數(shù)據(jù)的視頻Source(數(shù)據(jù)源),Source用于實時視 頻傳輸?shù)难b置中所有讀取實時視頻數(shù)據(jù)的操作,RTSP交互模塊與播放端交互,播放端發(fā)送 DESCRIBE(描述)請求后獲取到對應的流媒體信息的SDP(會話描述協(xié)議)描述信息并發(fā)送 給播放端,播放端發(fā)送SETUP(設置)請求后向會話管理模塊請求建立新的Session(會話) 和Sink(視頻數(shù)據(jù)消費對象),Sink用于實時視頻傳輸?shù)难b置中所有發(fā)送數(shù)據(jù)的操作,一個Session表示一個服務器與播放端的連接,同時建立一個Source與Sink之間的連接,播放 端發(fā)送PLAY(播放)請求后,RTP編碼模塊對視頻數(shù)據(jù)進行RTP打包,視頻數(shù)據(jù)通過Source 與Sink之間的連接被發(fā)送到播放端;播放端用于播放接收到的視頻數(shù)據(jù)。
[0005] 本發(fā)明涉及的實時處理邏輯模塊將從采集端傳到流媒體服務器端的視頻數(shù)據(jù)通 過H264編碼轉換成視頻數(shù)據(jù)流,H264視頻數(shù)據(jù)流的格式開頭為SPS(字符串處理系統(tǒng))和 PPS(視頻平臺),接著是編碼器的參數(shù)信息,然后是I幀,流媒體服務器端將H264視頻數(shù)據(jù) 流中的SPS、PPS和I幀截取并保存到緩沖區(qū)中,然后實時刷新緩沖區(qū),以保證數(shù)據(jù)的實時 性;沒有播放請求時,緩沖區(qū)內緩存幀數(shù)達到設定數(shù)目后緩沖區(qū)清空接收到的視頻數(shù)據(jù),有 播放請求時,緩沖區(qū)將接收到的最新的視頻數(shù)據(jù)傳給流媒體服務器端,以確保流媒體服務 器端傳給播放端的視頻數(shù)據(jù)是最新的,實現(xiàn)視頻數(shù)據(jù)的實時傳輸;涉及的緩沖區(qū)根據(jù)其保 存的Iframe_num(I幀的個數(shù))來判定是否刷新,當緩沖區(qū)內I幀數(shù)達到設定值時,緩沖區(qū) 刷新和清空接收到的視頻數(shù)據(jù);設定Iframe_num=N,表明緩沖區(qū)內有N個I幀,當有播放 請求時,播放端從第一個I幀開始播放,實際上最新的視頻數(shù)據(jù)是第N個I幀,這樣就會產(chǎn) 生N幀的延遲,Iframe_num設置過大,數(shù)據(jù)傳輸相對穩(wěn)定,但是時延會變大,滿足不了視頻 傳輸實時性的要求;如果Iframe_num設置過小,時延會小,但是視頻數(shù)據(jù)不能及時被傳到 流媒體服務器端,視頻播放出現(xiàn)中斷;將Iframe_num設為1,播放端請求播放時的延時是最 小的,為保證視頻數(shù)據(jù)傳輸?shù)姆€(wěn)定性,同時考慮緩沖區(qū)中視頻數(shù)據(jù)到達速率與讀取速率,將 Iframe_num重置為 3〇
[0006] 本發(fā)明涉及的實時處理邏輯模塊工作過程為:
[0007](1)、將采集端傳過來的視頻數(shù)據(jù)開頭部分的SPS、PPS和I幀截取并保存到緩沖區(qū) 中;
[0008](2)、在播放端請求播放前將Iframe_num設為1;
[0009] (3)、監(jiān)聽流媒體服務器端與播放端是否建立連接,如果沒有連接,刷新緩沖區(qū)并 繼續(xù)監(jiān)聽,如果已連接,將Iframe_num重置為3 ;
[0010] (4)、監(jiān)聽流媒體服務器端與播放端是否斷開連接,如果沒有斷開,保持Iframe_ num為3,如果斷開,將Iframe_num設定為1,以確保下一次實時視頻傳輸?shù)臅r延最小。 [0011] 本發(fā)明涉及的重傳模塊判斷流媒體服務器端的緩沖區(qū)接收到新視頻數(shù)據(jù)時數(shù)據(jù) 源正常讀取數(shù)據(jù)并進行實時傳送,重傳模塊判斷流媒體服務器端的緩沖區(qū)沒有接收到新視 頻數(shù)據(jù)時數(shù)據(jù)源中用于讀取視頻數(shù)據(jù)的指針往回偏移并重傳已經(jīng)保存的視頻數(shù)據(jù),以保持 視頻數(shù)據(jù)的連續(xù)性,防止視頻播放的中斷,如果流媒體服務器端的緩沖區(qū)一直沒有接收到 新視頻數(shù)據(jù),重傳模塊循環(huán)執(zhí)行偏移操作并記錄〇fTset_num(重傳次數(shù));涉及的自適應調 節(jié)模塊是以重傳模塊記錄的offset_num為輸入?yún)?shù),將采集端視頻碼流發(fā)送速率的調節(jié) 幅度設為AC,根據(jù)實際采用的視頻編碼格式選用相應的編碼選項和相關參數(shù),建立AC與 offset_num的對應關系,自適應調節(jié)模塊根據(jù)offset_num判斷視頻數(shù)據(jù)從采集端到流媒 體服務器端的傳輸狀況采用粗粒度判別方式對視頻數(shù)據(jù)傳輸做出實時調整,〇ffset_num設 定兩個閥值TL和TH,視頻數(shù)據(jù)傳輸狀況根據(jù)offset_num劃分為3個區(qū)域,區(qū)域statel表 示offset_num較小,視頻數(shù)據(jù)重傳對視頻的播放影響不大,不需要對采集端的發(fā)送速率進 行調整;區(qū)域state2表示offset_num對視頻的播放產(chǎn)生影響,出現(xiàn)部分花屏現(xiàn)象,需要對 采集端的發(fā)送速率進行調整;區(qū)域state3表示offset_num超過最高限值,表明采集端與流 媒體服務器端的連接出現(xiàn)故障,較長時間內沒有視頻數(shù)據(jù)傳送過來,需要斷開并重新建立 連接,實現(xiàn)對視頻數(shù)據(jù)傳輸狀況的一個粗粒度的判別和劃分,AC和offset_num的對應關 系算法表達式為:
[0012]
[0013] (1)、AC是根據(jù)offset_num劃分的3種數(shù)據(jù)傳輸狀況來計算的,Range(調節(jié)范 圍)根據(jù)實際需要預先設定權值a來實現(xiàn)不同的調節(jié)幅度,以滿足實際傳輸情況的需要,如 果AC過大會引起采集端發(fā)送視頻數(shù)據(jù)瞬時產(chǎn)生巨大波動,為了避免出現(xiàn)這種頻繁的波動 對AC進行平滑處理,用平滑處理后的AC對采集端發(fā)送視頻的發(fā)送速率進行調節(jié),平滑計 算式為:AC'=(l_t)XAC(n_l)+tAC(n) (0<t<1)
[0014] (2)、AC'是本次平滑處理后的調節(jié)幅度,AC(n-l)是上一次平滑處理后的調節(jié) 幅度,AC(n)是本次計算得到的調節(jié)幅度,當t增加時,AC(n)對結果的影響增大;當t減 小時,AC(n-l)對結果的影響增大。
[0015] 本發(fā)明涉及的自適應調節(jié)模塊的工作過程為:
[0016] (1)、根據(jù)重傳模塊記錄的offset_num來判別當前數(shù)據(jù)傳輸?shù)臓顩r;
[0017](2)、根據(jù)數(shù)據(jù)傳輸狀況計算AC,預先設定offset_num的最小值TL和最大值TH, 當offset_num小于TL時,表明視頻數(shù)據(jù)的重傳對播放的影響忽略不計,不需要的對采集端 視頻碼流的發(fā)送速率進行調節(jié),即AC= 0 ;當offset_num大于TL且小于TH,表明視頻數(shù) 據(jù)的重傳對視頻播放會產(chǎn)生影響,出現(xiàn)花屏現(xiàn)象,需要對采集端視頻碼流的發(fā)送速率進行 調節(jié),調節(jié)幅度AC=aXRange;當offset_num大于TH,表明視頻數(shù)據(jù)重傳對視頻播放產(chǎn) 生較大影響,出現(xiàn)卡屏現(xiàn)象,視頻數(shù)據(jù)的傳輸出現(xiàn)問題,需要中斷并重新