新四季網

一種在網際網路上傳輸實時多媒體數據的方法

2023-06-20 06:00:46 1

專利名稱:一種在網際網路上傳輸實時多媒體數據的方法
技術領域:
本發明屬於多媒體軟體開發領域,具體地說,涉及一種在網際網路上傳輸實時多媒體數據的方法。
背景技術:
一般而言,多媒體視頻會議系統的伺服器端都位於internet上,擁有各自獨立的IP位址,但大多數會議系統的客戶端卻都是位於NAT設備之後,通過NAT設備連接到Internet,這樣的結構給多媒體視頻會議系統的開發帶來了很多問題,例如,通常情況下NAT設備被配置為不允許外部的主動連接,因此會議系統的伺服器很難直接向NAT內的用戶主動發送音視頻數據。
為了突破NAT的限制,H323等系統的做法是,配置NAT設備,對外部網絡開放某些埠,利用NAT設備向內部網絡的某臺主機轉發數據。這種做法缺乏靈活性,並且要求具有NAT設備的管理員權限,對於普通用戶而言,難以實現。
因此,NSPD的做法是在系統的網絡協議棧中安裝新的協議層,位於NAT內部和外部的客戶端與伺服器上分別安裝同樣的協議,在這一協議層中完成了NAT防火牆的穿越功能。它通過標準的套接字接口給應用程式提供服務,並給來自上層應用程式的多媒體數據添加新的報文頭,然後將封包後的數據轉交給更低層的系統UDP傳輸層,這一方法符合網絡的分層設計原則,並且能夠很快應用到原有的系統中。
綜上所述,本發明的任務在於解決NAT給多媒體應用帶來的通訊問題,同時NSPD還結合系統協議的性質,可以實現多媒體數據的安全加密與QoS控制等。
本發明的目的是解決NAT給多媒體應用帶來的通訊問題,在UDP協議的基礎上實現了一個新的網絡協議,能夠廣泛的用於各種多媒體應用程式,提供跨躍NAT防火牆的多媒體實時通訊技術。

發明內容
針對上面的上面的描述,本發明提出了一種在網際網路上傳輸實時多媒體數據的方法,並具體包括以下步驟(A)NSPD將新的數據報文接收到緩衝區中;(B)如果緩衝區滿則丟棄某些舊報文並重新分配;如果緩衝區未滿則進入下列步驟;(C)根據報文頭部的信息來判斷該報文是不是正確的NSPD報文,若不是正確的NSPD報文,則丟棄報文並回收緩衝區;若是正確的NSPD報文,則進入下列步驟;(D)遍歷NSPD套接字控制塊列表,檢索出該報文所屬的套接字;(E)在檢索出正確的套接字控制之後,新的報文接入控制塊的報文隊列裡,等待應用程式的進一步處理。
根據本發明的一個方面,其中步驟(C)進一步包括首先檢查報文類型的值,如果是0x8048001,則表明這是NSPD穿越報文,否則表明這可能是NSPD虛擬埠值。
根據本發明的另一個方面,進一步包括步驟(F)檢查套接字IO模式。
根據本發明的另一個方面,其中若是調用WSAAsynSelect,則根據該API的參數填充了套接字控制塊的相應欄位,將報文到達消息投遞到SOCKET窗口,應用程式即可接收到SOCKET消息,並且應用程式返回並取走報文。
根據本發明的另一個方面,其中若是調用WSAEventSelect,則NSPD根據其參數填充套接字控制塊中的相應欄位,接收網絡事件的事件句柄,這樣應用程式即可接收到網絡事件通知,並且應用程式返回並取走報文。
根據本發明的另一個方面,其中若是調用阻塞IO,則激活阻塞IO的事件句柄,並且應用程式返回並取走報文。


圖1示出了NSPD在網絡協議棧中的相對位置;圖2給出了識別來自不同內部網絡的客戶端的流程;圖3給出了應用程式與NSPD SOCKET的關係;圖4給出了NSPD報文接收流程圖;具體實施方式
對下面我們參考附圖,對本發明的實施例進行詳細的說明。
NSPD是一個獨立的網絡層服務,位於系統的網絡協議棧中,可以被應用程式選擇使用。圖1示出了NSPD在網絡協議棧中的相對位置,按照網絡協議的分層原則,它位於UDP傳輸層與應用層之間。NSPD的處於網絡協議棧的中間位置,它向上提供一組調用接口,為應用程式提供服務,並且能同時接納多個應用程式並發執行,向下,NSPD依賴於系統的UDP傳輸層模塊,在網絡上完成實際的數據交換,並在內部集成穿越NAT防火牆的功能,對於上層的應用程式透明。
應用程式通過NSPD提供的API接口間接的訪問系統網絡層,這些接口的功能應當儘可能完善和易於使用。根據它們各自的功能可以歸納為以下幾類。
1、創建和撤銷NSPD套接字在應用程式要求使用NSPD時,NSPD應當為其提供一個全局唯一的標識,不妨稱之為」NSPD套接字」。與Berkeley套接字類似,應用程式根據NSPD套接字完成所有的網絡通信,一個應用程式可以創建多個NSPD套接字,分別完成各自的網絡操作,且相互之間不會有影響。以套接字為基礎,NSPD為應用程式提供其他的API。
每一個套接字在NSPD內部對應一個相應的數據結構,我們稱之為套接字控制塊,在控制塊中了保存了所有與套接字相關的信息。套接字的生存期從應用程式創建開始,直到被應用程式撤銷。NSPD維護這些套接字的信息,在應用程式發生異常時,自行撤銷相應的套接字控制塊。
應用程式通過相應的接口通過NSPD發送或接收數據包。發送時,NSPD為報文附加新的欄位,與報文內容作為一個整體在網絡上傳輸,接收時,NSPD根據附加欄位的內容,將報文內容投遞給正確的套接字。
網絡應用程式通過IO模式來獲取數據,大多數這類程序在接收報文的過程中,都具有以下兩種不同的狀態1.等待,直到可以接收數據2.將報文從網絡層複製到應用程式按照這種方式,對施加於NSPD套接字的接收過程而言,第一步通常是等待報文從網絡上達到NSPD,報文到達後,被接收到NSPD的網絡緩衝區中,第二步,將其從NSPD的緩衝區中複製到應用程式的緩衝區。為了提高效率,NSPD應當儘量減少報文複製的次數。
以這些狀態為基礎,NSPD提供了一些基本的IO模式,能滿足大多數應用程式的需求。
(1)阻塞模式套接字調用報文接收的API時,向NSPD傳達希望接收報文的訊號,然後一直處於阻塞狀態。當網絡數據從NSPD達到該套接字的虛擬埠後,API調用返回,應用程式從NSPD的緩衝區中獲得數據。
(2)信號驅動模式在準備接收報文之前,套接字需要設置好報文接收例程,並可以立即返回,繼續其他的操作。此後,每當有數據抵達該套接字,NSPD都會發送相應的信號給應用程式,自動調用前面設置好的報文接收例程。在例程中,應用程式將數據從NSPD的緩衝區中複製到自己的緩衝區裡。
應用程式對這些接口的調用具有隨意性和不可預測性,因此NSPD在內部維護一組與應用程式相關的機制,以保證NSPD的穩定性和健壯性,這些機制包括虛擬埠映射、防火牆穿越機制和緩衝區管理等。
為了減少系統資源的佔用,NSPD被設計為只佔用一個UDP埠,不同主機上的NSPD模塊都約定好使用同樣的埠。這樣一來,當有多個應用程式使用NSPD發送和接受數據時,就需要對報文的目的地址做進一步區分,為此我們在NSPD中引入了虛擬埠的概念。虛擬埠是一個16位正整數,每一個NSPD套接字都被綁定到一個全局唯一的虛擬埠上。發送報文時,NSPD將它的值附加到每一個報文中,作為UDP數據包的一部分在網絡上傳輸,在接收報文時,NSPD根據虛擬埠的值,確定接收者的套接字,並且根據該套接字的IO模式,投遞正確的信號給創建套接字的應用程式。
NSPD嚴格區分位於NAT防火牆內外兩種不同的網絡環境,對內稱之為NSPD客戶端,對外稱之為NSPD伺服器。客戶端位於內部網絡,使用內網IP位址,而伺服器位於外部網絡,它們被NAT設備阻隔。
利用NAT的原理,客戶端需要主動往伺服器發送一些數據,目的是在NAT設備上建立NAT地址到客戶端內網地址的映射關係,一旦這種映射關係被建立,伺服器就能通過NAT設備上對應的埠向客戶端轉發數據。
圖3給出了自動識別來自不同內部網絡的客戶端的流程圖,按照報文所處位置的不同,將流程分為三個步驟。
1.客戶端到NAT客戶端套接字記錄下本機的IP位址和虛擬埠,並將其發往伺服器。未經過NAT設備之前,報文的UDP頭部中的源地址與源埠均為客戶端的本地地址,即內網地址。
2.經過NAT設備NAT設備根據自身的規則,將報文的UDP頭部中的源地址與源埠替換為NAT設備擁有的Internet註冊的地址和埠,並記錄修改前的源地址和源埠。
3.NAT到伺服器報文到達伺服器之後,伺服器記錄兩個地址UDP頭部中的地址,即NAT地址;報文內容中記錄的客戶端地址(包括埠),即內網地址。這兩個地址保存在伺服器端的地址映射表中。
NSPD伺服器的地址映射表的每一項對應一個位於內部網絡的客戶端,當外部網絡上的應用程式通過NSPD往內網發送報文時,只需要根據內網地址和埠反查出NAT地址和埠,然後將報文發送到NAT地址即可。
下面對網絡報文抵達NSPD之後的緩衝區管理進行說明,它具有以下特點高效率NSPD最初是為多媒體網絡應用程式設計,這類程序具有網絡流量大,對實時性要求高等特點,因此NSPD應當儘量減少報文的複製次數和緩衝帶來的延遲,提高效率。
穩定NSPD為每個應用程式都保存了一定的信息,甚至為其緩衝了大量的網絡報文,在應用程式發生異常時,很可能來不及回收這些資源。NSPD需要防止這種情況引起的資源洩漏,保證自身的處理能力。
圖3給出了根據Windows SPI的設計,應用程式調用WSASocket函數,而Winsock會根據函數調用時提供的地址家族,套接字類型和協議參數等來決定需要加載哪個服務提供者。對於NSPD而言,只要提供對應的協議參數,就可以加載NSPD服務提供者。通常應用程式採用如下的方式來創建NSPD套接字WSAPROTOCOL_INFO info;GetNSPDProviders(info); //獲取NSPD協議參數sock=WSASocket(AF_INET,SOCK_DGRAM,0,info,0,0);在創建完NSPD套接字之後,應用程式實際上選擇了使用NSPD服務提供者。NSPD服務提供者以DLL的形式存在,該DLL導入了一個名為WSPStartup的單一函數條目。在應用程式(NSPD客戶機)調用WSPStartup時,便通過一個被當作參數投送的函數派遣表來打開其他的NSPD函數,NSPD服務提供者就是由這些函數組成,它們與Winsock API的對應關係如下表所示

應用程式創建NSPD套接字之後,與該套接字相應的Winsock API調用都會映射到表格左邊的NSPD服務提供者中對應的API中來,舉例而言,對NSPD套接字的bind操作最終會由NSPD服務提供者中的WSPBind函數來完成。
NSPD服務提供者實際上接管了應用程式對Winsock API的調用,在其內部維護一組NSPD套接字控制塊。每一個NSPD套接字控制塊對應於應用程式中的某一個NSPD套接字,在控制塊中保留了大量的與NSPD套接字相關的信息,下表列出了其中的部分關鍵信息

根據表中與套接字IO模式相關的欄位,NSPD實現了三種不同的Winsock IO模式,即WSAAsynSelect、WSAEventSelect與Blocked IO等。這三種模式已經基本上能滿足大部分應用程式的要求。
如附圖3所示,NSPD維護的套接字控制塊列表的大小為三,應用程式中創建的某個套接字的報文隊列中有四個報文尚待接收,而NSPD報文緩衝區中當前有六個報文,其他兩個報文的歸屬沒有在圖中標出。
圖2給出了NSPD模塊在UDP的8848埠接收報文,當有報文到達該埠時,立即開始NSPD的報文接收和處理流程。
首先,NSPD試圖從緩衝區中分配空間來存放新的數據報文,報文被直接接收到共享內存當中,這樣一來,應用程式就可以直接從共享內存中獲取報文,減小了報文的複製次數,提高了系統的效率。在緩衝區分配失敗的情況下,NSPD會檢查報文緩衝區,按照規則回收一部分緩衝區。在NSPD的報文緩衝區中,報文按照如下的格式進行緩存


相應的,NSPD報文的頭部定義如下

NSPD中的報文分為兩種類型,一種是普通的NSPD數據報文,另一種為NSPD穿越報文,用於從NAT防火牆內部穿越NAT,建立數據鏈路,穿越報文的格式定義如下

綜上所述,兩種報文合而為一,採用C語言定義為   struct nsppkt{   UINT m_typ;   int m_len;  union{   char M_Dat[NSPDATALEN];   struct tag_m_addrPair{   UINT m_ip;   UINT m_port;   }m_addr;  };   };將報文接收到緩衝區之後,就可以根據報文頭部的信息來判斷該報文是不是正確的NSPD報文了。首先檢查報文類型的值,如果是0x8048001,則表明這是NSPD穿越報文,否則的話就表示這可能是NSPD的虛擬埠值,進一步的,通過遍歷NSPD套接字控制塊列表,就能夠檢索出該報文所屬的套接字或者斷定該報文為非法報文。
在檢索出正確的套接字控制塊後,新的報文會接入控制塊的報文隊列裡,等待應用程式的進一步處理。
前面提到,NSPD支持三種不同的Winsock IO模型,分別是WSAAsynSelect、WSAEventSelect和Blocked IO模式。NSPD將報文放到套接字控制塊中的報文列表中以後,會根據該套接字的IO模式分別進行處理,通知應用程式將報文從隊列中取走。下面分別介紹●WSAAsynSelect在應用程式調用WSAAsynSelect時,NSPD已經根據該API的參數填充了套接字控制塊的相應欄位,它們是接收SOCKET消息的窗口句柄、SOCKET消息值等。因此只需要投遞註冊的Windows消息到正確的窗口句柄,應用程式即可通過recvfrom函數將接收報文。
●WSAEventSelect同樣的,在應用程式調用WSAEventSelect時,NSPD也會根據其參數填充套接字控制塊中的相應欄位,如接收網絡事件的事件句柄等。NSPD會將該事件置於有信號狀態,這樣一來,應用程式就能從WSAWaitforSingleObject等函數中返回,通過API接收報文。
●BlockedIONSPD使得處於阻塞狀態的recvfrom函數返回應用程式,直接將數據報文返回給應用程式。
對於本領域的普通技術人員來說可顯而易見的得出其他優點和修改。因此,具有更廣方面的本發明並不局限於這裡所示出的並且所描述的具體說明及示例性實施例。因此,在不脫離由隨後權利要求及其等價體所定義的一般發明構思的精神和範圍的情況下,可對其作出各種修改。
權利要求
1.一種在網際網路上傳輸實時多媒體數據的方法,包括(A)NSPD將新的數據報文接收到緩衝區中;(B)如果緩衝區滿則丟棄某些舊報文並重新分配;如果緩衝區未滿則進入下列步驟;(C)根據報文頭部的信息來判斷該報文是不是正確的NSPD報文,若不是正確的NSPD報文,則丟棄報文並回收緩衝區;若是正確的NSPD報文,則進入下列步驟;(D)遍歷NSPD套接字控制塊列表,檢索出該報文所屬的套接字;(E)在檢索出正確的套接字控制之後,新的報文接入控制塊的報文隊列裡,等待應用程式的進一步處理。
2.根據權利要求1的方法,其中步驟(C)進一步包括首先檢查報文類型的值,如果是0x8048001,則表明這是NSPD穿越報文,否則表明這可能是NSPD虛擬埠值。
3.根據權利要求1的方法,進一步包括步驟(F)檢查套接字IO模式。
4.根據權利要求3的方法,其中若是調用WSAAsynSelect,則根據該API的參數填充了套接字控制塊的相應欄位,將報文到達消息投遞到SOCKET窗口,應用程式即可接收到SOCKET消息,並且應用程式返回並取走報文。
5.根據權利要求3的方法,其中若是調用WSAEventSelect,則NSPD根據其參數填充套接字控制塊中的相應欄位,接收網絡事件的事件句柄,這樣應用程式即可接收到網絡事件通知,並且應用程式返回並取走報文。
6.根據權利要求3的方法,其中若是調用阻塞IO,則激活阻塞IO的事件句柄,並且應用程式返回並取走報文。
全文摘要
本發明提出了一種在網際網路上傳輸實時多媒體數據的方法,並具體包括以下步驟(A)NSPD將新的數據報文接收到緩衝區中;(B)如果緩衝區滿則丟棄某些舊報文並重新分配;如果緩衝區未滿則進入下列步驟;(C)根據報文頭部的信息來判斷該報文是不是正確的NSPD報文,若不是正確的NSPD報文,則丟棄報文並回收緩衝區;若是正確的NSPD報文,則進入下列步驟;(D)遍歷NSPD套接字控制塊列表,檢索出該報文所屬的套接字;(E)在檢索出正確的套接字控制之後,新的報文接入控制塊的報文隊列裡,等待應用程式的進一步處理。
文檔編號H04L12/56GK1588914SQ20041007049
公開日2005年3月2日 申請日期2004年8月5日 優先權日2004年8月5日
發明者喻湘寧, 金天, 盛向治, 李未 申請人:北京航空航天大學

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀