音影片處理技術中的IP組播技術

bbbrrr123發表於2014-11-14

Internet上,多媒體業務諸如:流媒體,視訊會議和影片點播等,正在成為資訊傳送的重要組成部分。點對點傳輸的單播方式不能適應這一類業務傳輸特性--單點傳送多點接收,因為伺服器必須為每一個接收者提供一個相同內容的IP報文複製,同時網路上也重複地傳輸相同內容的報文,佔用了大量資源。雖然IP廣播允許一個主機把一個IP報文傳送給同一個網路的所有主機,但是由於不是所有的主機都需要這些報文,因而浪費了網路資源。在這種情 況下組播(multicast)應運而生,它的出現解決了一個主機向特定的多個接收者傳送訊息的方法。1989年,IETF透過RFC1112,定義了 Internet上的組播方式。

    IP組播是指一個IP報文向一個“主機組”的傳送,這個包含零個或多個主機的主機組由一個單獨的IP地址標識。主機組地址也稱為“組播地址”,或者D類地址。除了目的地址部分,組播報文與普通報文沒有區別,網路盡力傳送組播報文但是並不保證一定送達。

    主機組的成員可以動態變化,主機有權選擇加入或者退出某個主機組。主機可以加入多個主機組,也可以向自己沒有加入的主機組傳送資料。主機組有兩種:永久組和 臨時組。永久組的IP地址是周知的,由Internet管理機構分配,是保留地址。臨時組的地址則使用除永久組地址外的非保留D類地址。

    IP組播分組在網際網路上的轉發由支援組播的路由器來處理。主機發出的IP組播分組在本子網內被所有主機組成員接收,同時與該子網直接相連的組播路由器會把組播報文 轉發到所有包含該主機組成員的網路上。組播報文傳遞的範圍由報文的生存期值(TTL, Time-to-Live)決定,如果TTL值等於或者小於設定的路由器埠TTL門限值(TTL Threshold),路由器將不再轉發該報文。

單個資料流可以傳送到多個客戶端的組播能力已成為大多數多媒體應用的傳輸手段。組播技術利用一個IP地址使IP資料包文 傳送到使用者組。IP組播採用了特殊定義的目的IP地址和目的MAC地址。IGMP為客戶端提供加入和離開組播組的方式。CGMP使路由器為交換機配置組播 轉發表,並告訴交換機當前的組播成員。指派路由器根據對網路中的組播成員的分佈和使用的不同採用密集模式DM或稀疏模式SM組播路由協議來構造組播的分佈 樹,而這個分佈樹將在源子網和組播組之間確定一條唯一路徑以提高資料傳輸效率。

IP組播技術需要三層交換機,或路由器支援,通常應用於專用網路,如:教育網、**網以及企業內部網等,使用IP組播技術可以極大的降低資料傳送方的頻寬要求,最大的好處是可以讓資料接收方的數量成千上萬,而不會造成網路的阻塞。

AnyChat Platform Core SDK V4.0新增了對IP組播技術的支援,下面介紹如何使用相關的API介面,典型的加入多播組,並向多播組傳送資料的程式碼如下:

 

1.// 設定本地組播策略

2.DWORD dwMultiCastPolitic = 1;

3.BRAC_SetSDKOption(BRAC_SO_NETWORK_MULTICASTPOLITIC,(constchar*)&dwMultiCastPolitic,sizeof(DWORD));

4. 

5.// 加入多播組

6.DWORD dwFlags = BRAC_MCFLAGS_JOINGROUP | BRAC_MCFLAGS_SENDDATA | BRAC_MCFLAGS_RECVDATA;

7.BRAC_MultiCastControl("224.2.3.4", 9810, "", 5, dwFlags);

 

上面的程式碼中“dwFlags”標誌指示加入多播組“224.2.3.4:9810”,本地的資料透過該多播組進行傳輸,同時,自己也從該多播組接收其它使用者的音影片資料。

 

當需要本地傳送組播資料時,設定本地組播策略是必須的,因為系統預設是採用伺服器所配置的網路資料傳輸策略(AnyChatCoreServer.ini中的“RoutingPolicy”配置項)進行資料傳送,如不設定本地組播策略,則不會向組播地址傳送資料,設定之後,可以將本地的資料傳送多個組播地址和埠,如下面的程式碼表示音影片資料將向“224.2.3.4:9810”、“224.2.3.4:9812”兩個組播埠廣播資料:

 

1.// 設定本地組播策略

2.DWORD dwMultiCastPolitic = 1;

3.BRAC_SetSDKOption(BRAC_SO_NETWORK_MULTICASTPOLITIC,(constchar*)&dwMultiCastPolitic,sizeof(DWORD));

4. 

5.// 加入多播組

6.DWORD dwFlags = BRAC_MCFLAGS_JOINGROUP | BRAC_MCFLAGS_SENDDATA;

7.BRAC_MultiCastControl("224.2.3.4", 9810, "", 5, dwFlags);

8.BRAC_MultiCastControl("224.2.3.4", 9812, "", 5, dwFlags);

當系統有多塊網路卡,而需要向其中某一塊網路卡連線的網路進行組播時,可透過“BRAC_MultiCastControl”的第三個引數來指定即可,第三個引數是指定網路卡的IP地址。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30004768/viewspace-1332622/,如需轉載,請註明出處,否則將追究法律責任。

相關文章