專利名稱:丟包檢測(cè)方法、系統(tǒng)和媒體客戶端的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及流媒體技術(shù),尤其涉及一種丟包檢測(cè)方法、系統(tǒng)和媒體客戶端。
背景技術(shù):
隨著寬帶接入的普及,流媒體技術(shù)的應(yīng)用越來越廣泛,而媒體碼流在IP網(wǎng)絡(luò)上傳輸,不可避免地會(huì)遭遇到丟包,從而導(dǎo)致畫面花屏停頓和聲音斷續(xù)變調(diào),嚴(yán)重影響媒體播放質(zhì)量。在工程實(shí)踐中,經(jīng)常采用丟包重傳技術(shù)來應(yīng)對(duì)網(wǎng)絡(luò)丟包問題,按具體實(shí)現(xiàn)的層次劃分,現(xiàn)有的丟包重傳技術(shù)可大致劃分為兩種類型傳輸層實(shí)現(xiàn)和應(yīng)用層實(shí)現(xiàn)。其中,傳輸層實(shí)現(xiàn)丟包重傳采用傳輸控制協(xié)議(TCP)等有連接協(xié)議傳輸媒體數(shù)據(jù),由傳輸層協(xié)議本身對(duì)丟包進(jìn)行檢測(cè),在丟包時(shí)自動(dòng)發(fā)起重傳。這種方式利用的是傳輸層自帶的丟包重傳功能,實(shí)現(xiàn)成本較低,但此類協(xié)議資源開銷較大,而且丟包重傳功能不受控制,在網(wǎng)絡(luò)擁塞時(shí)容易陷入“擁塞-丟包-重傳-更擁塞”的惡性循環(huán)。應(yīng)用層實(shí)現(xiàn)丟包重傳采用用戶數(shù)據(jù)報(bào)協(xié)議(UDP)等無連接協(xié)議傳輸媒體數(shù)據(jù),由應(yīng)用層對(duì)丟包進(jìn)行檢測(cè)并發(fā)起重傳請(qǐng)求。這種方式需要應(yīng)用層序參與,實(shí)現(xiàn)比較復(fù)雜,但傳輸層協(xié)議的資源開銷比較低,而且重傳請(qǐng)求的發(fā)送和響應(yīng)都由應(yīng)用層實(shí)現(xiàn),可以根據(jù)網(wǎng)絡(luò)情況靈活調(diào)整相關(guān)策略,比較適合流媒體業(yè)務(wù)。目前業(yè)界的趨勢(shì)是采用UDP協(xié)議承載媒體數(shù)據(jù),與此對(duì)應(yīng)的則是應(yīng)用層丟包重傳技術(shù)日趨成熟,這些技術(shù)大同小異,基本思想都是發(fā)送方為每個(gè)媒體(數(shù)據(jù))包加上連續(xù)遞增的包序號(hào),接收方檢測(cè)收到的媒體包序號(hào)是否連續(xù),如果發(fā)現(xiàn)斷續(xù)就認(rèn)為發(fā)生了丟包,并將丟失包的序號(hào)通過獨(dú)立的通道反饋給發(fā)送方,發(fā)送方收到反饋信息后,就將相應(yīng)的媒體包重新發(fā)送給接收方。對(duì)上述方案稍加分析就可以發(fā)現(xiàn)丟包被檢測(cè)到的前提條件是其前面的包沒有完全丟失,也就是說比丟失媒體包序號(hào)小的所有媒體包中至少要有一個(gè)已經(jīng)被接收方成功接收。這就意味著如果流媒體服務(wù)器最初發(fā)送的第一個(gè)媒體包丟失或從第一個(gè)媒體包開始的連續(xù)若干個(gè)包全部丟失的話,接收方是檢測(cè)不到的;即丟包重傳無法覆蓋會(huì)話的全過程。申請(qǐng)?zhí)朇NlOl 123584名為《一種測(cè)量IP鏈路丟包情況的方法及設(shè)備》的專利公開了一種測(cè)量IP層丟包的方法單獨(dú)發(fā)送定界包,定界包中包含一段時(shí)間內(nèi)發(fā)送的IP包的數(shù)量信息,接收端根據(jù)這個(gè)信息,再結(jié)合期間接收到的包數(shù)量,即可正確計(jì)算出鏈路上的丟包情況。IP包的傳輸存在亂序現(xiàn)象,而該發(fā)明中的定界包僅包含發(fā)送端發(fā)送的包總數(shù)信息,缺乏與特定的某個(gè)包進(jìn)行關(guān)聯(lián)的信息,所以接收端雖然能夠知道一段時(shí)間內(nèi)丟失了多少包, 但無法精確獲知這些丟包具體發(fā)生在哪兩個(gè)IP包之間,也無法精確獲知從第一個(gè)包到某個(gè)特定IP包為止發(fā)送端發(fā)送的包總數(shù)一這意味著其無法檢測(cè)初始丟包。申請(qǐng)?zhí)枮镃N101616316,名為《一種視頻數(shù)據(jù)的發(fā)送、接收裝置及發(fā)送、接收方法》 的專利申請(qǐng)沒有采用接收端進(jìn)行丟包檢測(cè)的常規(guī)方法,而是由接收端接收到的包的信息匯總反饋給發(fā)送端,發(fā)送端將其與自身發(fā)送的包的情況進(jìn)行對(duì)比就能檢測(cè)丟包,并進(jìn)而執(zhí)行丟包重傳。理論上,發(fā)送端能夠通過這種方式對(duì)初始丟包進(jìn)行檢測(cè),但在IP網(wǎng)絡(luò)中丟包畢竟是極少數(shù)事件,而該發(fā)明需要持續(xù)向發(fā)送端反饋信息,對(duì)網(wǎng)絡(luò)帶寬消耗較大;另外,將原本分布在各客戶端的丟包檢測(cè)工作集中在發(fā)送端,也必然會(huì)消耗發(fā)送端的處理能力。總之, 這種做法的部署成本相對(duì)較高,所以在實(shí)踐中應(yīng)用較少。另外,在請(qǐng)求評(píng)議(RFC)23^5定義的實(shí)時(shí)流傳輸協(xié)議(RTSP)中,服務(wù)器可以在 PLAY操作的響應(yīng)消息中攜帶RTP-hfo頭域,通過其中的seq子域?qū)⒌谝粋€(gè)RTP包的序號(hào)通知給客戶端,客戶端將收到的RTP包序號(hào)與該值比較,即可檢測(cè)初始丟包。在工程實(shí)踐中, 大部分時(shí)候都是采用兩個(gè)單獨(dú)的底層通道分別承載RTSP和RTP數(shù)據(jù)(典型配置是采用TCP 承載RTSP,采用UDP承載RTP),不能保證客戶端及時(shí)獲取到RTP-hfo頭域的相關(guān)信息,可見,采用RTSP給出的這種方式檢測(cè)初始丟包,無法保證及時(shí)性,效果欠佳。
發(fā)明內(nèi)容
為了克服現(xiàn)有技術(shù)無法檢測(cè)初始丟包或雖能檢測(cè)但效果不好或成本較高不易推廣的缺點(diǎn),本發(fā)明提出一種丟包檢測(cè)方法、系統(tǒng)和媒體客戶端,以能夠以低成本檢測(cè)出初始丟包并進(jìn)而實(shí)現(xiàn)丟包重傳,并可在切換流媒體服務(wù)器時(shí)進(jìn)行丟包重傳。本發(fā)明提供了一種實(shí)現(xiàn)丟包檢測(cè)方法,該方法包括接收端獲取自身收到的數(shù)據(jù)包的包序號(hào);接收端獲取發(fā)送端發(fā)送的發(fā)包總數(shù)信息;以及接收端根據(jù)上述包序號(hào)和發(fā)包總數(shù)信息檢測(cè)出丟失的數(shù)據(jù)包。優(yōu)選地,上述丟包檢測(cè)方法可具有如下特點(diǎn)上述接收端獲取發(fā)送端發(fā)送的發(fā)包總數(shù)信息包括在會(huì)話過程中,當(dāng)接收端判斷出接收到的當(dāng)前數(shù)據(jù)包為第一次收到的數(shù)據(jù)包時(shí), 從攜帶上述當(dāng)前數(shù)據(jù)包的IP包中提取出發(fā)包總數(shù)信息。優(yōu)選地,上述丟包檢測(cè)方法還可具有如下特點(diǎn)上述接收端根據(jù)上述包序號(hào)和發(fā)包總數(shù)信息檢測(cè)出丟失的數(shù)據(jù)包包括上述接收端根據(jù)上述發(fā)包總數(shù)信息生成參考序號(hào);將當(dāng)前數(shù)據(jù)包的包序號(hào)作為當(dāng)前序號(hào);以及若當(dāng)前序號(hào)等于參考序號(hào)加一,則確定未發(fā)生丟包,并將當(dāng)前序號(hào)作為參考序號(hào); 若當(dāng)前序號(hào)不等于參考序號(hào)加一,則確定參考序號(hào)和當(dāng)前序號(hào)之間的所有數(shù)據(jù)包丟失,并將當(dāng)前序號(hào)作為參考序號(hào)。優(yōu)選地,上述丟包檢測(cè)方法還可具有如下特點(diǎn)在從攜帶上述當(dāng)前數(shù)據(jù)包的IP包中提取出發(fā)包總數(shù)信息之前,上述方法還包括發(fā)送端生成發(fā)包總數(shù)信息,并將上述發(fā)包總數(shù)信息攜帶在包含數(shù)據(jù)包的IP包中發(fā)送給接收端。優(yōu)選地,上述丟包檢測(cè)方法還可具有如下特點(diǎn)在上述發(fā)送端生成發(fā)包總數(shù)信息,并將上述發(fā)包總數(shù)信息攜帶在包含數(shù)據(jù)包的IP 包中發(fā)送給接收端的處理中,發(fā)送端對(duì)發(fā)出的數(shù)據(jù)包進(jìn)行計(jì)數(shù),并將上述計(jì)數(shù)攜帶在上述IP包中發(fā)送給接收端;或發(fā)送端將首包序號(hào)攜帶在上述IP包中發(fā)送給接收端。
優(yōu)選地,上述丟包檢測(cè)方法還可具有如下特點(diǎn)在上述檢測(cè)出參考序號(hào)和當(dāng)前序號(hào)之間的所有數(shù)據(jù)包丟失之后,當(dāng)存在多個(gè)發(fā)送端輪流發(fā)送IP包時(shí),上述方法還包括若判斷出數(shù)據(jù)包丟失發(fā)生在首次會(huì)話期間,則提取出當(dāng)前IP包的源IP地址,并向?qū)?yīng)的發(fā)送端發(fā)出重傳請(qǐng)求;若判斷出數(shù)據(jù)包丟失不是發(fā)生在首次會(huì)話期間,則提取當(dāng)前IP包和前一 IP包的源IP地址;通過比較上述當(dāng)前IP包和上述前一 IP包的源IP地址來判斷二者是否來自同一發(fā)送端,若是,則向?qū)?yīng)的發(fā)送端發(fā)出重傳請(qǐng)求,若不是,則提取出當(dāng)前數(shù)據(jù)包的首包序號(hào),并以上述首包序號(hào)為界分別向前后兩個(gè)會(huì)話的發(fā)送端發(fā)出重傳請(qǐng)求。本發(fā)明提供了一種媒體客戶端,上述媒體客戶端包括序號(hào)獲取模塊,用于獲取自身收到的數(shù)據(jù)包的包序號(hào);信息獲取模塊,用于獲取發(fā)送端發(fā)送的發(fā)包總數(shù)信息;以及檢測(cè)模塊,用于根據(jù)上述包序號(hào)和發(fā)包總數(shù)信息檢測(cè)出丟失的數(shù)據(jù)包。優(yōu)選地,上述媒體客戶端可具有如下特點(diǎn)上述信息獲取模塊,進(jìn)一步用于在會(huì)話過程中,當(dāng)判斷出接收到的當(dāng)前數(shù)據(jù)包為第一次收到的數(shù)據(jù)包時(shí),從攜帶上述當(dāng)前數(shù)據(jù)包的IP包中提取出發(fā)包總數(shù)信息;上述檢測(cè)模塊,進(jìn)一步用于根據(jù)所述發(fā)包總數(shù)信息生成參考序號(hào);將當(dāng)前數(shù)據(jù)包的包序號(hào)作為當(dāng)前序號(hào);以及若當(dāng)前序號(hào)等于參考序號(hào)加一,則確定未發(fā)生丟包,并將當(dāng)前序號(hào)作為參考序號(hào);若當(dāng)前序號(hào)不等于參考序號(hào)加一,則確定參考序號(hào)和當(dāng)前序號(hào)之間的所有數(shù)據(jù)包丟失;并將當(dāng)前序號(hào)作為參考序號(hào)。優(yōu)選地,上述媒體客戶端還可具有如下特點(diǎn)上述媒體客戶端還包括重傳請(qǐng)求模塊,用于當(dāng)存在多個(gè)媒體服務(wù)器輪流發(fā)送IP包時(shí),若判斷出數(shù)據(jù)包丟失發(fā)生在首次會(huì)話期間,則提取出當(dāng)前IP包的源IP地址,并向?qū)?yīng)的發(fā)送端發(fā)出重傳請(qǐng)求;若判斷出數(shù)據(jù)包丟失不是發(fā)生在首次會(huì)話期間,則提取當(dāng)前IP包和前一 IP包的源IP 地址,通過比較上述當(dāng)前IP包和上述前一 IP包的源IP地址來判斷二者是否來自同一發(fā)送端,若是,則向?qū)?yīng)的發(fā)送端發(fā)出重傳請(qǐng)求,若不是,則提取出當(dāng)前數(shù)據(jù)包的首包序號(hào),并以上述首包序號(hào)為界分別向前后兩個(gè)會(huì)話的發(fā)送端發(fā)出重傳請(qǐng)求。本發(fā)明還提供了一種丟包檢測(cè)系統(tǒng),上述系統(tǒng)包括上述媒體客戶端和媒體服務(wù)器,其中上述媒體服務(wù)器,用于生成發(fā)包總數(shù)信息,并將上述發(fā)包總數(shù)信息攜帶在包含數(shù)據(jù)包的IP包中發(fā)送給上述媒體客戶端。本發(fā)明提供的丟包檢測(cè)方法、系統(tǒng)和媒體客戶端,能夠以低成本且及時(shí)地檢測(cè)出初始丟包并進(jìn)而實(shí)現(xiàn)丟包重傳。
圖1為本發(fā)明實(shí)現(xiàn)丟包重傳的流程圖;圖2為本發(fā)明丟包檢測(cè)方法的流程圖;圖3為本發(fā)明的部署模型一的結(jié)構(gòu)示意圖4為本發(fā)明實(shí)施例一的RTP包頭格式;圖5為本發(fā)明RTP包頭擴(kuò)展字段通用格式示意圖;圖6為本發(fā)明實(shí)施例一的RTP包頭擴(kuò)展字段格式示意圖;圖7為本發(fā)明的部署模型二的結(jié)構(gòu)示意圖;圖8為本發(fā)明實(shí)施例二的RTP包頭擴(kuò)展字段格式;圖9為本發(fā)明實(shí)施例二的媒體包序號(hào)和首包序號(hào)字段取值;圖10為本發(fā)明實(shí)施例二中接收端確定丟包所屬傳輸層會(huì)話并發(fā)送重傳請(qǐng)求的流程圖;圖11為本發(fā)明實(shí)施例二中接收端收包情況示意圖;圖12為本發(fā)明媒體服務(wù)器的結(jié)構(gòu)示意圖;圖13為本發(fā)明丟包檢測(cè)系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施例方式下面結(jié)合附圖對(duì)技術(shù)方案的實(shí)施作進(jìn)一步地詳細(xì)描述為便于后文表述,在此定義如下術(shù)語(yǔ)媒體服務(wù)器即流媒體服務(wù)器,相當(dāng)于RFC 23 中的“媒體服務(wù)器(Media Server),,。應(yīng)用層數(shù)據(jù)為應(yīng)用層通過底層IP鏈路傳送的數(shù)據(jù),應(yīng)用層數(shù)據(jù)是該次數(shù)據(jù)通訊的最終目的,為實(shí)現(xiàn)該目的而增加的其它輔助信息不屬于應(yīng)用層數(shù)據(jù);例如,在流媒體應(yīng)用中,媒體數(shù)據(jù)是應(yīng)用層數(shù)據(jù),而用于丟包檢測(cè)和重傳的信息則不屬于應(yīng)用層數(shù)據(jù)。發(fā)送端為生成應(yīng)用層數(shù)據(jù)并對(duì)外發(fā)送的IP通信實(shí)體,在本文中大多數(shù)情況下,發(fā)送端都是一個(gè)流媒體服務(wù)器。發(fā)送端還要配合實(shí)現(xiàn)丟包重傳功能。接收端為接收應(yīng)用層數(shù)據(jù)的IP通訊實(shí)體,與發(fā)送端配合實(shí)現(xiàn)丟包重傳功能。本文的發(fā)送端和接收端是根據(jù)應(yīng)用層數(shù)據(jù)的流向來區(qū)分的,而不是某個(gè)具體IP包的流向。傳輸層會(huì)話為發(fā)生在特定發(fā)送端和接收端之間的一次在時(shí)間上連續(xù)發(fā)送和接收數(shù)據(jù)包的過程,發(fā)送端或接收端的變更都會(huì)產(chǎn)生一個(gè)新的傳輸層會(huì)話,故在單次應(yīng)用層通訊過程中可能發(fā)生多次傳輸層會(huì)話。本文隨后部分在不致引起混淆的場(chǎng)合,均將傳輸層會(huì)話簡(jiǎn)稱為“會(huì)話”。初始階段丟包指的是發(fā)送端在某次會(huì)話中發(fā)送的第一個(gè)包丟失或從第一個(gè)包開始的連續(xù)若干個(gè)包全部丟失的事件,可簡(jiǎn)稱為“初始丟包”。本發(fā)明提供了一種丟包檢測(cè)方法,上述方法包括步驟一、接收端獲取自身收到的數(shù)據(jù)包的包序號(hào);步驟二、接收端獲取發(fā)送端發(fā)送的發(fā)包總數(shù)信息;以及步驟三、接收端根據(jù)上述包序號(hào)和發(fā)包總數(shù)信息檢測(cè)出丟失的數(shù)據(jù)包。在步驟三之后,該方法還可以包括接收端向發(fā)送端發(fā)送重傳請(qǐng)求,以便接收端重傳丟失的數(shù)據(jù)包。如圖1所示,為本發(fā)明實(shí)現(xiàn)丟包重傳的流程圖,該方法包括步驟101、發(fā)送端生成發(fā)包總數(shù)信息;“發(fā)包總數(shù)信息”并不對(duì)應(yīng)特定的具體形式,其宗旨是能讓接收端精確獲知任何一
7個(gè)數(shù)據(jù)包被發(fā)送時(shí)發(fā)送端已經(jīng)發(fā)送的包總數(shù),包括但不限于如下形式1)發(fā)包計(jì)數(shù)發(fā)送端對(duì)發(fā)出的包進(jìn)行計(jì)數(shù),會(huì)話啟動(dòng)時(shí)對(duì)該計(jì)數(shù)進(jìn)行初始化,此后單調(diào)遞增。根據(jù)具體實(shí)現(xiàn)的不同,發(fā)包計(jì)數(shù)可以包含當(dāng)前將要發(fā)送的數(shù)據(jù)包,也可以不包含當(dāng)前將要發(fā)送的數(shù)據(jù)包。將發(fā)包計(jì)數(shù)作為發(fā)包總數(shù)信息,接收端可直接獲得該信息。2)首包序號(hào)特指發(fā)送端發(fā)送的第一個(gè)包的序號(hào),接收端將任一包的序號(hào)減去首包序號(hào),也可獲得對(duì)應(yīng)的發(fā)包總數(shù)信息;步驟102、發(fā)送端發(fā)送發(fā)包總數(shù)信息;本實(shí)施例中采用帶內(nèi)方式發(fā)送發(fā)包總數(shù)信息,發(fā)送端直接將發(fā)包總數(shù)信息添加到攜帶有應(yīng)用層數(shù)據(jù)的IP包中,一并發(fā)送給接收端,對(duì)此,也有很多種不同的方式,例如1)以發(fā)出的包計(jì)數(shù)作為包序號(hào),那么接收端收到的包序號(hào)就是發(fā)包總數(shù);2)在應(yīng)用層數(shù)據(jù)包中增加一個(gè)專門的字段用來傳輸發(fā)包總數(shù)信息,此時(shí)要求應(yīng)用層數(shù)據(jù)包另外設(shè)置序號(hào)字段;步驟103、接收端根據(jù)接收的發(fā)包總數(shù)信息進(jìn)行丟包檢測(cè);接收端知曉自身收到的包總數(shù),根據(jù)發(fā)送端提供的發(fā)包總數(shù)信息,就可計(jì)算出每個(gè)IP包被接收時(shí)的丟包總數(shù),再結(jié)合收到的包序號(hào),還能得到每個(gè)丟失包的準(zhǔn)確序號(hào);盡管發(fā)包總數(shù)信息的生成和發(fā)送方式不同,上述過程的具體實(shí)現(xiàn)方式也不同,但結(jié)果不會(huì)變化;如果發(fā)生初始階段丟包,當(dāng)接收端成功接收第一個(gè)IP包時(shí),收包總數(shù)為1,而對(duì)應(yīng)的發(fā)包總數(shù)則大于1,兩者的差值即為初始丟包的總數(shù)量,將收到的這個(gè)包的序號(hào)遞減即為各個(gè)丟失包的序號(hào);由此可見,本發(fā)明支持對(duì)初始丟包的檢測(cè);步驟104、接收端發(fā)出重傳請(qǐng)求;接收端根據(jù)上述丟包檢測(cè)結(jié)果生成重傳請(qǐng)求包,該重傳請(qǐng)求包中攜帶有丟失包的序號(hào)信息,被接收端發(fā)送到發(fā)送端;步驟105、發(fā)送端響應(yīng)該重傳請(qǐng)求。發(fā)送端接收到重傳請(qǐng)求后,根據(jù)序號(hào)信息將對(duì)應(yīng)的丟失包重新發(fā)送給接收端。本發(fā)明的發(fā)送端將發(fā)包總數(shù)信息提供給接收端,接收端據(jù)此可精確獲知任何一個(gè)數(shù)據(jù)包被發(fā)送時(shí)發(fā)送端發(fā)送的包總數(shù),從而可對(duì)初始階段丟包進(jìn)行檢測(cè);由于采用帶內(nèi)方式攜帶發(fā)包總數(shù)信息,發(fā)包總數(shù)信息與應(yīng)用層數(shù)據(jù)一同到達(dá)接收端,只要收到了包就能檢測(cè)初始丟包,因而保證了及時(shí)性。如圖2所示,為本發(fā)明丟包檢測(cè)方法的流程圖,該實(shí)施例是從接收端側(cè)進(jìn)行描述, 其中每個(gè)數(shù)據(jù)包都攜帶有包序號(hào)字段,為突出重點(diǎn),該實(shí)施例沒有考慮亂序包和重傳包的處理,該丟包檢測(cè)過程包括步驟201、等待直到接收到一個(gè)數(shù)據(jù)包;步驟202、判斷是否是第一次收到數(shù)據(jù)包,如果是,則執(zhí)行步驟203,否則,轉(zhuǎn)向步驟 204 ;步驟203、提取發(fā)包總數(shù)信息,并據(jù)此生成參考序號(hào);根據(jù)發(fā)包總數(shù)信息的具體形式不同,這一步驟的具體處理也有所不同若以發(fā)包計(jì)數(shù)作為發(fā)包總數(shù)信息,則將當(dāng)前包(即接收到的第一個(gè)包)的序號(hào)減去對(duì)應(yīng)的發(fā)包計(jì)數(shù)(如果發(fā)送端生成發(fā)包計(jì)數(shù)時(shí)未包含當(dāng)前包,則需要在此基礎(chǔ)上再減去1),即為參考序號(hào);若以首包序號(hào)作為發(fā)包總數(shù)信息,將首包序號(hào)減去1即可獲得參考序號(hào);步驟204、提取當(dāng)前包的序號(hào)作為當(dāng)前序號(hào);步驟205、判斷當(dāng)前序號(hào)是否等于參考序號(hào)+1,若是,則轉(zhuǎn)向步驟207,否則,執(zhí)行步驟206 ;步驟206、當(dāng)前收到的包和前一個(gè)收到包的序號(hào)不連續(xù),將中間空缺序號(hào)對(duì)應(yīng)的包視為已經(jīng)丟失,發(fā)出重傳請(qǐng)求;步驟207、將當(dāng)前序號(hào)作為參考序號(hào)加以保存;步驟208、判斷媒體會(huì)話是否結(jié)束,若未結(jié)束,則轉(zhuǎn)向步驟201,否則,結(jié)束。在上述步驟101中,接收端主要使用發(fā)包總數(shù)信息來進(jìn)行丟包檢測(cè),而圖2中使用由發(fā)包總數(shù)信息導(dǎo)出的參考序號(hào)來進(jìn)行丟包檢測(cè),應(yīng)視為本發(fā)明技術(shù)方案的一種等價(jià)形式??梢?,該實(shí)施例可通過發(fā)包總數(shù)信息來確定參考序號(hào)并用于對(duì)該包本身的丟包檢測(cè),即實(shí)現(xiàn)了對(duì)初始階段丟包的檢測(cè)。如圖3所示,為本發(fā)明的部署模型一的結(jié)構(gòu)示意圖,在該實(shí)施例中,媒體服務(wù)器31 為媒體客戶端32提供單播流媒體服務(wù),兩者之間建立一個(gè)信令通道33,媒體服務(wù)器31通過RTP媒體通道34向媒體客戶端32發(fā)送媒體包,媒體客戶端32檢測(cè)到丟包后,通過重傳請(qǐng)求通道35發(fā)送重傳請(qǐng)求。在實(shí)踐中,信令通道33和重傳請(qǐng)求通道35可采用RTSP或?qū)崟r(shí)傳輸控制協(xié)議 (RTCP),也可以采用任何基于TCP或UDP的類似協(xié)議,信令通道33也可同時(shí)充當(dāng)重傳請(qǐng)求通道35,此時(shí)兩個(gè)信道在物理上合并為一個(gè)信道。該實(shí)施例采用RTP協(xié)議承載應(yīng)用層數(shù)據(jù),需要對(duì)RTP通道34上的RTP包格式進(jìn)行擴(kuò)展。如圖4所示,為本發(fā)明實(shí)施例一的RTP包頭格式,該RTP包頭格式由RFC 3550規(guī)定, 字段X為擴(kuò)展字段標(biāo)志,X = 0表示該RTP包頭沒有擴(kuò)展字段,X = 1表示該RTP包頭存在擴(kuò)展字段,在本實(shí)施例中,X字段取值為1 ;RTP包頭其余字段的含義可參考RFC 3550。如圖5所示,是RFC 3550為RTP包頭擴(kuò)展字段給出的通用格式,當(dāng)RTP包頭中的擴(kuò)展字段標(biāo)志為1時(shí),在標(biāo)準(zhǔn)RTP包頭的尾部緊跟的是擴(kuò)展字段,各字段含義如下由應(yīng)用決定(defined by profile)的取值由具體的應(yīng)用決定,RFC 3550不做規(guī)定;擴(kuò)展字段的長(zhǎng)度(length)以32比特為單位,不包括length字段本身所在的32 比特;由于length字段以32比特為單位,具體的擴(kuò)展頭部(header extension)長(zhǎng)度必須為32比特的整數(shù)倍。根據(jù)圖4和圖5的定義確定了用于傳輸發(fā)包總數(shù)信息的RTP包頭擴(kuò)展字段格式, 該RTP包頭擴(kuò)展字段格式可參見圖6,其中幻數(shù)(magic number)是符合圖5規(guī)定的擴(kuò)展字段格式,取值為16進(jìn)制數(shù) 0x12345678 ;length取值為1,表示該字段后有32比特的擴(kuò)展內(nèi)容;發(fā)包計(jì)數(shù)(packet number),表示發(fā)送端從會(huì)話開始以來包括該RTP包在內(nèi)發(fā)送的數(shù)據(jù)包總數(shù)。流媒體服務(wù)器31作為發(fā)送端,按照?qǐng)D4至圖6的格式輸出攜帶發(fā)包計(jì)數(shù)的RTP包, 流媒體客戶端32作為接收端執(zhí)行圖2所示的流程當(dāng)收到第一個(gè)RTP包后,將序號(hào)減去發(fā)包計(jì)數(shù)即可對(duì)參考序號(hào)賦初值,從而實(shí)現(xiàn)對(duì)包括初始丟包在內(nèi)的全部丟包事件的檢測(cè),并在檢測(cè)到丟包時(shí)發(fā)起重傳請(qǐng)求。流媒體服務(wù)器31則響應(yīng)重傳請(qǐng)求,與流媒體客戶端32配合實(shí)現(xiàn)丟包重傳。如圖7所示,為本發(fā)明的部署模型二的結(jié)構(gòu)示意圖,其中,控制模塊71控制多個(gè)流媒體服務(wù)器72,控制模塊71和各流媒體服務(wù)器72之間建立控制信道73用于控制信息的通訊??刂颇K71在邏輯上獨(dú)立,但可與某個(gè)流媒體服務(wù)器72合并部署。控制模塊71、流媒體服務(wù)器72和控制信道73 —起構(gòu)成了一個(gè)虛擬的媒體服務(wù)器74。媒體客戶端75與控制模塊71之間建立信令通道76,控制模塊71則通過控制信道 73控制各個(gè)流媒體服務(wù)器72,輪流通過媒體通道77向媒體客戶端75發(fā)送RTP格式的媒體碼流。同一時(shí)間僅有一個(gè)流媒體服務(wù)器72在發(fā)送碼流,在發(fā)送時(shí)間上相鄰的兩個(gè)流媒體服務(wù)器72發(fā)出的碼流RTP包序號(hào)保持連續(xù)。媒體客戶端75檢測(cè)到丟包后,通過重傳請(qǐng)求通道78向媒體服務(wù)器72發(fā)出重傳請(qǐng)求。該實(shí)施例采用RTP協(xié)議承載應(yīng)用層數(shù)據(jù),需要對(duì)媒體通道77上的RTP包進(jìn)行擴(kuò)展,在此依然遵循RFC 3550的規(guī)定來擴(kuò)展RTP包。如圖8所示,為本發(fā)明實(shí)施例二的RTP 包頭擴(kuò)展字段格式,其中首包序號(hào)(first sequence number)表示第一個(gè)媒體包的序號(hào),Length表示長(zhǎng)度, 首包序號(hào)的長(zhǎng)度為零;具體地,每切換一次,負(fù)責(zé)發(fā)送碼流的媒體服務(wù)器72和新開始發(fā)包的媒體服務(wù)器都要將本次發(fā)送的所有RTP包中的該字段設(shè)置為本次發(fā)送的第一個(gè)媒體包的序號(hào)。如圖9所示,為本發(fā)明實(shí)施例二的媒體包序號(hào)和首包序號(hào)字段取值,其中91、92、93和94代表流媒體服務(wù)器_A、流媒體服務(wù)器-B、流媒體服務(wù)器-C直到流媒體服務(wù)器-X的一系列參與輪流發(fā)包的媒體服務(wù)器,對(duì)應(yīng)于圖7中的流媒體服務(wù)器72。下方一系列小方塊95代表各流媒體服務(wù)器發(fā)出的RTP包,每個(gè)RTP包內(nèi)有兩個(gè)數(shù)字,上面的數(shù)字為RTP序號(hào),而下面的數(shù)字則為首包序號(hào)。以包96為例,其包序號(hào)為152,而首包序號(hào)為151。根據(jù)圖9中給出的各RTP包序號(hào)分析可知各RTP包在時(shí)間上的先后順序是先從上到下再?gòu)淖蟮接摇T趫D9中,同一個(gè)流媒體服務(wù)器發(fā)出的媒體包在垂直方向是對(duì)齊的(為便于觀察, 圖中用了雙點(diǎn)劃線區(qū)分)??梢姡看萎?dāng)用于發(fā)包的媒體服務(wù)器即發(fā)送端發(fā)生切換,RTP包的首包序號(hào)字段取值也隨之發(fā)生變化——被設(shè)置為該媒體服務(wù)器此次發(fā)送的第一個(gè)RTP包的序號(hào)。由于采用多個(gè)媒體服務(wù)器輪流發(fā)包,故實(shí)施例二中的一次媒體服務(wù)將由多個(gè)傳輸層會(huì)話組成,對(duì)于圖9來說,以RTP序號(hào)范圍來區(qū)分,序號(hào)分別屬于[1,100]、[101,150]、 [151,280], [501,650], [651,701], [702,800]這些閉區(qū)間范圍內(nèi)的包各自構(gòu)成一次會(huì)話。 該實(shí)施例不但可檢測(cè)初始丟包,還能準(zhǔn)確確定丟包所屬的傳輸層會(huì)話,從而可向相應(yīng)的媒體服務(wù)器發(fā)出重傳請(qǐng)求。如圖10所示,為本發(fā)明實(shí)施例二中接收端確定丟包所屬傳輸層會(huì)話并發(fā)送重傳請(qǐng)求的流程圖,這里給出的是接收端發(fā)現(xiàn)丟包之后的處理機(jī)制,為突出重點(diǎn),圖中沒有考慮亂序包和重傳包的處理,該過程包括步驟1001、判斷當(dāng)前丟包是否處于整個(gè)媒體服務(wù)過程中的第一次會(huì)話,若是,則執(zhí)行步驟1002,否則,轉(zhuǎn)向步驟1003 ;由于第一次會(huì)話期間的丟包不會(huì)牽涉到多個(gè)發(fā)送端,故增加這個(gè)判斷步驟;步驟1002、丟包發(fā)生在第一次會(huì)話期間,取出當(dāng)前包的源IP地址,向?qū)?yīng)的發(fā)送端發(fā)出重傳請(qǐng)求,結(jié)束;步驟1003、從前后兩個(gè)包之間取出源IP地址,從而識(shí)別出對(duì)應(yīng)的發(fā)送端;這里的“前一個(gè)包”指的是接收端上一次收到的包,“后一個(gè)包”則為當(dāng)前收到的包,當(dāng)丟包發(fā)生時(shí),這兩個(gè)包的RTP序號(hào)不連續(xù);步驟1004、通過比較前后兩個(gè)包的源IP地址來判斷它們是否來自同一個(gè)發(fā)送端, 若是,則執(zhí)行步驟1005,否則轉(zhuǎn)向步驟1006 ;步驟1005、向發(fā)送端發(fā)出重傳請(qǐng)求;結(jié)束;當(dāng)前后兩個(gè)包屬于同一個(gè)會(huì)話,且都來自當(dāng)前的發(fā)送端時(shí),則向該發(fā)送端發(fā)出重傳請(qǐng)求;步驟1006、取出當(dāng)前包的首包序號(hào)字段,以此為界分別向前后兩個(gè)會(huì)話的發(fā)送端發(fā)出重傳請(qǐng)求;結(jié)束。當(dāng)前后兩個(gè)包來自不同的發(fā)送端時(shí),則屬于兩個(gè)不同會(huì)話,則需取出當(dāng)前包的首包序號(hào)字段,以此為界分別向前后兩個(gè)會(huì)話的發(fā)送端發(fā)出重傳請(qǐng)求。如圖11所示,為本發(fā)明實(shí)施例二中接收端收包情況示意圖,在描述接收端收包過程中對(duì)圖10中的步驟1006給出了進(jìn)一步說明前一媒體服務(wù)器111和當(dāng)前媒體服務(wù)器112分別表示前后兩個(gè)發(fā)送端,產(chǎn)生了兩
個(gè)傳輸層會(huì)話,對(duì)應(yīng)的RTP包集合分別為113和114,113各RTP包的序號(hào)分別為SNpA.....
SNpB,. . .、SNpC,首包序號(hào)均為 FSNP,114 各 RTP 包的序號(hào)分別為 SNeA、. . .、SNcB,. . .、SNcC, 首包序號(hào)均為FSNcA,顯然,F(xiàn)SNc = SNcA = SNpC+10發(fā)送端111和112發(fā)送的RTP包集合113和114經(jīng)過網(wǎng)絡(luò)傳輸,發(fā)送端接收時(shí)可能會(huì)發(fā)生三種不同的丟包現(xiàn)象,對(duì)應(yīng)圖11中的115、116和117(實(shí)線邊框表示該包被成功接收,虛線邊框表示該包在傳輸過程中丟失)。其中,115為接收端收到序號(hào)在SNpC之前(含)和SNcB(含)之后的所有包,序號(hào)在SNpC和SNcB之間包括SNcA在內(nèi)的包全部丟失;116為接收端收到序號(hào)在SNpB之前(含)和SNcA(含)之后的所有包,序號(hào)在SNpB 和SNcA之間包括SNpC在內(nèi)的包全部丟失;117為接收端收到序號(hào)在SNpB之前(含)和SNcB(含)之后的所有包,序號(hào)在SNpB 和SNcB之間包括SNpC和SNcA在內(nèi)的包全部丟失。表1給出了圖10中步驟1006對(duì)應(yīng)115、116和117三種丟包情況的關(guān)鍵變量取值表1不同丟包情況下的關(guān)鍵變量取值表
權(quán)利要求
1.一種丟包檢測(cè)方法,其特征在于,所述方法包括 接收端獲取自身收到的數(shù)據(jù)包的包序號(hào);接收端獲取發(fā)送端發(fā)送的發(fā)包總數(shù)信息;以及接收端根據(jù)所述包序號(hào)和發(fā)包總數(shù)信息檢測(cè)出丟失的數(shù)據(jù)包。
2.根據(jù)權(quán)利要求1所述的丟包檢測(cè)方法,其特征在于,所述接收端獲取發(fā)送端發(fā)送的發(fā)包總數(shù)信息包括在會(huì)話過程中,當(dāng)接收端判斷出接收到的當(dāng)前數(shù)據(jù)包為第一次收到的數(shù)據(jù)包時(shí),從攜帶所述當(dāng)前數(shù)據(jù)包的IP包中提取出發(fā)包總數(shù)信息。
3.根據(jù)權(quán)利要求1所述的丟包檢測(cè)方法,其特征在于,所述接收端根據(jù)所述包序號(hào)和發(fā)包總數(shù)信息檢測(cè)出丟失的數(shù)據(jù)包包括所述接收端根據(jù)所述發(fā)包總數(shù)信息生成參考序號(hào); 將當(dāng)前數(shù)據(jù)包的包序號(hào)作為當(dāng)前序號(hào);以及若當(dāng)前序號(hào)等于參考序號(hào)加一,則確定未發(fā)生丟包,并將當(dāng)前序號(hào)作為參考序號(hào);若當(dāng)前序號(hào)不等于參考序號(hào)加一,則確定參考序號(hào)和當(dāng)前序號(hào)之間的所有數(shù)據(jù)包丟失,并將當(dāng)前序號(hào)作為新的參考序號(hào)。
4.根據(jù)權(quán)利要求2所述的丟包檢測(cè)方法,其特征在于,在所述接收端從攜帶所述當(dāng)前數(shù)據(jù)包的IP包中提取出發(fā)包總數(shù)信息之前,所述方法還包括發(fā)送端生成發(fā)包總數(shù)信息,并將所述發(fā)包總數(shù)信息攜帶在包含數(shù)據(jù)包的IP包中發(fā)送給接收端。
5.根據(jù)權(quán)利要求4所述的丟包檢測(cè)方法,其特征在于,在所述發(fā)送端生成發(fā)包總數(shù)信息,并將所述發(fā)包總數(shù)信息攜帶在包含數(shù)據(jù)包的IP包中發(fā)送給接收端的處理中,發(fā)送端對(duì)發(fā)出的數(shù)據(jù)包進(jìn)行計(jì)數(shù),并將所述計(jì)數(shù)攜帶在所述IP包中發(fā)送給接收端;或發(fā)送端將首包序號(hào)攜帶在所述IP包中發(fā)送給接收端。
6.根據(jù)權(quán)利要求3-5任一權(quán)利要求所述的丟包檢測(cè)方法,其特征在于,在所述檢測(cè)出參考序號(hào)和當(dāng)前序號(hào)之間的所有數(shù)據(jù)包丟失之后,如果存在多個(gè)發(fā)送端發(fā)送IP包,則所述方法還包括若判斷出數(shù)據(jù)包丟失發(fā)生在首次會(huì)話期間,則提取出當(dāng)前IP包的源IP地址,并向?qū)?yīng)的發(fā)送端發(fā)出重傳請(qǐng)求;若判斷出數(shù)據(jù)包丟失不是發(fā)生在首次會(huì)話期間,則提取當(dāng)前IP包和前一 IP包的源IP 地址;通過比較所述當(dāng)前IP包和所述前一 IP包的源IP地址來判斷二者是否來自同一發(fā)送端,若是,則向?qū)?yīng)的發(fā)送端發(fā)出重傳請(qǐng)求,若不是,則提取出當(dāng)前數(shù)據(jù)包的首包序號(hào),并以所述首包序號(hào)為界分別向前后兩個(gè)會(huì)話的發(fā)送端發(fā)出重傳請(qǐng)求。
7.一種媒體客戶端,其特征在于,所述媒體客戶端包括 序號(hào)獲取模塊,用于獲取自身收到的數(shù)據(jù)包的包序號(hào); 信息獲取模塊,用于獲取發(fā)送端發(fā)送的發(fā)包總數(shù)信息;以及檢測(cè)模塊,用于根據(jù)所述包序號(hào)和發(fā)包總數(shù)信息檢測(cè)出丟失的數(shù)據(jù)包。
8.根據(jù)權(quán)利要求7所述的媒體客戶端,其特征在于所述信息獲取模塊,進(jìn)一步用于在會(huì)話過程中,當(dāng)判斷出接收到的當(dāng)前數(shù)據(jù)包為第一次收到的數(shù)據(jù)包時(shí),從攜帶所述當(dāng)前數(shù)據(jù)包的IP包中提取出發(fā)包總數(shù)信息;所述檢測(cè)模塊,進(jìn)一步用于根據(jù)所述發(fā)包總數(shù)信息生成參考序號(hào);將當(dāng)前數(shù)據(jù)包的包序號(hào)作為當(dāng)前序號(hào);以及若當(dāng)前序號(hào)等于參考序號(hào)加一,則確定未發(fā)生丟包,并將當(dāng)前序號(hào)作為參考序號(hào);若當(dāng)前序號(hào)不等于參考序號(hào)加一,則確定參考序號(hào)和當(dāng)前序號(hào)之間的所有數(shù)據(jù)包丟失,并將當(dāng)前序號(hào)作為參考序號(hào)。
9.根據(jù)權(quán)利要求8所述的媒體客戶端,其特征在于,所述媒體客戶端還包括重傳請(qǐng)求模塊,用于當(dāng)存在多個(gè)媒體服務(wù)器輪流發(fā)送IP包時(shí),若判斷出數(shù)據(jù)包丟失發(fā)生在首次會(huì)話期間,則提取出當(dāng)前IP包的源IP地址,并向?qū)?yīng)的發(fā)送端發(fā)出重傳請(qǐng)求;若判斷出數(shù)據(jù)包丟失不是發(fā)生在首次會(huì)話期間,則提取當(dāng)前IP包和前一 IP包的源IP地址, 通過比較所述當(dāng)前IP包和所述前一 IP包的源IP地址來判斷二者是否來自同一發(fā)送端,若是,則向?qū)?yīng)的發(fā)送端發(fā)出重傳請(qǐng)求,若不是,則提取出當(dāng)前數(shù)據(jù)包的首包序號(hào),并以所述首包序號(hào)為界分別向前后兩個(gè)會(huì)話的發(fā)送端發(fā)出重傳請(qǐng)求。
10.一種包括權(quán)利要求7-9任一權(quán)利要求所述的媒體客戶端的丟包檢測(cè)系統(tǒng),其特征在于,所述系統(tǒng)還包括媒體服務(wù)器,其中所述媒體服務(wù)器,用于生成發(fā)包總數(shù)信息,并將所述發(fā)包總數(shù)信息攜帶在包含數(shù)據(jù)包的IP包中發(fā)送給所述媒體客戶端。
全文摘要
本發(fā)明提供了一種丟包檢測(cè)方法、系統(tǒng)和媒體客戶端,其中,該丟包檢測(cè)方法包括接收端獲取自身收到的數(shù)據(jù)包的包序號(hào);接收端獲取發(fā)送端發(fā)送的發(fā)包總數(shù)信息;以及接收端根據(jù)上述包序號(hào)和發(fā)包總數(shù)信息檢測(cè)出丟失的數(shù)據(jù)包。本發(fā)明提供的丟包檢測(cè)方法、系統(tǒng)和媒體客戶端,能夠以低成本且及時(shí)地檢測(cè)出初始丟包并進(jìn)而實(shí)現(xiàn)丟包重傳,并可在切換流媒體服務(wù)器時(shí)進(jìn)行丟包重傳。
文檔編號(hào)H04L1/18GK102546081SQ201010599130
公開日2012年7月4日 申請(qǐng)日期2010年12月21日 優(yōu)先權(quán)日2010年12月21日
發(fā)明者朱曉斌 申請(qǐng)人:中興通訊股份有限公司