一種實(shí)時(shí)媒體流傳輸方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開一種實(shí)時(shí)媒體流傳輸方法及系統(tǒng),其中,所述方法包括步驟:服務(wù)器端判斷需傳輸?shù)拿襟w流的數(shù)據(jù)幀是否是關(guān)鍵幀,當(dāng)判斷數(shù)據(jù)幀為關(guān)鍵幀時(shí),將所述數(shù)據(jù)幀拆分為數(shù)據(jù)包的同時(shí)在該數(shù)據(jù)幀中添加關(guān)鍵幀標(biāo)識(shí)成為關(guān)鍵幀包;將所述關(guān)鍵幀包發(fā)送至客戶端,并監(jiān)聽客戶端是否返回了接收到所述關(guān)鍵幀包的確認(rèn)信息;當(dāng)服務(wù)器端在預(yù)定時(shí)間內(nèi)沒有監(jiān)聽到客戶端返回的確認(rèn)信息時(shí),重新將所述關(guān)鍵幀包發(fā)送至客戶端。本發(fā)明有效的減少了傳輸過程中的丟包率,確保了關(guān)鍵幀的完整性,提高了媒體流在客戶端的解碼效果,同時(shí)不會(huì)造成過多的網(wǎng)絡(luò)負(fù)載負(fù)擔(dān)。
【專利說明】一種實(shí)時(shí)媒體流傳輸方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息傳輸領(lǐng)域,尤其涉及一種實(shí)時(shí)媒體流傳輸方法及系統(tǒng)。
【背景技術(shù)】
[0002]在目前的多媒體應(yīng)用中,媒體流的實(shí)時(shí)傳輸?shù)玫皆絹碓綇V泛的應(yīng)用,比如視頻會(huì)議,同屏顯示等等。由于實(shí)時(shí)媒體流傳輸具有帶寬占有率高,丟包率低,實(shí)時(shí)性高的特點(diǎn),因而對(duì)于網(wǎng)絡(luò)環(huán)境的要求也相對(duì)較高,在網(wǎng)絡(luò)環(huán)境不穩(wěn)定的情況下,用戶體驗(yàn)往往就會(huì)比較差。
[0003]現(xiàn)有的媒體流實(shí)時(shí)傳輸流程一般是:1、服務(wù)器端:原始數(shù)據(jù)采集,編碼,數(shù)據(jù)發(fā)送;2、客戶端:數(shù)據(jù)接收,解碼,及顯示。在傳輸過程中,為了確保傳輸?shù)膶?shí)時(shí)性,通常使用RTP (Real-time Transport Protocol,實(shí)時(shí)傳輸協(xié)議)+UDP (User Datagram Protocol,用戶數(shù)據(jù)報(bào)協(xié)議)的方法來實(shí)現(xiàn),RTP協(xié)議用于實(shí)時(shí)數(shù)據(jù)的端到端傳輸,RTP 一般運(yùn)行在UDP之上,RTP從應(yīng)用層接受媒體流,組裝成RTP包,然后再使用UDP協(xié)議發(fā)送。
[0004]但在使用RTP+UDP協(xié)議進(jìn)行實(shí)時(shí)媒體流傳輸時(shí),由于UDP協(xié)議提供的是面向事務(wù)的簡(jiǎn)單不可靠信息傳送服務(wù),在傳輸數(shù)據(jù)的時(shí)候,會(huì)有數(shù)據(jù)包丟失的現(xiàn)象,例如傳輸視頻流時(shí),客戶端在接收到數(shù)據(jù)后進(jìn)行解碼,丟包就會(huì)造成視頻幀的不完整性,解碼后圖像就會(huì)花屏。
[0005]因此,現(xiàn)有技術(shù)還有待于改進(jìn)和發(fā)展。
【發(fā)明內(nèi)容】
[0006]鑒于上述現(xiàn)有技術(shù)的不足,本發(fā)明的目的在于提供一種實(shí)時(shí)媒體流傳輸方法及系統(tǒng),旨在解決現(xiàn)有實(shí)時(shí)媒體流傳輸過程中丟包率高、影響媒體流傳輸質(zhì)量的問題。
[0007]本發(fā)明的技術(shù)方案如下:
一種實(shí)時(shí)媒體流傳輸方法,其中,包括步驟:
A、服務(wù)器端判斷需傳輸?shù)拿襟w流的數(shù)據(jù)幀是否是關(guān)鍵幀,當(dāng)判斷數(shù)據(jù)幀為關(guān)鍵幀時(shí),將所述數(shù)據(jù)幀拆分為數(shù)據(jù)包的同時(shí)在該數(shù)據(jù)幀中添加關(guān)鍵幀標(biāo)識(shí)成為關(guān)鍵幀包;
B、將所述關(guān)鍵幀包發(fā)送至客戶端,并監(jiān)聽客戶端是否返回了接收到所述關(guān)鍵幀包的確認(rèn)信息;
C、當(dāng)服務(wù)器端在預(yù)定時(shí)間內(nèi)沒有監(jiān)聽到客戶端返回的確認(rèn)信息時(shí),重新將所述關(guān)鍵幀包發(fā)送至客戶端。
[0008]所述實(shí)時(shí)媒體流傳輸方法,其中,所述步驟B具體包括:
B1、服務(wù)器端與客戶端建立監(jiān)聽;
B2、獲取所述關(guān)鍵幀包,并將所述關(guān)鍵幀包發(fā)送至客戶端;
B3、監(jiān)聽所述客戶端是否返回了接收到所述關(guān)鍵幀包的確認(rèn)信息。
[0009]所述實(shí)時(shí)媒體流傳輸方法,其中,所述步驟B中還包括:
Cl、客戶端判斷接收到的數(shù)據(jù)包是否為關(guān)鍵幀包; C2、當(dāng)所述數(shù)據(jù)包是關(guān)鍵幀包時(shí),提取所述關(guān)鍵幀包的數(shù)據(jù)包ID ;
C3、將所述數(shù)據(jù)包ID與客戶端的關(guān)鍵幀包ID列表匹配,查找所述關(guān)鍵幀包ID列表是否含有該數(shù)據(jù)包ID ;
C4、當(dāng)所述關(guān)鍵幀包ID列表沒有該數(shù)據(jù)包ID時(shí),將該數(shù)據(jù)包ID添加至所述關(guān)鍵幀包ID列表,并將含有該數(shù)據(jù)包ID的確認(rèn)信息發(fā)送至服務(wù)器端。
[0010]所述實(shí)時(shí)媒體流傳輸方法,其中,所述步驟步驟C4還包括:
當(dāng)所述關(guān)鍵幀包ID列表中含有該數(shù)據(jù)包ID時(shí),則將客戶端接收到的關(guān)鍵幀包丟棄。
[0011]所述實(shí)時(shí)媒體流傳輸方法,其特征在于,所述方法還包括步驟:
D、當(dāng)服務(wù)器端在預(yù)定時(shí)間內(nèi)監(jiān)聽到客戶端返回的確認(rèn)信息時(shí),判斷該確認(rèn)信息中的數(shù)據(jù)包ID與最近發(fā)送的關(guān)鍵幀包的數(shù)據(jù)包ID是否相同,當(dāng)是時(shí),返回步驟A,否則重新發(fā)送該關(guān)鍵幀包。
[0012]所述實(shí)時(shí)媒體流傳輸方法,其中,當(dāng)所述媒體流的編碼方式為264編碼時(shí),所述步驟A中判斷數(shù)據(jù)幀是否為關(guān)鍵幀的步驟具體包括:
Al、獲取一幀264數(shù)據(jù),查找所述264數(shù)據(jù)的幀開始標(biāo)記;
A2、查找到幀開始標(biāo)記后,開始讀取該幀開始標(biāo)記之后的第5個(gè)字節(jié),若該字節(jié)是6,則轉(zhuǎn)入步驟A3,若該字節(jié)是5,則判斷該數(shù)據(jù)幀為關(guān)鍵幀,若該字節(jié)是5和6以外的值,則判斷該數(shù)據(jù)幀不是關(guān)鍵幀;
A3、獲取所述數(shù)據(jù)幀中的恢復(fù)幀計(jì)數(shù)的值,若該值大于0,則判斷是關(guān)鍵幀,否則判斷不是關(guān)鍵中貞。
[0013]一種實(shí)時(shí)媒體流傳輸系統(tǒng),包括服務(wù)器端和客戶端,其中,所述服務(wù)器端包括關(guān)鍵幀包生成模塊、關(guān)鍵幀包發(fā)送模塊以及關(guān)鍵幀包重傳模塊;
所述關(guān)鍵幀包生成模塊,用于判斷需傳輸?shù)拿襟w流的數(shù)據(jù)幀是否是關(guān)鍵幀,當(dāng)判斷數(shù)據(jù)幀為關(guān)鍵幀時(shí),將所述數(shù)據(jù)幀拆分為數(shù)據(jù)包的同時(shí)在該數(shù)據(jù)幀中添加關(guān)鍵幀標(biāo)識(shí)成為關(guān)鍵幀包;
所述關(guān)鍵幀包發(fā)送模塊,用于將所述關(guān)鍵幀包發(fā)送至客戶端,并監(jiān)聽客戶端是否返回了接收到所述關(guān)鍵幀包的確認(rèn)信息;
所述關(guān)鍵幀包重傳模塊,用于在預(yù)定時(shí)間內(nèi)沒有監(jiān)聽到客戶端返回的確認(rèn)信息時(shí),重新將所述關(guān)鍵幀包發(fā)送至客戶端。
[0014]所述實(shí)時(shí)媒體流傳輸系統(tǒng),其中,所述關(guān)鍵幀包發(fā)送模塊包括:
監(jiān)聽建立單元,用于與客戶端建立監(jiān)聽;
關(guān)鍵幀包發(fā)送單元,用于獲取所述關(guān)鍵幀包,并將所述關(guān)鍵幀包發(fā)送至客戶端;
確認(rèn)信息監(jiān)聽單元,用于監(jiān)聽所述客戶端是否返回了接收到所述關(guān)鍵幀包的確認(rèn)信
肩、O
[0015]所述實(shí)時(shí)媒體流傳輸系統(tǒng),其中,所述客戶端包括:
關(guān)鍵幀包判斷模塊,用于判斷接收到的數(shù)據(jù)包是否為關(guān)鍵幀包;
數(shù)據(jù)包ID提取模塊,用于當(dāng)所述數(shù)據(jù)包是關(guān)鍵幀包時(shí),提取所述關(guān)鍵幀包的數(shù)據(jù)包
ID ;
數(shù)據(jù)包ID匹配模塊,用于將所述數(shù)據(jù)包ID與客戶端的關(guān)鍵幀包ID列表匹配,查找所述關(guān)鍵幀包ID列表是否含有該數(shù)據(jù)包ID ; 確認(rèn)信息發(fā)送模塊,用于當(dāng)所述關(guān)鍵幀包ID列表沒有該數(shù)據(jù)包ID時(shí),將該數(shù)據(jù)包ID添加至所述關(guān)鍵幀包ID列表,并將含有該數(shù)據(jù)包ID的確認(rèn)信息發(fā)送至服務(wù)器端。
[0016]所述實(shí)時(shí)媒體流傳輸系統(tǒng),其中,所述客戶端還包括:
關(guān)鍵幀包丟棄模塊,用于當(dāng)所述關(guān)鍵幀包ID列表中含有該數(shù)據(jù)包ID時(shí),則將客戶端接收到的關(guān)鍵幀包丟棄。
[0017]有益效果:本發(fā)明通過在需傳輸?shù)拿襟w流的關(guān)鍵幀拆分為RTP包的時(shí)候,添加關(guān)鍵幀標(biāo)識(shí),并針對(duì)具有關(guān)鍵幀標(biāo)識(shí)的RTP包進(jìn)行重傳確認(rèn)機(jī)制,有效的減少了傳輸過程中的丟包率,確保了關(guān)鍵幀的完整性,提高了媒體流在客戶端的解碼效果,并且由于本發(fā)明只對(duì)關(guān)鍵幀進(jìn)行重傳確認(rèn),而非對(duì)整個(gè)傳輸過程加入重傳確認(rèn)機(jī)制,因而減少了對(duì)網(wǎng)絡(luò)負(fù)載開銷的影響,對(duì)媒體流實(shí)時(shí)傳輸?shù)挠绊懸埠苄?,不?huì)造成過多的網(wǎng)絡(luò)負(fù)載負(fù)擔(dān)。
【專利附圖】
【附圖說明】
[0018]圖1為本發(fā)明實(shí)時(shí)媒體流傳輸方法較佳實(shí)施例的流程圖。
[0019]圖2為本發(fā)明關(guān)鍵幀包的結(jié)構(gòu)示意圖。
[0020]圖3為本發(fā)明的方法中服務(wù)器端發(fā)送關(guān)鍵幀包以及監(jiān)聽確認(rèn)信息的流程示意圖。
[0021]圖4為本發(fā)明的方法中客戶端接收到數(shù)據(jù)包后的處理流程圖。
[0022]圖5為本發(fā)明的方法中判斷關(guān)鍵幀的方法流程圖。
[0023]圖6為本發(fā)明實(shí)時(shí)媒體流傳輸系統(tǒng)較佳實(shí)施例的結(jié)構(gòu)框圖。
[0024]圖7為圖6所示系統(tǒng)中關(guān)鍵幀包發(fā)送模塊具體的結(jié)構(gòu)框圖。
[0025]圖8為圖6所示系統(tǒng)中客戶端具體的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0026]本發(fā)明提供實(shí)時(shí)媒體流傳輸方法及系統(tǒng),為使本發(fā)明的目的、技術(shù)方案及效果更加清楚、明確,以下對(duì)本發(fā)明進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0027]請(qǐng)參閱圖1,圖1為本發(fā)明實(shí)時(shí)媒體流傳輸方法較佳實(shí)施例的流程圖,如圖所示,其包括步驟:
5101、服務(wù)器端判斷需傳輸?shù)拿襟w流的數(shù)據(jù)幀是否是關(guān)鍵幀,當(dāng)判斷數(shù)據(jù)幀為關(guān)鍵幀時(shí),將所述數(shù)據(jù)幀拆分為數(shù)據(jù)包的同時(shí)在該數(shù)據(jù)幀中添加關(guān)鍵幀標(biāo)識(shí)成為關(guān)鍵幀包;
5102、將所述關(guān)鍵幀包發(fā)送至客戶端,并監(jiān)聽客戶端是否返回了接收到所述關(guān)鍵幀包的確認(rèn)信息;
5103、當(dāng)服務(wù)器端在預(yù)定時(shí)間內(nèi)沒有監(jiān)聽到客戶端返回的確認(rèn)信息時(shí),重新將所述關(guān)鍵幀包發(fā)送至客戶端。
[0028]S104、當(dāng)服務(wù)器端在預(yù)定時(shí)間內(nèi)監(jiān)聽到客戶端返回的確認(rèn)信息時(shí),判斷該確認(rèn)信息中的數(shù)據(jù)包ID與最近發(fā)送的關(guān)鍵幀包的數(shù)據(jù)包ID是否相同,當(dāng)是時(shí),返回步驟S101,否則重新發(fā)送該關(guān)鍵幀包。
[0029]在步驟SlOl中,服務(wù)器端首先需要傳輸?shù)拿襟w流的數(shù)據(jù)幀是否是關(guān)鍵幀,針對(duì)不同的情況進(jìn)行不同的處理,對(duì)于如何判斷數(shù)據(jù)幀是否是關(guān)鍵幀在后文中會(huì)有詳述。如果判斷數(shù)據(jù)幀是關(guān)鍵幀,則在將數(shù)據(jù)幀拆分為數(shù)據(jù)包的時(shí)候,在該數(shù)據(jù)幀中添加關(guān)鍵幀標(biāo)識(shí),例如在拆分后的RTP包(本發(fā)明中的數(shù)據(jù)包即指RTP包,即通過RTP協(xié)議進(jìn)行封裝的數(shù)據(jù)包)的DATA前添加6個(gè)字節(jié)的“IFRAME”標(biāo)識(shí),如圖2所示。需注意的是,從關(guān)鍵幀拆分出來的每一個(gè)RTP包的DATA前都需要添加關(guān)鍵幀標(biāo)識(shí),例如前述的6個(gè)字節(jié)的“IFRAME”標(biāo)識(shí),以保證關(guān)鍵幀都能進(jìn)行丟包重傳。添加了關(guān)鍵幀標(biāo)識(shí)后,在每一數(shù)據(jù)包上加上UDP包頭,以通過UDP協(xié)議發(fā)送數(shù)據(jù)幀。
[0030]而在判斷數(shù)據(jù)幀不是關(guān)鍵幀時(shí),則可直接將該數(shù)據(jù)幀拆分為數(shù)據(jù)包,并加上UDP包頭,通過UDP協(xié)議發(fā)送該數(shù)據(jù)幀,不同的是,沒有在數(shù)據(jù)幀中添加關(guān)鍵幀標(biāo)識(shí),所以也不會(huì)在丟包的時(shí)候進(jìn)行重傳。
[0031]在步驟S102中,在將含有關(guān)鍵幀標(biāo)識(shí)的關(guān)鍵幀包發(fā)送至客戶端的時(shí)候,監(jiān)聽客戶端是否收到該關(guān)鍵幀包,如圖3所示,步驟S102具體可細(xì)化為以下步驟:
S201、服務(wù)器端與客戶端建立監(jiān)聽;例如建立socket tcp (套接字傳輸)監(jiān)聽。
[0032]S202、獲取所述關(guān)鍵幀包,并將所述關(guān)鍵幀包發(fā)送至客戶端;此過程中還需要獲取該關(guān)鍵幀包的數(shù)據(jù)包ID,每一關(guān)鍵幀包都具有一個(gè)數(shù)據(jù)包ID,獲取該數(shù)據(jù)包ID有利于服務(wù)器端判斷接下來收到的確認(rèn)信息中的數(shù)據(jù)包ID與最近發(fā)送過去的關(guān)鍵幀包的數(shù)據(jù)包ID是否相同,以保證每一關(guān)鍵幀包都發(fā)送成功。
[0033]S203、監(jiān)聽所述客戶端是否返回了接收到所述關(guān)鍵幀包的確認(rèn)信息。
[0034]對(duì)于服務(wù)器端而言,只需監(jiān)聽客戶端是否將確認(rèn)信息發(fā)送回來即可,對(duì)于客戶端而言,則需要接受該關(guān)鍵幀包,然后判斷是否是含有關(guān)鍵幀標(biāo)識(shí)的關(guān)鍵幀包以及去除關(guān)鍵幀標(biāo)識(shí)等等一系列的處理,這在后文中會(huì)有詳細(xì)描述。
[0035]在步驟S103中,當(dāng)服務(wù)器端在預(yù)定時(shí)間(例如5ms)內(nèi)沒有監(jiān)聽到客戶端返回的確認(rèn)信息時(shí),則需要重新將所述關(guān)鍵幀包發(fā)送至客戶端,此步驟即為關(guān)鍵幀重傳的步驟,以保證關(guān)鍵幀都能發(fā)送到客戶端,避免關(guān)鍵幀丟包影響媒體流輸出的質(zhì)量。
[0036]在步驟S104中,即使服務(wù)器端在預(yù)定時(shí)間內(nèi)監(jiān)聽到了客戶端返回的確認(rèn)信息,并不能保證客戶端已接收到服務(wù)器最近發(fā)送的關(guān)鍵幀包,因?yàn)樵撽P(guān)鍵幀包可能是由于網(wǎng)絡(luò)延時(shí)由服務(wù)器端上一次或者上上一次發(fā)送給客戶端的,不是針對(duì)服務(wù)器端最近一次發(fā)送的關(guān)鍵幀包的確認(rèn)信息,所以還需要判斷接收到的確認(rèn)信息中的數(shù)據(jù)包ID與最近發(fā)送的關(guān)鍵幀包中的數(shù)據(jù)包ID是否相同,如果相同,則可以確定客戶端已經(jīng)接收到最近發(fā)送的關(guān)鍵幀包,并準(zhǔn)備發(fā)送下一關(guān)鍵幀包,否則需要重新將該關(guān)鍵幀包發(fā)送給客戶端,確??蛻舳四芙拥矫恳粋€(gè)含有關(guān)鍵幀標(biāo)識(shí)的關(guān)鍵幀包。而如果不判斷確認(rèn)信息中的數(shù)據(jù)包ID與服務(wù)器端最近發(fā)送的數(shù)據(jù)包ID是否相同,有可能會(huì)造成服務(wù)器端誤以為未發(fā)送成功的數(shù)據(jù)包發(fā)送成功,影響媒體流的輸出效果。
[0037]在客戶端與服務(wù)器端建立連接之后,就可以接收來自服務(wù)器端發(fā)送的數(shù)據(jù)包,此時(shí)客戶端還會(huì)初始化關(guān)鍵幀包ID列表,客戶端接收到一個(gè)新的關(guān)鍵幀包時(shí),都會(huì)將該關(guān)鍵幀包的數(shù)據(jù)包ID添加至關(guān)鍵幀包ID列表中,以便判斷接下來接收到的關(guān)鍵幀包是否已經(jīng)接收到過,避免由于網(wǎng)絡(luò)延時(shí)而進(jìn)行重復(fù)的發(fā)送,保證數(shù)據(jù)傳輸?shù)奈ㄒ恍浴?br>
[0038]上述過程是對(duì)于服務(wù)器端而言,對(duì)于客戶端接收到數(shù)據(jù)包的處理過程,即在前述的步驟S102中服務(wù)器端將數(shù)據(jù)包發(fā)送至客戶端后,如圖4所示,具體包括步驟:
S301、客戶端首先判斷從服務(wù)器端接收到的數(shù)據(jù)包是否是關(guān)鍵幀包,具體是通過判斷該數(shù)據(jù)包是否含有關(guān)鍵幀標(biāo)識(shí)來進(jìn)行判斷的,如果判斷該數(shù)據(jù)包不是關(guān)鍵幀包,則可直接對(duì)該數(shù)據(jù)包進(jìn)行解析即進(jìn)入到步驟S305,重組為數(shù)據(jù)幀,并進(jìn)行解碼輸出至顯示設(shè)備,此為現(xiàn)有技術(shù),故不再贅述。
[0039]S302、如果判斷到該數(shù)據(jù)包是關(guān)鍵幀包,則需要解析該關(guān)鍵幀包的數(shù)據(jù)包ID,具體可通過解析該關(guān)鍵幀包的RTP包頭獲取得到(在發(fā)送前已經(jīng)添加);
5303、提取到數(shù)據(jù)包ID后,判斷將該關(guān)鍵幀包的數(shù)據(jù)包ID與關(guān)鍵幀包ID列表進(jìn)行匹配,查找在關(guān)鍵幀包ID列表中是否已經(jīng)含有該數(shù)據(jù)包ID ;
5304、如果該關(guān)鍵幀包ID列表中沒有該數(shù)據(jù)包ID,則需要將該數(shù)據(jù)包ID添加至關(guān)鍵幀包ID列表中,并且向服務(wù)器端發(fā)送確認(rèn)信息,在該確認(rèn)信息中也含有相應(yīng)的數(shù)據(jù)包ID,從而使服務(wù)器端在接收到確認(rèn)信息后,還可以進(jìn)一步判斷該確認(rèn)信息中的數(shù)據(jù)包ID與最近發(fā)送的數(shù)據(jù)包的數(shù)據(jù)包ID是否對(duì)應(yīng),在該確認(rèn)信息中,還含有六個(gè)字節(jié)的確認(rèn)標(biāo)識(shí)信息,例如 RECVOK。
[0040]當(dāng)然,如果該關(guān)鍵幀包ID列表中已有含有該數(shù)據(jù)包ID,則說明客戶端已經(jīng)接收到了該關(guān)鍵幀包,無需進(jìn)行重復(fù)發(fā)送,可直接將該關(guān)鍵幀包丟棄即進(jìn)入到步驟S306。
[0041]在發(fā)送完確認(rèn)信息后,客戶端即可將接收到的關(guān)鍵幀包中的關(guān)鍵幀標(biāo)識(shí)去掉,并將去掉標(biāo)識(shí)后的關(guān)鍵幀包中的數(shù)據(jù)進(jìn)行解析,重組為媒體流數(shù)據(jù),然后進(jìn)行解碼,并將解碼后的數(shù)據(jù)輸出。
[0042]通過上述過程即可實(shí)現(xiàn)在關(guān)鍵幀包丟失的情況下丟包重傳的目的,由于加入了關(guān)鍵幀包的傳輸確認(rèn)機(jī)制,本發(fā)明確保了媒體流傳輸過程中關(guān)鍵幀的傳輸完整性,即降低了丟包率,又提高了客戶端的輸出效果,并且只是對(duì)關(guān)鍵幀進(jìn)行丟包重傳,對(duì)網(wǎng)絡(luò)負(fù)載也不會(huì)增加過多的負(fù)擔(dān)。
[0043]本發(fā)明中一個(gè)重要的步驟是判斷數(shù)據(jù)幀是否為關(guān)鍵幀,本發(fā)明對(duì)如何判斷數(shù)據(jù)幀是否是關(guān)鍵幀也進(jìn)行詳細(xì)的說明,由于不同編碼方式關(guān)鍵幀的判斷方法不同,而264編碼是實(shí)時(shí)媒體流傳輸?shù)囊环N常用格式,所以,此處以該編碼方式為例說明判斷數(shù)據(jù)幀是否是關(guān)鍵幀的方法,如圖5所示,其包括步驟:
5401、獲取一巾貞264數(shù)據(jù)后,讀取該264數(shù)據(jù)查找巾貞開始標(biāo)記start_code,該start_code 一般為 00 00 00 01 ;
5402、查找到幀開始標(biāo)記后,開始讀取該幀開始標(biāo)記之后的第5個(gè)字節(jié)nalu_type(NAL(網(wǎng)絡(luò)提取層)是以Nal unit為單元來支持編碼數(shù)據(jù)在基于包交換技術(shù)網(wǎng)絡(luò)中傳輸?shù)模籒al中包含標(biāo)頭(Header),此Header內(nèi)又有許多資訊,包括該Nal的類型,nalu_type就是對(duì)Nal的類型的說明),如果該字節(jié)是6,則進(jìn)入步驟S403,如果該字節(jié)是5,則說明該數(shù)據(jù)幀為關(guān)鍵幀,即轉(zhuǎn)入步驟S404,而如果是5和6以外的值,則說明該數(shù)據(jù)幀不是關(guān)鍵幀,即轉(zhuǎn)入步驟 S405 ;
5403、獲取Recoery_Frame_count的值;如果第5個(gè)字節(jié)nalu_type是6,則說明該數(shù)據(jù)幀是SEI (補(bǔ)充增強(qiáng)信息,可以存放影片簡(jiǎn)介,版權(quán)信息、使用者自行定義的資料等),通過SEI中包含的信息獲取Recoery_Frame_count (恢復(fù)巾貞計(jì)數(shù),關(guān)鍵巾貞中該值大于O,可作為判斷關(guān)鍵幀的依據(jù))的值,如果該值大于0,則說明是關(guān)鍵幀,即轉(zhuǎn)入步驟S404,反之,則說明不是關(guān)鍵幀,即轉(zhuǎn)入步驟S405 ;
5404、判斷該數(shù)據(jù)幀是關(guān)鍵幀;
5405、判斷該數(shù)據(jù)幀不是關(guān)鍵幀。[0044]基于上述方法,本發(fā)明還提供一種實(shí)時(shí)媒體流傳輸系統(tǒng),如圖6所示,其包括服務(wù)器端100和客戶端200,所述服務(wù)器端100包括關(guān)鍵幀包生成模塊110、關(guān)鍵幀包發(fā)送模塊120以及關(guān)鍵幀包重傳模塊130 ;
所述關(guān)鍵幀包生成模塊110,用于判斷需傳輸?shù)拿襟w流的數(shù)據(jù)幀是否是關(guān)鍵幀,當(dāng)判斷數(shù)據(jù)幀為關(guān)鍵幀時(shí),將所述數(shù)據(jù)幀拆分為數(shù)據(jù)包的同時(shí)在該數(shù)據(jù)幀中添加關(guān)鍵幀標(biāo)識(shí)成為關(guān)鍵幀包;
所述關(guān)鍵幀包發(fā)送模塊120,用于將所述關(guān)鍵幀包發(fā)送至客戶端,并監(jiān)聽客戶端是否返回了接收到所述關(guān)鍵幀包的確認(rèn)信息;
所述關(guān)鍵幀包重傳模塊130,用于在預(yù)定時(shí)間內(nèi)沒有監(jiān)聽到客戶端返回的確認(rèn)信息時(shí),重新將所述關(guān)鍵幀包發(fā)送至客戶端。關(guān)于上述功能模塊的作用在前面的方法中已有詳述,故不再贅述。
[0045]進(jìn)一步,如圖7所示,所述關(guān)鍵巾貞包發(fā)送模塊120包括:
監(jiān)聽建立單元121,用于與客戶端建立監(jiān)聽;
關(guān)鍵幀包發(fā)送單元122,用于獲取所述關(guān)鍵幀包,并將所述關(guān)鍵幀包發(fā)送至客戶端;確認(rèn)信息監(jiān)聽單元123,用于監(jiān)聽所述客戶端是否返回了接收到所述關(guān)鍵幀包的確認(rèn)信息。關(guān)于上述功能模塊的作用在前面的方法中已有詳述,故不再贅述。
[0046]進(jìn)一步,如圖8所示,所述客戶端200包括:
關(guān)鍵幀包判斷模塊210,用于判斷接收到的數(shù)據(jù)包是否為關(guān)鍵幀包;
數(shù)據(jù)包ID提取模塊220,用于當(dāng)所述數(shù)據(jù)包是關(guān)鍵幀包時(shí),提取所述關(guān)鍵幀包的數(shù)據(jù)包ID ;
數(shù)據(jù)包ID匹配模塊230,用于將所述數(shù)據(jù)包ID與客戶端的關(guān)鍵幀包ID列表匹配,查找所述關(guān)鍵幀包ID列表是否含有該數(shù)據(jù)包ID ;
確認(rèn)信息發(fā)送模塊240,用于當(dāng)所述關(guān)鍵幀包ID列表沒有該數(shù)據(jù)包ID時(shí),將該數(shù)據(jù)包ID添加至所述關(guān)鍵幀包ID列表,并將含有該數(shù)據(jù)包ID的確認(rèn)信息發(fā)送至服務(wù)器端。關(guān)于上述功能模塊的作用在前面的方法中已有詳述,故不再贅述。
[0047]進(jìn)一步,所述客戶端200還包括:
關(guān)鍵幀包丟棄模塊,用于當(dāng)所述關(guān)鍵幀包ID列表中含有該數(shù)據(jù)包ID時(shí),則將客戶端接收到的關(guān)鍵幀包丟棄。
[0048]綜上所述,本發(fā)明通過在需傳輸?shù)拿襟w流的關(guān)鍵幀拆分為RTP包的時(shí)候,添加關(guān)鍵幀標(biāo)識(shí),并針對(duì)具有關(guān)鍵幀標(biāo)識(shí)的RTP包進(jìn)行重傳確認(rèn)機(jī)制,有效的減少了傳輸過程中的丟包率,確保了關(guān)鍵幀的完整性,提高了媒體流在客戶端的解碼效果,并且由于本發(fā)明只對(duì)關(guān)鍵幀進(jìn)行重傳確認(rèn),而非對(duì)整個(gè)傳輸過程加入重傳確認(rèn)機(jī)制,因而減少了對(duì)網(wǎng)絡(luò)負(fù)載開銷的影響,對(duì)媒體流實(shí)時(shí)傳輸?shù)挠绊懸埠苄?,不?huì)造成過多的網(wǎng)絡(luò)負(fù)載負(fù)擔(dān)。
[0049]應(yīng)當(dāng)理解的是,本發(fā)明的應(yīng)用不限于上述的舉例,對(duì)本領(lǐng)域普通技術(shù)人員來說,可以根據(jù)上述說明加以改進(jìn)或變換,所有這些改進(jìn)和變換都應(yīng)屬于本發(fā)明所附權(quán)利要求的保護(hù)范圍。
【權(quán)利要求】
1.一種實(shí)時(shí)媒體流傳輸方法,其特征在于,包括步驟: A、服務(wù)器端判斷需傳輸?shù)拿襟w流的數(shù)據(jù)幀是否是關(guān)鍵幀,當(dāng)判斷數(shù)據(jù)幀為關(guān)鍵幀時(shí),將所述數(shù)據(jù)幀拆分為數(shù)據(jù)包的同時(shí)在該數(shù)據(jù)幀中添加關(guān)鍵幀標(biāo)識(shí)成為關(guān)鍵幀包; B、將所述關(guān)鍵幀包發(fā)送至客戶端,并監(jiān)聽客戶端是否返回了接收到所述關(guān)鍵幀包的確認(rèn)信息; C、當(dāng)服務(wù)器端在預(yù)定時(shí)間內(nèi)沒有監(jiān)聽到客戶端返回的確認(rèn)信息時(shí),重新將所述關(guān)鍵幀包發(fā)送至客戶端。
2.根據(jù)權(quán)利要求1所述實(shí)時(shí)媒體流傳輸方法,其特征在于,所述步驟B具體包括: B1、服務(wù)器端與客戶端建立監(jiān)聽; B2、獲取所述關(guān)鍵幀包,并將所述關(guān)鍵幀包發(fā)送至客戶端; B3、監(jiān)聽所述客戶端是否返回了接收到所述關(guān)鍵幀 包的確認(rèn)信息。
3.根據(jù)權(quán)利要求1所述實(shí)時(shí)媒體流傳輸方法,其特征在于,所述步驟B中還包括: Cl、客戶端判斷接收到的數(shù)據(jù)包是否為關(guān)鍵幀包; C2、當(dāng)所述數(shù)據(jù)包是關(guān)鍵幀包時(shí),提取所述關(guān)鍵幀包的數(shù)據(jù)包ID ; C3、將所述數(shù)據(jù)包ID與客戶端的關(guān)鍵幀包ID列表匹配,查找所述關(guān)鍵幀包ID列表是否含有該數(shù)據(jù)包ID ; C4、當(dāng)所述關(guān)鍵幀包ID列表沒有該數(shù)據(jù)包ID時(shí),將該數(shù)據(jù)包ID添加至所述關(guān)鍵幀包ID列表,并將含有該數(shù)據(jù)包ID的確認(rèn)信息發(fā)送至服務(wù)器端。
4.根據(jù)權(quán)利要求3所述實(shí)時(shí)媒體流傳輸方法,其特征在于,所述步驟步驟C4還包括: 當(dāng)所述關(guān)鍵幀包ID列表中含有該數(shù)據(jù)包ID時(shí),則將客戶端接收到的關(guān)鍵幀包丟棄。
5.根據(jù)權(quán)利要求3所述實(shí)時(shí)媒體流傳輸方法,其特征在于,所述方法還包括步驟: D、當(dāng)服務(wù)器端在預(yù)定時(shí)間內(nèi)監(jiān)聽到客戶端返回的確認(rèn)信息時(shí),判斷該確認(rèn)信息中的數(shù)據(jù)包ID與最近發(fā)送的關(guān)鍵幀包的數(shù)據(jù)包ID是否相同,當(dāng)是時(shí),返回步驟A,否則重新發(fā)送該關(guān)鍵幀包。
6.根據(jù)權(quán)利要求1所述實(shí)時(shí)媒體流傳輸方法,其特征在于,當(dāng)所述媒體流的編碼方式為264編碼時(shí),所述步驟A中判斷數(shù)據(jù)幀是否為關(guān)鍵幀的步驟具體包括: Al、獲取一幀264數(shù)據(jù),查找所述264數(shù)據(jù)的幀開始標(biāo)記; A2、查找到幀開始標(biāo)記后,開始讀取該幀開始標(biāo)記之后的第5個(gè)字節(jié),若該字節(jié)是6,則轉(zhuǎn)入步驟A3,若該字節(jié)是5,則判斷該數(shù)據(jù)幀為關(guān)鍵幀,若該字節(jié)是5和6以外的值,則判斷該數(shù)據(jù)幀不是關(guān)鍵幀; A3、獲取所述數(shù)據(jù)幀中的恢復(fù)幀計(jì)數(shù)的值,若該值大于O,則判斷是關(guān)鍵幀,否則判斷不是關(guān)鍵中貞。
7.一種實(shí)時(shí)媒體流傳輸系統(tǒng),包括服務(wù)器端和客戶端,其特征在于,所述服務(wù)器端包括關(guān)鍵幀包生成模塊、關(guān)鍵幀包發(fā)送模塊以及關(guān)鍵幀包重傳模塊; 所述關(guān)鍵幀包生成模塊,用于判斷需傳輸?shù)拿襟w流的數(shù)據(jù)幀是否是關(guān)鍵幀,當(dāng)判斷數(shù)據(jù)幀為關(guān)鍵幀時(shí),將所述數(shù)據(jù)幀拆分為數(shù)據(jù)包的同時(shí)在該數(shù)據(jù)幀中添加關(guān)鍵幀標(biāo)識(shí)成為關(guān)鍵幀包; 所述關(guān)鍵幀包發(fā)送模塊,用于將所述關(guān)鍵幀包發(fā)送至客戶端,并監(jiān)聽客戶端是否返回了接收到所述關(guān)鍵幀包的確認(rèn)信息;所述關(guān)鍵幀包重傳模塊,用于在預(yù)定時(shí)間內(nèi)沒有監(jiān)聽到客戶端返回的確認(rèn)信息時(shí),重新將所述關(guān)鍵幀包發(fā)送至客戶端。
8.根據(jù)權(quán)利要求7所述實(shí)時(shí)媒體流傳輸系統(tǒng),其特征在于,所述關(guān)鍵幀包發(fā)送模塊包括: 監(jiān)聽建立單元,用于與客戶端建立監(jiān)聽; 關(guān)鍵幀包發(fā)送單元,用于獲取所述關(guān)鍵幀包,并將所述關(guān)鍵幀包發(fā)送至客戶端; 確認(rèn)信息監(jiān)聽單元,用于監(jiān)聽所述客戶端是否返回了接收到所述關(guān)鍵幀包的確認(rèn)信肩、O
9.根據(jù)權(quán)利要求7所述實(shí)時(shí)媒體流傳輸系統(tǒng),其特征在于,所述客戶端包括: 關(guān)鍵幀包判斷模塊,用于判斷接收到的數(shù)據(jù)包是否為關(guān)鍵幀包; 數(shù)據(jù)包ID提取模塊,用于當(dāng)所述數(shù)據(jù)包是關(guān)鍵幀包時(shí),提取所述關(guān)鍵幀包的數(shù)據(jù)包ID ; 數(shù)據(jù)包ID匹配模塊,用于將所述數(shù)據(jù)包ID與客戶端的關(guān)鍵幀包ID列表匹配,查找所 述關(guān)鍵幀包ID列表是否含有該數(shù)據(jù)包ID ; 確認(rèn)信息發(fā)送模塊,用于當(dāng)所述關(guān)鍵幀包ID列表沒有該數(shù)據(jù)包ID時(shí),將該數(shù)據(jù)包ID添加至所述關(guān)鍵幀包ID列表,并將含有該數(shù)據(jù)包ID的確認(rèn)信息發(fā)送至服務(wù)器端。
10.根據(jù)權(quán)利要求9所述實(shí)時(shí)媒體流傳輸系統(tǒng),其特征在于,所述客戶端還包括: 關(guān)鍵幀包丟棄模塊,用于當(dāng)所述關(guān)鍵幀包ID列表中含有該數(shù)據(jù)包ID時(shí),則將客戶端接收到的關(guān)鍵幀包丟棄。
【文檔編號(hào)】H04L29/06GK103532923SQ201210455840
【公開日】2014年1月22日 申請(qǐng)日期:2012年11月14日 優(yōu)先權(quán)日:2012年11月14日
【發(fā)明者】陶婷, 李潘潘, 張世虎, 蘇娟 申請(qǐng)人:Tcl集團(tuán)股份有限公司