国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種快速處理實(shí)時(shí)媒體流數(shù)據(jù)包的方法及其系統(tǒng)的制作方法

      文檔序號(hào):7589790閱讀:166來(lái)源:國(guó)知局
      專利名稱:一種快速處理實(shí)時(shí)媒體流數(shù)據(jù)包的方法及其系統(tǒng)的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及一種IP網(wǎng)絡(luò)數(shù)據(jù)通訊處理技術(shù),更確切地說(shuō)是涉及基于UDP(User Datagram Protocol用戶數(shù)據(jù)報(bào)協(xié)議)的RTP/RTCP(Real-timeTransport Protocol/Real-time Transport Control Protocol實(shí)時(shí)傳輸協(xié)議/實(shí)時(shí)傳輸控制協(xié)議)協(xié)議傳輸實(shí)時(shí)媒體流數(shù)據(jù)包的一種快速處理方法,應(yīng)用于媒體網(wǎng)關(guān)、IAD(Integrate Access Device綜合接入設(shè)備)、IP多媒體終端等設(shè)備中基于RTP/RTCP傳輸?shù)膶?shí)時(shí)媒體流數(shù)據(jù)包的快速接收和快速發(fā)送處理。
      本發(fā)明還涉及一種用于快速處理實(shí)時(shí)媒體流數(shù)據(jù)包的系統(tǒng)。
      背景技術(shù)
      隨著互聯(lián)網(wǎng)的普及和多媒體技術(shù)在互聯(lián)網(wǎng)上的應(yīng)用,目前迫切要求能有解決實(shí)時(shí)傳送視頻、音頻等實(shí)時(shí)媒體流的技術(shù),目前一般使用RTP/RTCP(Real-time Transport Protocol/Real-time Transport Control Protocol實(shí)時(shí)傳輸協(xié)議/實(shí)時(shí)傳輸控制協(xié)議)協(xié)議來(lái)傳輸視頻、音頻等實(shí)時(shí)媒體流數(shù)據(jù)。
      所述實(shí)時(shí)傳輸協(xié)議RTP提供時(shí)間信息和實(shí)現(xiàn)流同步;RTP本身并不能為按順序傳送數(shù)據(jù)包提供可靠的傳送機(jī)制,也不提供流量控制或擁塞控制,它依靠實(shí)時(shí)傳輸控制協(xié)議RTCP提供這些服務(wù);所述實(shí)時(shí)傳輸控制協(xié)議RTCP和實(shí)時(shí)傳輸協(xié)議RTP一起提供流量控制和擁塞控制服務(wù);在RTP會(huì)話期間,各參與者周期性地傳送RTCP包;該RTCP包中含有已發(fā)送的數(shù)據(jù)包的數(shù)量、丟失的數(shù)據(jù)包數(shù)量等統(tǒng)計(jì)資料,因此,可以利用這些信息動(dòng)態(tài)地改變傳輸速率,甚至改變有效載荷類型。RTP和RTCP進(jìn)行配合使用,能以有效的反饋和最小的開銷使傳輸效率最佳化,因而特別適合傳送網(wǎng)上的實(shí)時(shí)數(shù)據(jù)。通常RTP算法并不作為一個(gè)獨(dú)立的網(wǎng)絡(luò)層來(lái)實(shí)現(xiàn),而是作為應(yīng)用程序代碼的一部分。網(wǎng)絡(luò)傳輸協(xié)議RTP通常使用UDP來(lái)傳送數(shù)據(jù);當(dāng)應(yīng)用程序開始一個(gè)RTP會(huì)話時(shí)將使用兩個(gè)本地端口一個(gè)給RTP,一個(gè)給RTCP。
      如圖1所示的,為RTP/RTCP數(shù)據(jù)包的傳統(tǒng)發(fā)送流程。所述RTP/RTCP應(yīng)用層程序要發(fā)送實(shí)時(shí)媒體流數(shù)據(jù)包時(shí),將調(diào)用SOCKET API函數(shù)的SendTo發(fā)送數(shù)據(jù),在SOCKET層內(nèi)部經(jīng)過(guò)sendit、sosend等函數(shù)進(jìn)行以下操作sendit函數(shù)準(zhǔn)備sosend系統(tǒng)調(diào)用所需的數(shù)據(jù)結(jié)構(gòu)msghdr,初始化uio結(jié)構(gòu),創(chuàng)建MBUF,并將進(jìn)程指定的輸出緩存中的數(shù)據(jù)收集到內(nèi)核緩存中,然后將控制和地址信息從進(jìn)程空間復(fù)制到內(nèi)核,最后將插口、目的地址、uio結(jié)構(gòu)、控制信息和標(biāo)志等全部傳給函數(shù)sosend;所述sosend的功能是檢查差錯(cuò)條件和等待發(fā)送緩存中的閑置空間,當(dāng)檢查差錯(cuò)情況時(shí),為防止緩存發(fā)生改變,協(xié)議處理先被掛起,將進(jìn)程來(lái)的數(shù)據(jù)復(fù)制到內(nèi)核,通過(guò)調(diào)用udp_output并將數(shù)據(jù)傳遞給與插口相關(guān)的UDP協(xié)議層。UDP層用來(lái)分析控制信息、數(shù)據(jù)的內(nèi)容及合法性,臨時(shí)連接一個(gè)未連接上的插口,填充udpiphdr結(jié)構(gòu)的字段,為檢驗(yàn)和計(jì)算準(zhǔn)備偽首部,計(jì)算檢驗(yàn)和,填充UDP長(zhǎng)度、TTL和TOS等,最后調(diào)用ip_output發(fā)送數(shù)據(jù)包到IP層。在IP層完成以下操作初始化IP首部,確定一條到目的地的路由并獲取下一跳的MAC地址,保證所述IP首部有一個(gè)有效源地址,復(fù)制數(shù)據(jù)和計(jì)算檢驗(yàn)和,然后把分組提交給與路由相關(guān)的接口if_output函數(shù),完成以太網(wǎng)頭部數(shù)據(jù)的填充,最后調(diào)用網(wǎng)口驅(qū)動(dòng)層的發(fā)送函數(shù)。所述網(wǎng)口驅(qū)動(dòng)發(fā)送函數(shù)拷貝MBUF中的以太網(wǎng)包數(shù)據(jù)并驅(qū)動(dòng)網(wǎng)絡(luò)接口硬件把數(shù)據(jù)傳輸?shù)轿锢韺印?br> 如圖2所示的,為RTP/RTCP數(shù)據(jù)包的傳統(tǒng)接收流程。一個(gè)基于UDP的RTP/RTCP實(shí)時(shí)媒體流數(shù)據(jù)包被網(wǎng)口接收函數(shù)(即網(wǎng)口驅(qū)動(dòng)以太網(wǎng)幀接收函數(shù))接收后,通過(guò)TCP/IP協(xié)議棧注冊(cè)的回調(diào)函數(shù)ether_input把數(shù)據(jù)上傳給TCP/IP協(xié)議棧,經(jīng)過(guò)協(xié)議棧IP層的處理,分發(fā)給UDP層處理,UDP層的udp_input函數(shù)再按照UDP數(shù)據(jù)包中的目的端口號(hào)依次找到對(duì)應(yīng)的接收SOCKET,并把數(shù)據(jù)放到對(duì)應(yīng)的接收緩沖區(qū)中,如此分層拆包處理。RTP/RTCP協(xié)議層應(yīng)用程序任務(wù)會(huì)每隔一定的時(shí)間間隔,調(diào)用recvfrom函數(shù)從SOCKET的接收緩沖區(qū)中讀出數(shù)據(jù)放到應(yīng)用程序任務(wù)的緩沖區(qū)中處理。
      經(jīng)過(guò)實(shí)驗(yàn)和分析發(fā)現(xiàn),在媒體網(wǎng)關(guān)、IAD、IP多媒體終端等設(shè)備中使用這種發(fā)送RTP/RTCP數(shù)據(jù)包的方法存在一些不必要的處理,導(dǎo)致了處理效率很低,具體表現(xiàn)在以下3個(gè)方面1、實(shí)時(shí)媒體流數(shù)據(jù)通過(guò)RTP/RTCP數(shù)據(jù)包承載在UDP上,根據(jù)RTP/RTCP數(shù)據(jù)包的特性,RTP/RTCP協(xié)議層應(yīng)用程序已經(jīng)確定了數(shù)據(jù)包中的源IP、源PORT、目的IP、目的PORT等內(nèi)容,而標(biāo)準(zhǔn)TCP/IP協(xié)議棧、SOCKET層存在很多協(xié)議、地址分析判斷處理,這些處理和判斷的結(jié)果對(duì)于RTP/RTCP數(shù)據(jù)包的發(fā)送來(lái)說(shuō)是已知的和多余的,完全不需要。
      2、標(biāo)準(zhǔn)TCP/IP協(xié)議棧在不同的層來(lái)填充數(shù)據(jù)包中的相關(guān)字段,分層來(lái)處理不同的協(xié)議層數(shù)據(jù),因而層數(shù)多,層數(shù)多則必然需要更多的動(dòng)態(tài)內(nèi)存的申請(qǐng)操作,這樣會(huì)進(jìn)行大量的數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換、數(shù)據(jù)的拷貝以及數(shù)據(jù)判斷等非常耗時(shí)、占CPU資源的操作。根據(jù)在一個(gè)會(huì)話中實(shí)時(shí)媒體流RTP/RTCP數(shù)據(jù)包的特征,實(shí)時(shí)媒體流數(shù)據(jù)包從上層應(yīng)用程序到網(wǎng)絡(luò)驅(qū)動(dòng)發(fā)送可以由一個(gè)新的處理函數(shù)實(shí)現(xiàn),跨越SOCKET層及標(biāo)準(zhǔn)協(xié)議棧。
      3、通過(guò)所述標(biāo)準(zhǔn)TCP/IP協(xié)議棧發(fā)送數(shù)據(jù)時(shí),每個(gè)數(shù)據(jù)包都要進(jìn)行路由、ARP的查找,協(xié)議棧的這些操作是非常費(fèi)時(shí)的。根據(jù)在一個(gè)會(huì)話中實(shí)時(shí)媒體流RTP/RTCP數(shù)據(jù)包的特征,軟件可以采用基于端口的ARP策略來(lái)大大降低這種非常費(fèi)時(shí)的路由、ARP查找操作。
      在媒體網(wǎng)關(guān)、IAD、IP多媒體終端等設(shè)備中使用這種接收RTP/RTCP數(shù)據(jù)包的方法也存在一些不必要的處理,導(dǎo)致了處理效率很低,具體表現(xiàn)在以下2個(gè)方面1、這種分層拆包處理存在很多冗余、費(fèi)時(shí)的處理,如多次協(xié)議類型、地址信息、數(shù)據(jù)合法性的判斷,多次數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換,多次數(shù)據(jù)拷貝等等,這些操作對(duì)于已知端口范圍的UDP數(shù)據(jù)接收來(lái)說(shuō)是不必要的。
      2、RTP/RTCP協(xié)議層應(yīng)用程序任務(wù)采用SOCKET編程定時(shí)查詢方式接收數(shù)據(jù)大大增加了時(shí)延并浪費(fèi)了CPU資源。
      如上所述,在傳統(tǒng)的RTP/RTCP數(shù)據(jù)包的處理過(guò)程中,RTP/RTCP應(yīng)用層通過(guò)SOCKET API與TCP/IP協(xié)議棧完成接口操作,由TCP/IP協(xié)議棧與網(wǎng)絡(luò)驅(qū)動(dòng)層完成數(shù)據(jù)的接收與發(fā)送。在發(fā)送方向上,RTP/RTCP應(yīng)用層程序調(diào)用SOCKET API的發(fā)送函數(shù)把數(shù)據(jù)發(fā)送出去,存在處理效率低的問(wèn)題;在接收方向上,RTP/RTCP協(xié)議應(yīng)用程序以定時(shí)查詢的方式調(diào)用SOCKET API的接收函數(shù)來(lái)接收數(shù)據(jù)包,并分層拆包處理,同樣存在處理效率低下的問(wèn)題。

      發(fā)明內(nèi)容
      本發(fā)明的目的在于提供一種快速處理實(shí)時(shí)媒體流數(shù)據(jù)包的方法及其系統(tǒng),由媒體網(wǎng)關(guān)、IAD以及IP多媒體終端等設(shè)備通過(guò)實(shí)現(xiàn)該系統(tǒng)來(lái)使用這種方法,通過(guò)在接收方向上使用IP數(shù)據(jù)包快速過(guò)濾模塊取代TCP/IP協(xié)議棧的數(shù)據(jù)接收處理函數(shù)集及SOCKET接收處理,并去除了TCP/IP協(xié)議棧分層拆包過(guò)程中的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換,以及在發(fā)送方向上使用UDP快速發(fā)送模塊代替TCP/IP協(xié)議棧的數(shù)據(jù)發(fā)送處理函數(shù)集及SOCKET發(fā)送處理,發(fā)送實(shí)時(shí)媒體流數(shù)據(jù)包時(shí)減少多層分發(fā)處理的函數(shù)調(diào)用,從而去除數(shù)據(jù)結(jié)構(gòu)的多次轉(zhuǎn)換和減少動(dòng)態(tài)內(nèi)存的申請(qǐng)和數(shù)據(jù)的拷貝,使之相對(duì)于使用傳統(tǒng)的TCP/IP協(xié)議棧處理方式,RTP/RTCP數(shù)據(jù)包的處理效率明顯提高,提高設(shè)備的處理能力,減少媒體流數(shù)據(jù)包的網(wǎng)絡(luò)時(shí)延,從而提高網(wǎng)絡(luò)服務(wù)質(zhì)量。
      本發(fā)明的目的通過(guò)如下技術(shù)方案實(shí)現(xiàn)一種快速處理實(shí)時(shí)媒體流數(shù)據(jù)包的系統(tǒng),其包括一IP數(shù)據(jù)包快速過(guò)濾模塊、一UDP快速發(fā)送模塊以及一基于本地UDP端口策略ARP表處理模塊;所述系統(tǒng)還包括一基于UDP端口注冊(cè)的RTP/RTCP快速接收處理函數(shù),所述RTP/RTCP快速接收處理函數(shù)位于RTP/RTCP應(yīng)用層內(nèi);所述基于本地UDP端口策略ARP表處理模塊與所述IP數(shù)據(jù)包快速過(guò)濾模塊和所述UDP快速發(fā)送模塊通訊連接,并且所述基于本地UDP端口策略ARP表處理模塊根據(jù)設(shè)備RTP/RTCP協(xié)議端口資源的分配情況以及RTP/RTCP協(xié)議端口的特征,構(gòu)造一個(gè)以端口映射值為下標(biāo)的ARP表;所述IP數(shù)據(jù)包快速過(guò)濾模塊在數(shù)據(jù)鏈路層接收函數(shù)中,安裝快速接收鉤子函數(shù);所述鉤子函數(shù)用于分析以太網(wǎng)數(shù)據(jù)包的內(nèi)容;RTP/RTCP應(yīng)用層在所述鉤子函數(shù)中注冊(cè)UDP端口對(duì)應(yīng)的RTP/RTCP快速接收處理函數(shù);所述UDP快速發(fā)送模塊用于在所述RTP/RTCP應(yīng)用層任務(wù)發(fā)送實(shí)時(shí)媒體流數(shù)據(jù)包時(shí)直接調(diào)用所述UDP快速發(fā)送模塊提供的發(fā)送函數(shù),經(jīng)過(guò)該UDP快速發(fā)送模塊的處理,最后調(diào)用對(duì)應(yīng)的網(wǎng)口發(fā)送函數(shù)把數(shù)據(jù)發(fā)送出去;所述IP數(shù)據(jù)包快速過(guò)濾模塊用于把實(shí)時(shí)媒體流數(shù)據(jù)包從一網(wǎng)口接收函數(shù)接收后,傳輸給所述RTP/RTCP快速接收處理函數(shù),從而直接傳輸?shù)剿鯮TP/RTCP應(yīng)用層的任務(wù)的緩沖區(qū)中。
      所述的系統(tǒng),其中,該系統(tǒng)還包括一TCP/IP協(xié)議棧模塊,所述UDP快速發(fā)送模塊還在無(wú)法完成數(shù)據(jù)包發(fā)送的情況下,通過(guò)TCP/IP協(xié)議棧模塊使用SOCKET API發(fā)送數(shù)據(jù)包。
      所述的系統(tǒng),其中,所述ARP表中的信息主要有數(shù)據(jù)包的目的IP地址、下一跳的MAC地址、該表項(xiàng)上次刷新時(shí)間。
      所述的系統(tǒng),其中,所述鉤子函數(shù)分析以太網(wǎng)數(shù)據(jù)包的內(nèi)容包括分析是否是IP數(shù)據(jù)包,如果是進(jìn)一步分析是否是UDP數(shù)據(jù)包,如果是進(jìn)一步分析是否是已經(jīng)注冊(cè)了的UDP端口范圍的數(shù)據(jù)包,如果是則調(diào)用對(duì)應(yīng)的基于UDP端口注冊(cè)的RTP/RTCP快速接收處理函數(shù),將實(shí)時(shí)媒體流數(shù)據(jù)包直接傳輸?shù)絉TP/RTCP應(yīng)用層任務(wù)的緩沖區(qū)中。
      所述的系統(tǒng),其中,所述鉤子函數(shù)分析以太網(wǎng)數(shù)據(jù)包的內(nèi)容還包括分析是否是IP數(shù)據(jù)包,如果不是鉤子函數(shù)實(shí)體進(jìn)一步解析是否是免費(fèi)ARP包,如果是則啟動(dòng)基于本地UDP端口策略的ARP表刷新機(jī)制,使策略ARP表無(wú)效。
      一種所述的快速處理實(shí)時(shí)媒體流數(shù)據(jù)包的方法,其包括以下步驟a)所述基于本地UDP端口策略ARP表處理模塊根據(jù)設(shè)備RTP/RTCP協(xié)議端口資源的分配情況以及RTP/RTCP協(xié)議端口的特征,構(gòu)造一個(gè)以端口映射值為下標(biāo)的ARP表;b)上層應(yīng)用調(diào)用所述UDP快速發(fā)送模塊發(fā)送RTP/RTCP數(shù)據(jù)包,根據(jù)所述RTP/RTCP數(shù)據(jù)包的目的IP地址,使用傳統(tǒng)TCP/IP協(xié)議棧的相關(guān)接口函數(shù)獲取下一跳的MAC地址;c)如果成功獲取下一跳的MAC地址則刷新ARP表項(xiàng)中的下一跳的MAC地址并直接發(fā)送該RTP/RTCP數(shù)據(jù)包,此后如果在該UDP端口上所發(fā)送的目的IP地址不變且端口ARP表未到老化時(shí)間,則均直接使用ARP表項(xiàng)中的下一跳MAC地址填充以太網(wǎng)數(shù)據(jù)包的目的MAC地址,快速發(fā)送該RTP/RTCP數(shù)據(jù)包;d)如果不能獲取下一跳的MAC地址,則需要通過(guò)TCP/IP UDPSOCKET API發(fā)送這個(gè)RTP/RTCP數(shù)據(jù)包,以便TCP/IP協(xié)議棧獲得下一跳MAC地址并刷新協(xié)議棧ARP表,在該端口的下一個(gè)數(shù)據(jù)包發(fā)送時(shí),就可成功獲取下一跳的MAC地址并刷新基于本地UDP端口的策略ARP表項(xiàng)中的下一跳的MAC地址。
      所述的方法,其中,所述方法包括RTP/RTCP數(shù)據(jù)包的快速發(fā)送方法,其包括以下處理步驟a1)根據(jù)所述RTP/RTCP應(yīng)用層的情況,初始化全局以太網(wǎng)數(shù)據(jù)幀結(jié)構(gòu),并填充相關(guān)字段;a2)所述RTP/RTCP應(yīng)用層在發(fā)送實(shí)時(shí)媒體流數(shù)據(jù)包時(shí),準(zhǔn)備協(xié)議層數(shù)據(jù)指針、數(shù)據(jù)長(zhǎng)度、源IP地址、目的IP地址、源UDP端口號(hào)、目的UDP端口號(hào)等參數(shù),調(diào)用所述UDP快速發(fā)送模塊提供的RTP/RTCP發(fā)送函數(shù)a3)所述UDP快速發(fā)送模塊根據(jù)源UDP端口號(hào)、目的IP地址從ARP表中獲取下一跳MAC地址;如果獲取不成功,則通過(guò)TCP/IP協(xié)議棧模塊發(fā)送這個(gè)RTP/RTCP數(shù)據(jù)包;a4)如果獲取成功,使用已初始化的以太網(wǎng)數(shù)據(jù)幀結(jié)構(gòu),并填充相應(yīng)的字段,以及根據(jù)需要計(jì)算并填充IP、UDP的校驗(yàn)字段;a5)調(diào)用網(wǎng)口發(fā)送函數(shù)發(fā)送數(shù)據(jù)包。
      所述的方法,其中,所述方法的RTP/RTCP數(shù)據(jù)包的快速接收方法,其包括以下處理步驟b1)根據(jù)所述系統(tǒng)的本地UDP端口資源的分配情況維護(hù)一個(gè)協(xié)議層回調(diào)函數(shù)注冊(cè)表,注冊(cè)一RTP/RTCP快速接收處理函數(shù)來(lái)接收處理目的端口號(hào)對(duì)應(yīng)的UDP數(shù)據(jù)包,所述RTP/RTCP快速接收處理函數(shù)完成把RTP/RTCP數(shù)據(jù)包寫到RTP/RTCP應(yīng)用層的緩沖區(qū)中b2)在網(wǎng)口接收函數(shù)中注冊(cè)一以太網(wǎng)數(shù)據(jù)包快速接收處理鉤子函數(shù),該鉤子函數(shù)的實(shí)體為所述IP數(shù)據(jù)包快速過(guò)濾模塊,用以分析所述以太網(wǎng)數(shù)據(jù)包是否為本網(wǎng)口的UDP/IP數(shù)據(jù)包并進(jìn)行過(guò)濾處理;b3)根據(jù)所述UDP數(shù)據(jù)包的目的端口號(hào)和RTP/RTCP應(yīng)用層回調(diào)函數(shù)注冊(cè)表,調(diào)用UDP目的端口號(hào)對(duì)應(yīng)的RTP/RTCP應(yīng)用層注冊(cè)的回調(diào)函數(shù)RTP/RTCP快速接收處理函數(shù),由該回調(diào)函數(shù)完成該UDP數(shù)據(jù)包的處理
      b4)如果所述IP數(shù)據(jù)包快速過(guò)濾模塊已經(jīng)成功通過(guò)RTP/RTCP應(yīng)用層注冊(cè)的回調(diào)函數(shù)RTP/RTCP快速接收函數(shù)處理,則返回一個(gè)已經(jīng)被處理的標(biāo)記;b5)網(wǎng)口接收函數(shù)根據(jù)以太網(wǎng)數(shù)據(jù)包快速接收處理鉤子函數(shù)返回的是否已經(jīng)處理標(biāo)記,判斷是否要繼續(xù)傳給所述TCP/IP協(xié)議棧模塊處理。
      所述的方法,其中,所述步驟b4)后如果沒有被處理,則分析是否是免費(fèi)ARP包;在網(wǎng)口接收函數(shù)上收到免費(fèi)ARP包時(shí),使ARP表項(xiàng)中的MAC地址失效,以便隨后發(fā)RTP/RTCP數(shù)據(jù)包時(shí)主動(dòng)從所述TCP/IP協(xié)議棧重新獲取下一跳MAC并刷新ARP表。
      所述的方法,其中,在所述步驟d)定義一刷新時(shí)間間隔,以定時(shí)刷新所述基于本地UDP端口的策略ARP表。
      本發(fā)明的快速處理實(shí)時(shí)媒體流數(shù)據(jù)包的方法及其系統(tǒng)充分利用了RTP/RTCP協(xié)議數(shù)據(jù)實(shí)時(shí)媒體流的特性,從根本上改變了媒體流數(shù)據(jù)包的處理流程。
      首先在接收方向上使用IP數(shù)據(jù)包快速過(guò)濾模塊取代TCP/IP協(xié)議棧的數(shù)據(jù)接收處理函數(shù)集及SOCKET接收處理,并去除了TCP/IP協(xié)議棧分層拆包過(guò)程中的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換,大大減少了各種協(xié)議類型、地址信息、數(shù)據(jù)內(nèi)容的有效、合法性判斷。RTP/RTCP應(yīng)用層不需要SOCKET編程中的定時(shí)查詢操作,RTP/RTCP協(xié)議實(shí)時(shí)媒體流數(shù)據(jù)直接通過(guò)RTP/RTCP應(yīng)用層注冊(cè)的回調(diào)函數(shù)寫入RTP/RTCP應(yīng)用層的緩沖區(qū)中。
      其次在發(fā)送方向上使用UDP快速發(fā)送模塊代替TCP/IP協(xié)議棧的數(shù)據(jù)發(fā)送處理函數(shù)集及SOCKET發(fā)送處理,發(fā)送實(shí)時(shí)媒體流數(shù)據(jù)包時(shí)減少多層分發(fā)處理的函數(shù)調(diào)用,從而去除數(shù)據(jù)結(jié)構(gòu)的多次轉(zhuǎn)換和減少動(dòng)態(tài)內(nèi)存的申請(qǐng)和數(shù)據(jù)的拷貝。
      更重要的是本發(fā)明采用基于本地UDP端口策略ARP表處理模塊,根本上改變傳統(tǒng)TCP/IP協(xié)議棧發(fā)送數(shù)據(jù)包時(shí)的下一跳地址查找機(jī)制。
      本發(fā)明的系統(tǒng)和方法相對(duì)于傳統(tǒng)的TCP/IP協(xié)議棧及SOCKET編程的偵聽接收與發(fā)送,使用本發(fā)明可快速處理實(shí)時(shí)媒體流數(shù)據(jù)包,提高設(shè)備的處理能力,減少媒體流數(shù)據(jù)包的網(wǎng)絡(luò)時(shí)延,從而提高網(wǎng)絡(luò)服務(wù)質(zhì)量。
      在產(chǎn)品的對(duì)比測(cè)試中,使用本發(fā)明的方法和系統(tǒng),實(shí)時(shí)媒體流數(shù)據(jù)包的處理效率明顯提高,設(shè)備的處理能力大大增強(qiáng),從而減少了實(shí)時(shí)媒體流數(shù)據(jù)包的網(wǎng)絡(luò)時(shí)延,提高了實(shí)時(shí)媒體流的服務(wù)質(zhì)量。實(shí)驗(yàn)結(jié)果顯示以主頻為50M的通用CPU和通用10M/100M自適應(yīng)網(wǎng)絡(luò)控制器設(shè)備為例,使用傳統(tǒng)的TCP/IP SOCKET API處理實(shí)時(shí)媒體流數(shù)據(jù)包,處理20路G.711 20ms的語(yǔ)音數(shù)據(jù)流會(huì)占用80%左右的CPU處理時(shí)間,而如果采用本發(fā)明的方法及系統(tǒng)處理實(shí)時(shí)媒體流數(shù)據(jù)包,處理20路G.711 20ms的語(yǔ)音數(shù)據(jù)流會(huì)只占用20%左右的CPU處理時(shí)間,因此數(shù)據(jù)包的處理效率顯著提高。


      圖1是現(xiàn)有技術(shù)中的傳統(tǒng)實(shí)時(shí)媒體流數(shù)據(jù)包發(fā)送框圖;圖2是現(xiàn)有技術(shù)的傳統(tǒng)實(shí)時(shí)媒體流數(shù)據(jù)包接收框圖;圖3是本發(fā)明的快速處理實(shí)時(shí)媒體流數(shù)據(jù)包模塊框圖;圖4是本發(fā)明的實(shí)時(shí)媒體流快速發(fā)送處理流程;圖5是本發(fā)明的實(shí)時(shí)媒體流快速接收處理流程。
      具體實(shí)施例方式
      下面結(jié)合附圖對(duì)技術(shù)方案的實(shí)施作進(jìn)一步的詳細(xì)描述請(qǐng)參見圖3,本發(fā)明的改進(jìn)實(shí)施例涉及三個(gè)主要發(fā)明創(chuàng)造部分IP數(shù)據(jù)包快速過(guò)濾模塊、UDP快速發(fā)送模塊以及基于本地UDP端口策略ARP表處理模塊;本發(fā)明的系統(tǒng)還包括傳統(tǒng)的TCP/IP協(xié)議棧模塊和基于UDP端口注冊(cè)的RTP/RTCP快速接收處理函數(shù),一網(wǎng)口接收函數(shù)和一網(wǎng)口發(fā)送函數(shù)位于數(shù)據(jù)鏈路層內(nèi);所述RTP/RTCP快速接收處理函數(shù)位于RTP/RTCP應(yīng)用層內(nèi)。
      本發(fā)明的所述快速處理實(shí)時(shí)媒體流數(shù)據(jù)包的系統(tǒng),充分利用了RTP/RTCP實(shí)時(shí)媒體流數(shù)據(jù)包的特征進(jìn)行快速接收和發(fā)送處理。在發(fā)送方向上RTP/RTCP實(shí)時(shí)媒體流的特征是已知數(shù)據(jù)包的源IP地址、目的IP地址、源UDP端口、目的UDP端口;在接收方向上RTP/RTCP實(shí)時(shí)媒體流的特征是已知數(shù)據(jù)包的目的IP地址、目的UDP端口范圍。
      所述基于本地UDP端口策略ARP表處理模塊包括以下特征根據(jù)設(shè)備RTP/RTCP協(xié)議端口資源的分配情況以及RTP/RTCP協(xié)議端口的特征,構(gòu)造一個(gè)以端口映射值為下標(biāo)(索引)的ARP表;該ARP表中的信息主要有數(shù)據(jù)包的目的IP地址,用于保存該本地UDP端口上次UDP數(shù)據(jù)包的目的IP地址;下一跳的MAC地址,用于保存數(shù)據(jù)包的目的IP地址所對(duì)應(yīng)的MAC地址;該表項(xiàng)上次刷新時(shí)間。
      在最開始,上層應(yīng)用調(diào)用快速發(fā)送接口發(fā)送RTP/RTCP數(shù)據(jù)包,此時(shí)所需發(fā)送的數(shù)據(jù)包的目的地址IP不等于所述基于本地UDP端口的策略ARP表中的數(shù)據(jù)包的目的IP地址,需要根據(jù)RTP/RTCP數(shù)據(jù)包的目的IP地址,使用傳統(tǒng)的TCP/IP協(xié)議棧的相關(guān)接口函數(shù)獲取下一跳的MAC地址。
      如果成功獲取了下一跳的MAC地址則刷新所述ARP表項(xiàng)中的下一跳的MAC地址并直接發(fā)送該RTP/RTCP數(shù)據(jù)包,此后如果在該UDP端口上所發(fā)送的目的IP地址不變且端口ARP表未到老化時(shí)間,則均直接使用所述ARP表項(xiàng)中的下一跳MAC地址填充以太網(wǎng)數(shù)據(jù)包的目的MAC地址,以實(shí)現(xiàn)快速發(fā)送該RTP/RTCP數(shù)據(jù)包。
      如果不能獲取下一跳的MAC地址,則需要通過(guò)TCP/IP UDP SOCKETAPI發(fā)送這個(gè)RTP/RTCP數(shù)據(jù)包,以便所述TCP/IP協(xié)議棧模塊啟動(dòng)傳統(tǒng)的獲得下一跳MAC地址的流程并刷新TCP/IP協(xié)議棧ARP表,在該端口的下一個(gè)數(shù)據(jù)包發(fā)送時(shí),必須成功獲取下一跳的MAC地址并刷新所述基于本地UDP端口的策略ARP表項(xiàng)中的下一跳的MAC地址。
      在網(wǎng)口接收函數(shù)上收到免費(fèi)ARP包時(shí),需要使所述ARP表項(xiàng)中的MAC地址失效,這樣在隨后發(fā)RTP/RTCP數(shù)據(jù)包時(shí)能主動(dòng)從所述TCP/IP協(xié)議棧重新獲取下一跳MAC并刷新ARP表。并且可以定義一個(gè)刷新時(shí)間間隔,以便定時(shí)刷新基于本地UDP端口的策略ARP表。
      所述IP數(shù)據(jù)包快速過(guò)濾模塊的特征在于在所述數(shù)據(jù)鏈路層的網(wǎng)口接收函數(shù)中安裝快速接收鉤子函數(shù);該鉤子函數(shù)的實(shí)體分析以太網(wǎng)數(shù)據(jù)包的內(nèi)容;所述RTP/RTCP應(yīng)用層在該鉤子函數(shù)實(shí)體中注冊(cè)UDP端口對(duì)應(yīng)的RTP/RTCP快速接收處理函數(shù)。
      進(jìn)一步地,所述鉤子函數(shù)實(shí)體分析以太網(wǎng)數(shù)據(jù)包的內(nèi)容還包括分析該以太網(wǎng)數(shù)據(jù)包是否是IP數(shù)據(jù)包,如果是進(jìn)一步分析是否是UDP數(shù)據(jù)包,如果是進(jìn)一步分析是否是已經(jīng)注冊(cè)了的UDP端口范圍的數(shù)據(jù)包,如果是則調(diào)用對(duì)應(yīng)的基于UDP端口注冊(cè)的RTP/RTCP快速接收處理函數(shù),將實(shí)時(shí)媒體流數(shù)據(jù)包直接傳輸?shù)絉TP/RTCP應(yīng)用層任務(wù)的緩沖區(qū)中。
      如果不是IP數(shù)據(jù)包,所述鉤子函數(shù)實(shí)體進(jìn)一步解析是否是免費(fèi)ARP包,免費(fèi)ARP包區(qū)別于其他ARP包的特征是其數(shù)據(jù)包中的目的IP地址與源IP地址一致,如果是則啟動(dòng)基于本地UDP端口策略的ARP表刷新機(jī)制,使策略ARP表無(wú)效。
      所述UDP快速發(fā)送模塊的特征包括所述RTP/RTCP應(yīng)用層任務(wù)發(fā)送實(shí)時(shí)媒體流數(shù)據(jù)包時(shí)直接調(diào)用該UDP快速發(fā)送模塊提供的網(wǎng)口發(fā)送函數(shù),經(jīng)過(guò)該UDP快速發(fā)送模塊的處理,最后調(diào)用對(duì)應(yīng)的網(wǎng)口驅(qū)動(dòng)程序發(fā)送函數(shù)把數(shù)據(jù)發(fā)送出去。
      進(jìn)一步地,該發(fā)送模塊充分利用了RTP/RTCP傳輸實(shí)時(shí)媒體流的特征,維護(hù)所述基于本地UDP端口策略的ARP表完成下一跳MAC地址的獲取,如此,以太網(wǎng)數(shù)據(jù)包的接收和發(fā)送都盡可能不經(jīng)過(guò)現(xiàn)有技術(shù)的所述TCP/IP協(xié)議棧模塊處理,并采用所述基于本地端口的策略ARP表大大降低了非常費(fèi)時(shí)的路由、ARP查找等操作;并且發(fā)送過(guò)程中使用已經(jīng)申請(qǐng)并初始化好的以太網(wǎng)數(shù)據(jù)包結(jié)構(gòu),數(shù)據(jù)包中的很多字段不需要重新填寫,這樣就從發(fā)送和接收方向上都提高了RTP/RTCP傳輸實(shí)時(shí)媒體流的傳輸效率,降低了對(duì)CPU的利用率。
      另外,所述UDP快速發(fā)送模塊的特征還包括在所述UDP快速發(fā)送模塊無(wú)法完成數(shù)據(jù)包發(fā)送的情況下,本發(fā)明系統(tǒng)仍然通過(guò)TCP/IP協(xié)議棧模塊使用SOCKET API發(fā)送數(shù)據(jù)包。傳統(tǒng)的TCP/IP協(xié)議棧支持SOCKET接口和一些標(biāo)準(zhǔn)IO控制接口,通過(guò)調(diào)用傳統(tǒng)的協(xié)議棧提供的接口,可以根據(jù)數(shù)據(jù)包的目的IP得到下一跳的IP地址;通過(guò)調(diào)用傳統(tǒng)協(xié)議棧提供的接口,可以根據(jù)下一跳的IP地址,得到該IP地址所對(duì)應(yīng)的MAC地址。
      所述IP數(shù)據(jù)包快速過(guò)濾模塊的特征還包括所述基于UDP端口注冊(cè)的RTP/RTCP快速接收處理函數(shù)負(fù)責(zé)把實(shí)時(shí)媒體流數(shù)據(jù)包直接傳輸?shù)絉TP/RTCP應(yīng)用層任務(wù)的緩沖區(qū)中。
      以下具體描述本發(fā)明的一較佳實(shí)施例在本發(fā)明的系統(tǒng)和方法中,在RTP/RTCP數(shù)據(jù)包的接收方向上使用所述IP數(shù)據(jù)包快速過(guò)濾模塊取代現(xiàn)有技術(shù)的TCP/IP協(xié)議棧模塊,通過(guò)RTP/RTCP協(xié)議應(yīng)用程序注冊(cè)的基于本地UDP端口范圍的RTP/RTCP快速接收處理函數(shù)直接把從所述網(wǎng)口接收函數(shù)收到的RTP/RTCP數(shù)據(jù)包寫到對(duì)應(yīng)的RTP/RTCP協(xié)議應(yīng)用程序的數(shù)據(jù)接收緩沖區(qū)中。在RTP/RTCP數(shù)據(jù)包的發(fā)送方向上使用所述UDP快速發(fā)送處理模塊取代現(xiàn)有技術(shù)的TCP/IP協(xié)議棧模塊,直接把RTP/RTCP應(yīng)用層的數(shù)據(jù)寫到網(wǎng)口發(fā)送函數(shù)的發(fā)送緩沖區(qū)中。根據(jù)設(shè)備RTP/RTCP協(xié)議端口資源的分配情況,提供基于本地UDP端口的策略ARP表及其查找、刷新機(jī)制,取代所述TCP/IP協(xié)議棧的路由及其下一跳MAC地址的查找機(jī)制。
      所述基于本地UDP端口的策略ARP表及其查找、刷新機(jī)制,包括以下內(nèi)容A、根據(jù)設(shè)備RTP/RTCP協(xié)議端口資源的分配情況以及RTP/RTCP協(xié)議端口的特征,構(gòu)造一個(gè)以端口映射值為下標(biāo)(索引)的ARP表項(xiàng),即一結(jié)構(gòu)數(shù)組PORT_IP_MAC_TABLE[PORT_MAP_VALUE]。例如如果設(shè)備中RTP/RTCP的端口資源范圍為10000----20000,結(jié)構(gòu)數(shù)組下標(biāo)與UDP端口的映射關(guān)系可以是UDP端口號(hào)X對(duì)應(yīng)下標(biāo)PORT_MAP_VALUE=(X-10000)/2。
      B、所述ARP表項(xiàng)結(jié)構(gòu)內(nèi)容包含四個(gè)字節(jié)的RtpRtcpDestIp、六個(gè)字節(jié)的NextHopMacAddr、四個(gè)字節(jié)的refurbishTick。所述RtpRtcpDestIp保存該本地UDP端口上次UDP數(shù)據(jù)包的目的IP地址,NextHopMacAddr保存RtpRtcpDestIp對(duì)應(yīng)的下一跳MAC地址,refurbishTick保存該表項(xiàng)上次刷新時(shí)間。
      C、如圖3所示,所述IP數(shù)據(jù)包快速過(guò)濾處理模塊收到免費(fèi)ARP包時(shí),通過(guò)清除PORT_IP_MAC_TABLE表中各表項(xiàng)的refurbishTick使表項(xiàng)中的MAC地址失效,這樣在發(fā)RTP/RTCP數(shù)據(jù)包時(shí)能主動(dòng)從TCP/IP協(xié)議棧重新獲取下一跳MAC并刷新表項(xiàng)中的數(shù)據(jù)。
      D、定義一個(gè)刷新時(shí)間間隔,所述RTP/RTCP應(yīng)用層發(fā)送實(shí)時(shí)媒體流數(shù)據(jù)時(shí),如圖4所示,首先根據(jù)UDP源端口對(duì)應(yīng)數(shù)據(jù)項(xiàng)的refurbishTick和系統(tǒng)時(shí)間值以及定義的刷新時(shí)間間隔,判斷該表項(xiàng)內(nèi)容是否需要刷新。如果沒到刷新時(shí)間,則繼續(xù)執(zhí)行步驟E。如果需要刷新,則執(zhí)行步驟F。
      E、判斷傳輸?shù)腞TP/RTCP數(shù)據(jù)包的目的IP地址與表項(xiàng)中的RtpRtcpDestIp是否一致,如果相同則繼續(xù)執(zhí)行步驟G。如果不相同,則執(zhí)行步驟F。
      F、根據(jù)傳輸?shù)腞TP/RTCP數(shù)據(jù)包的目的IP地址,使用TCP/IP協(xié)議棧的相關(guān)路由、ARP函數(shù)獲取下一跳的MAC地址。如果成功獲取則刷新ARP表項(xiàng)的refurbishTick、NextHopMacAddr、RtpH248DestIp,并繼續(xù)執(zhí)行所述步驟G。否則通過(guò)TCP/IP UDP SOCKET API發(fā)送這個(gè)RTP/RTCP數(shù)據(jù)包,以便TCP/IP協(xié)議棧刷新ARP表。
      G、直接使用ARP表項(xiàng)中的下一跳MAC地址NextHopMacAddr填充以太網(wǎng)數(shù)據(jù)包的目的MAC地址,快速發(fā)送該RTP/RTCP數(shù)據(jù)包。
      本發(fā)明方法的RTP/RTCP數(shù)據(jù)包的快速發(fā)送方法,如圖3、圖4所示,其包括以下處理步驟H、根據(jù)所述RTP/RTCP應(yīng)用層的情況,初始化全局以太網(wǎng)數(shù)據(jù)幀結(jié)構(gòu),并填充相關(guān)字段。
      I、所述RTP/RTCP應(yīng)用層要發(fā)送實(shí)時(shí)媒體流數(shù)據(jù)包時(shí),需要準(zhǔn)備協(xié)議層數(shù)據(jù)指針、數(shù)據(jù)長(zhǎng)度、源IP地址、目的IP地址、源UDP端口號(hào)、目的UDP端口號(hào)等參數(shù),調(diào)用所述UDP快速發(fā)送模塊提供的RTP/RTCP發(fā)送函數(shù)。
      J、所述UDP快速發(fā)送模塊根據(jù)源UDP端口號(hào)、目的IP地址從PORT_IP_MAC_TABLE中獲取下一跳MAC地址。如果不成功,則通過(guò)TCP/IP UDP SOCKET API發(fā)送這個(gè)RTP/RTCP數(shù)據(jù)包。如果成功,則繼續(xù)執(zhí)行步驟K。
      K、使用已初始化的以太網(wǎng)數(shù)據(jù)幀結(jié)構(gòu),并填充相應(yīng)的字段,如源IP、目的IP、源PORT、目的PORT、源MAC、目的MAC等,以及根據(jù)需要計(jì)算并填充IP、UDP的校驗(yàn)字段。
      L、調(diào)用網(wǎng)口驅(qū)動(dòng)程序即數(shù)據(jù)鏈路層的網(wǎng)口發(fā)送函數(shù)發(fā)送數(shù)據(jù)。
      本發(fā)明方法的RTP/RTCP數(shù)據(jù)包的快速接收方法,如圖3、圖5所示,其包括以下處理步驟M、根據(jù)本發(fā)明系統(tǒng)的本地UDP端口資源的分配情況維護(hù)一個(gè)協(xié)議層回調(diào)函數(shù)注冊(cè)表,如UDP端口號(hào)10000----20000對(duì)應(yīng)的是RTP/RTCP數(shù)據(jù)包,注冊(cè)一個(gè)RTP/RTCP快速接收處理函數(shù)來(lái)接收處理目的端口號(hào)為10000---20000范圍的UDP數(shù)據(jù)包。所述RTP/RTCP快速接收處理函數(shù)主要完成把RTP/RTCP數(shù)據(jù)包寫到RTP/RTCP應(yīng)用層的緩沖區(qū)中。
      N、在網(wǎng)口驅(qū)動(dòng)程序即所述數(shù)據(jù)鏈路層的網(wǎng)口接收函數(shù)中注冊(cè)一個(gè)以太網(wǎng)數(shù)據(jù)包快速接收處理鉤子函數(shù),該鉤子函數(shù)的實(shí)體IP數(shù)據(jù)包快速過(guò)濾模塊分析以太網(wǎng)數(shù)據(jù)包并進(jìn)行過(guò)濾處理。
      O、所述IP數(shù)據(jù)包快速過(guò)濾模塊分析該以太網(wǎng)數(shù)據(jù)包是否為本網(wǎng)口的UDP/IP包。
      P、根據(jù)UDP數(shù)據(jù)包的目的端口號(hào)和RTP/RTCP應(yīng)用層回調(diào)函數(shù)注冊(cè)表,調(diào)用UDP目的端口號(hào)對(duì)應(yīng)的RTP/RTCP應(yīng)用層注冊(cè)的回調(diào)函數(shù)RTP/RTCP快速接收處理函數(shù),由該回調(diào)函數(shù)完成該UDP數(shù)據(jù)包的處理。
      Q、如果IP數(shù)據(jù)包快速過(guò)濾模塊已經(jīng)成功通過(guò)RTP/RTCP應(yīng)用層注冊(cè)的回調(diào)函數(shù)RTP/RTCP快速接收函數(shù)處理,則返回一個(gè)已經(jīng)被處理的標(biāo)記。
      R、如果沒有被處理,則分析是否是免費(fèi)ARP包,如果是,通過(guò)清除PORT_IP_MAC_TABLE表中各表項(xiàng)的refurbishTick使表項(xiàng)中的MAC地址失效。
      S、網(wǎng)口驅(qū)動(dòng)程序的所述網(wǎng)口接收函數(shù),根據(jù)以太網(wǎng)數(shù)據(jù)包快速接收處理鉤子函數(shù)返回的是否已經(jīng)處理標(biāo)記,判斷是否要繼續(xù)傳給所述TCP/IP協(xié)議棧模塊處理。
      綜上所述,本發(fā)明為媒體網(wǎng)關(guān)、IAD(Integrate Access Device綜合接入設(shè)備)、多媒體終端等網(wǎng)絡(luò)節(jié)點(diǎn)揭示了一種基于UDP(User DatagramProtocol用戶數(shù)據(jù)報(bào)協(xié)議)的RTP/RTCP(Real-time Transport Protocol/Real-time Transport Control Protocol實(shí)時(shí)傳輸協(xié)議/實(shí)時(shí)傳輸控制協(xié)議)傳輸實(shí)時(shí)媒體流數(shù)據(jù)包的快速處理方法及其系統(tǒng),這種方法包括快速接收處理基于RTP/RTCP協(xié)議傳輸?shù)膶?shí)時(shí)媒體流數(shù)據(jù)包;快速發(fā)送基于RTP/RTCP協(xié)議傳輸?shù)膶?shí)時(shí)媒體流數(shù)據(jù)包;基于本地UDP端口的策略ARP表及其刷新機(jī)制。其中快速接收包括實(shí)時(shí)媒體流數(shù)據(jù)包到達(dá)網(wǎng)口驅(qū)動(dòng)程序接收函數(shù)(數(shù)據(jù)鏈路層)后,經(jīng)過(guò)新增的IP(Internet Protocol網(wǎng)際協(xié)議)數(shù)據(jù)包快速過(guò)濾模塊,跳過(guò)現(xiàn)有技術(shù)的TCP/IP協(xié)議棧模塊,直接通過(guò)所述基于本地UDP端口注冊(cè)的RTP/RTCP快速接收處理函數(shù),將實(shí)時(shí)媒體流數(shù)據(jù)包直接傳輸?shù)絉TP/RTCP應(yīng)用層任務(wù)的緩沖區(qū)中。而快速發(fā)送包括所述RTP/RTCP應(yīng)用層任務(wù)發(fā)送實(shí)時(shí)媒體流數(shù)據(jù)包時(shí)直接調(diào)用新增的UDP數(shù)據(jù)包快速發(fā)送處理函數(shù)經(jīng)過(guò)UDP快速發(fā)送模塊的處理,最后調(diào)用網(wǎng)口驅(qū)動(dòng)程序的網(wǎng)口發(fā)送函數(shù)發(fā)送數(shù)據(jù)包,不經(jīng)過(guò)所述TCP/IP協(xié)議棧模塊,充分利用RTP/RTCP傳輸實(shí)時(shí)媒體流的特征,由所述UDP快速發(fā)送模塊維護(hù)基于本地UDP端口策略ARP表完成下一跳MAC地址的獲取。由此,本發(fā)明的系統(tǒng)和方法,相對(duì)于傳統(tǒng)的TCP/IP協(xié)議棧及SOCKET編程的偵聽接收與發(fā)送,使用本發(fā)明可快速處理實(shí)時(shí)媒體流數(shù)據(jù)包,提高設(shè)備的處理能力,減少媒體流數(shù)據(jù)包的網(wǎng)絡(luò)時(shí)延,從而提高網(wǎng)絡(luò)服務(wù)質(zhì)量。
      應(yīng)當(dāng)理解的是,對(duì)本發(fā)明的同領(lǐng)域普通技術(shù)人員來(lái)說(shuō),可以根據(jù)本發(fā)明的技術(shù)方案及其構(gòu)思做出各種可能的改變或變形,而所有這些改變或變形都應(yīng)屬于本發(fā)明所附權(quán)利要求的保護(hù)范圍。
      權(quán)利要求
      1.一種快速處理實(shí)時(shí)媒體流數(shù)據(jù)包的系統(tǒng),其包括一IP數(shù)據(jù)包快速過(guò)濾模塊、一UDP快速發(fā)送模塊以及一基于本地UDP端口策略ARP表處理模塊;所述系統(tǒng)還包括一基于UDP端口注冊(cè)的RTP/RTCP快速接收處理函數(shù),所述RTP/RTCP快速接收處理函數(shù)位于RTP/RTCP應(yīng)用層內(nèi);所述基于本地UDP端口策略ARP表處理模塊與所述IP數(shù)據(jù)包快速過(guò)濾模塊和所述UDP快速發(fā)送模塊通訊連接,并且所述基于本地UDP端口策略ARP表處理模塊根據(jù)設(shè)備RTP/RTCP協(xié)議端口資源的分配情況以及RTP/RTCP協(xié)議端口的特征,構(gòu)造一個(gè)以端口映射值為下標(biāo)的ARP表;所述IP數(shù)據(jù)包快速過(guò)濾模塊在數(shù)據(jù)鏈路層接收函數(shù)中,安裝快速接收鉤子函數(shù);所述鉤子函數(shù)用于分析以太網(wǎng)數(shù)據(jù)包的內(nèi)容;RTP/RTCP應(yīng)用層在所述鉤子函數(shù)中注冊(cè)UDP端口對(duì)應(yīng)的RTP/RTCP快速接收處理函數(shù);所述UDP快速發(fā)送模塊用于在所述RTP/RTCP應(yīng)用層任務(wù)發(fā)送實(shí)時(shí)媒體流數(shù)據(jù)包時(shí)直接調(diào)用所述UDP快速發(fā)送模塊提供的發(fā)送函數(shù),經(jīng)過(guò)該UDP快速發(fā)送模塊的處理,最后調(diào)用對(duì)應(yīng)的網(wǎng)口發(fā)送函數(shù)把數(shù)據(jù)發(fā)送出去;所述IP數(shù)據(jù)包快速過(guò)濾模塊用于把實(shí)時(shí)媒體流數(shù)據(jù)包從一網(wǎng)口接收函數(shù)接收后,傳輸給所述RTP/RTCP快速接收處理函數(shù),從而直接傳輸?shù)剿鯮TP/RTCP應(yīng)用層的任務(wù)的緩沖區(qū)中。
      2.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,該系統(tǒng)還包括一TCP/IP協(xié)議棧模塊,所述UDP快速發(fā)送模塊還在無(wú)法完成數(shù)據(jù)包發(fā)送的情況下,通過(guò)TCP/IP協(xié)議棧模塊使用SOCKET API發(fā)送數(shù)據(jù)包。
      3.根據(jù)權(quán)利要求2所述的系統(tǒng),其特征在于,所述ARP表中的信息主要有數(shù)據(jù)包的目的IP地址、下一跳的MAC地址、該表項(xiàng)上次刷新時(shí)間。
      4.根據(jù)權(quán)利要求3所述的系統(tǒng),其特征在于,所述鉤子函數(shù)分析以太網(wǎng)數(shù)據(jù)包的內(nèi)容包括分析是否是IP數(shù)據(jù)包,如果是進(jìn)一步分析是否是UDP數(shù)據(jù)包,如果是進(jìn)一步分析是否是已經(jīng)注冊(cè)了的UDP端口范圍的數(shù)據(jù)包,如果是則調(diào)用對(duì)應(yīng)的基于UDP端口注冊(cè)的RTP/RTCP快速接收處理函數(shù),將實(shí)時(shí)媒體流數(shù)據(jù)包直接傳輸?shù)絉TP/RTCP應(yīng)用層任務(wù)的緩沖區(qū)中。
      5.根據(jù)權(quán)利要求3所述的系統(tǒng),其特征在于,所述鉤子函數(shù)分析以太網(wǎng)數(shù)據(jù)包的內(nèi)容還包括分析是否是IP數(shù)據(jù)包,如果不是鉤子函數(shù)實(shí)體進(jìn)一步解析是否是免費(fèi)ARP包,如果是則啟動(dòng)基于本地UDP端口策略的ARP表刷新機(jī)制,使策略ARP表無(wú)效。
      6.一種如權(quán)利要求1所述的快速處理實(shí)時(shí)媒體流數(shù)據(jù)包的方法,其包括以下步驟a)所述基于本地UDP端口策略ARP表處理模塊根據(jù)設(shè)備RTP/RTCP協(xié)議端口資源的分配情況以及RTP/RTCP協(xié)議端口的特征,構(gòu)造一個(gè)以端口映射值為下標(biāo)的ARP表;b)上層應(yīng)用調(diào)用所述UDP快速發(fā)送模塊發(fā)送RTP/RTCP數(shù)據(jù)包,根據(jù)所述RTP/RTCP數(shù)據(jù)包的目的IP地址,使用傳統(tǒng)TCP/IP協(xié)議棧的相關(guān)接口函數(shù)獲取下一跳的MAC地址;c)如果成功獲取下一跳的MAC地址則刷新ARP表項(xiàng)中的下一跳的MAC地址并直接發(fā)送該RTP/RTCP數(shù)據(jù)包,此后如果在該UDP端口上所發(fā)送的目的IP地址不變且端口ARP表未到老化時(shí)間,則均直接使用ARP表項(xiàng)中的下一跳MAC地址填充以太網(wǎng)數(shù)據(jù)包的目的MAC地址,快速發(fā)送該RTP/PTCP數(shù)據(jù)包;d)如果不能獲取下一跳的MAC地址,則需要通過(guò)TCP/IP UDPSOCKET API發(fā)送這個(gè)RTP/RTCP數(shù)據(jù)包,以便TCP/IP協(xié)議棧獲得下一跳MAC地址并刷新協(xié)議棧ARP表,在該端口的下一個(gè)數(shù)據(jù)包發(fā)送時(shí),就可成功獲取下一跳的MAC地址并刷新基于本地UDP端口的策略ARP表項(xiàng)中的下一跳的MAC地址。
      7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述方法包括RTP/RTCP數(shù)據(jù)包的快速發(fā)送方法,其包括以下處理步驟a1)根據(jù)所述RTP/RTCP應(yīng)用層的情況,初始化全局以太網(wǎng)數(shù)據(jù)幀結(jié)構(gòu),并填充相關(guān)字段;a2)所述RTP/RTCP應(yīng)用層在發(fā)送實(shí)時(shí)媒體流數(shù)據(jù)包時(shí),準(zhǔn)備協(xié)議層數(shù)據(jù)指針、數(shù)據(jù)長(zhǎng)度、源IP地址、目的IP地址、源UDP端口號(hào)、目的UDP端口號(hào)等參數(shù),調(diào)用所述UDP快速發(fā)送模塊提供的RTP/RTCP發(fā)送函數(shù)a3)所述UDP快速發(fā)送模塊根據(jù)源UDP端口號(hào)、目的IP地址從ARP表中獲取下一跳MAC地址;如果獲取不成功,則通過(guò)TCP/IP協(xié)議棧模塊發(fā)送這個(gè)RTP/RTCP數(shù)據(jù)包;a4)如果獲取成功,使用已初始化的以太網(wǎng)數(shù)據(jù)幀結(jié)構(gòu),并填充相應(yīng)的字段,以及根據(jù)需要計(jì)算并填充IP、UDP的校驗(yàn)字段;a5)調(diào)用網(wǎng)口發(fā)送函數(shù)發(fā)送數(shù)據(jù)包。
      8.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述方法的RTP/RTCP數(shù)據(jù)包的快速接收方法,其包括以下處理步驟b1)根據(jù)所述系統(tǒng)的本地UDP端口資源的分配情況維護(hù)一個(gè)協(xié)議層回調(diào)函數(shù)注冊(cè)表,注冊(cè)一RTP/RTCP快速接收處理函數(shù)來(lái)接收處理目的端口號(hào)對(duì)應(yīng)的UDP數(shù)據(jù)包,所述RTP/RTCP快速接收處理函數(shù)完成把RTP/RTCP數(shù)據(jù)包寫到RTP/RTCP應(yīng)用層的緩沖區(qū)中b2)在網(wǎng)口接收函數(shù)中注冊(cè)一以太網(wǎng)數(shù)據(jù)包快速接收處理鉤子函數(shù),該鉤子函數(shù)的實(shí)體為所述IP數(shù)據(jù)包快速過(guò)濾模塊,用以分析所述以太網(wǎng)數(shù)據(jù)包是否為本網(wǎng)口的UDP/IP數(shù)據(jù)包并進(jìn)行過(guò)濾處理;b3)根據(jù)所述UDP數(shù)據(jù)包的目的端口號(hào)和RTP/RTCP應(yīng)用層回調(diào)函數(shù)注冊(cè)表,調(diào)用UDP目的端口號(hào)對(duì)應(yīng)的RTP/RTCP應(yīng)用層注冊(cè)的回調(diào)函數(shù)RTP/RTCP快速接收處理函數(shù),由該回調(diào)函數(shù)完成該UDP數(shù)據(jù)包的處理b4)如果所述IP數(shù)據(jù)包快速過(guò)濾模塊已經(jīng)成功通過(guò)RTP/RTCP應(yīng)用層注冊(cè)的回調(diào)函數(shù)RTP/RTCP快速接收函數(shù)處理,則返回一個(gè)已經(jīng)被處理的標(biāo)記;b5)網(wǎng)口接收函數(shù)根據(jù)以太網(wǎng)數(shù)據(jù)包快速接收處理鉤子函數(shù)返回的是否已經(jīng)處理標(biāo)記,判斷是否要繼續(xù)傳給所述TCP/IP協(xié)議棧模塊處理。
      9.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述步驟b4)后如果沒有被處理,則分析是否是免費(fèi)ARP包;在網(wǎng)口接收函數(shù)上收到免費(fèi)ARP包時(shí),使ARP表項(xiàng)中的MAC地址失效,以便隨后發(fā)RTP/RTCP數(shù)據(jù)包時(shí)主動(dòng)從所述TCP/IP協(xié)議棧重新獲取下一跳MAC并刷新ARP表。
      10.根據(jù)權(quán)利要求6~9任一權(quán)項(xiàng)所述的方法,其特征在于,在所述步驟d)定義一刷新時(shí)間間隔,以定時(shí)刷新所述基于本地UDP端口的策略ARP表。
      全文摘要
      本發(fā)明的一種快速處理實(shí)時(shí)媒體流數(shù)據(jù)包的方法及其系統(tǒng),為媒體網(wǎng)關(guān)、綜合接入設(shè)備IAD、多媒體終端等網(wǎng)絡(luò)節(jié)點(diǎn)揭示了一種基于用戶數(shù)據(jù)報(bào)協(xié)議UDP的實(shí)時(shí)傳輸協(xié)議/實(shí)時(shí)傳輸控制協(xié)議RTP/RTCP傳輸實(shí)時(shí)媒體流數(shù)據(jù)包的快速處理方法及其系統(tǒng)。該系統(tǒng)改進(jìn)點(diǎn)在于增加了IP數(shù)據(jù)包快速過(guò)濾模塊、UDP快速發(fā)送模塊和基于本地UDP端口策略ARP表處理模塊。這種方法包括快速接收處理基于RTP/RTCP協(xié)議傳輸?shù)膶?shí)時(shí)媒體流數(shù)據(jù)包;快速發(fā)送基于RTP/RTCP協(xié)議傳輸?shù)膶?shí)時(shí)媒體流數(shù)據(jù)包;基于UDP端口策略ARP表及其刷新機(jī)制。相對(duì)于傳統(tǒng)的TCP/IP協(xié)議棧及SOCKET編程的偵聽接收與發(fā)送,使用本發(fā)明可快速處理實(shí)時(shí)媒體流數(shù)據(jù)包,提高設(shè)備的處理能力,減少媒體流數(shù)據(jù)包的網(wǎng)絡(luò)時(shí)延,從而提高網(wǎng)絡(luò)服務(wù)質(zhì)量。
      文檔編號(hào)H04L29/06GK1558623SQ20041001514
      公開日2004年12月29日 申請(qǐng)日期2004年1月15日 優(yōu)先權(quán)日2004年1月15日
      發(fā)明者湖 黃, 黃湖, 何延偉, 朱蓉俊 申請(qǐng)人:中興通訊股份有限公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1