首页 > 代码库 > 音视频SDK开发 IP组播技术
音视频SDK开发 IP组播技术
在Internet上,多媒体业务诸如:流媒体,视频会议和视频点播等,正在成为信息传送的重要组成部分。点对点传输的单播方式不能适应这一类业务传输特性--单点发送多点接收,因为服务器必须为每一个接收者提供一个相同内容的IP报文拷贝,同时网络上也重复地传输相同内容的报文,占用了大量资源。如图 1.1所示。虽然IP广播允许一个主机把一个IP报文发送给同一个网络的所有主机,但是由于不是所有的主机都需要这些报文,因而浪费了网络资源。在这种情况下组播(multicast)应运而生,它的出现解决了一个主机向特定的多个接收者发送消息的方法。1989年,IETF通过RFC1112,定义了 Internet上的组播方式。
IP组播是指一个IP报文向一个“主机组”的传送,这个包含零个或多个主机的主机组由一个单独的IP地址标识。主机组地址也称为“组播地址”,或者D类地址。除了目的地址部分,组播报文与普通报文没有区别,网络尽力传送组播报文但是并不保证一定送达。
主机组的成员可以动态变化,主机有权选择加入或者退出某个主机组。主机可以加入多个主机组,也可以向自己没有加入的主机组发送数据。主机组有两种:永久组和临时组。永久组的IP地址是周知的,由Internet管理机构分配,是保留地址。临时组的地址则使用除永久组地址外的非保留D类地址。
IP组播分组在互联网上的转发由支持组播的路由器来处理。主机发出的IP组播分组在本子网内被所有主机组成员接收,同时与该子网直接相连的组播路由器会把组播报文转发到所有包含该主机组成员的网络上。组播报文传递的范围由报文的生存期值(TTL,Time-to-Live)决定,如果TTL值等于或者小于设置的路由器端口TTL门限值(TTLThreshold),路由器将不再转发该报文。
单个数据流可以发送到多个客户端的组播能力已成为大多数多媒体应用的传输手段。组播技术利用一个IP地址使IP数据报文发送到用户组。IP组播采用了特殊定义的目的IP地址和目的MAC地址。IGMP为客户端提供加入和离开组播组的方式。CGMP使路由器为交换机配置组播转发表,并告诉交换机当前的组播成员。指派路由器根据对网络中的组播成员的分布和使用的不同采用密集模式DM或稀疏模式SM组播路由协议来构造组播的分布树,而这个分布树将在源子网和组播组之间确定一条唯一路径以提高数据传输效率。
IP组播技术需要三层交换机,或路由器支持,通常应用于专用网络,如:教育网、广电网以及企业内部网等,使用IP组播技术可以极大的降低数据发送方的带宽要求,最大的好处是可以让数据接收方的数量成千上万,而不会造成网络的阻塞。
自AnyChat r4424版本开始,AnyChat支持客户端组播,同时还支持服务器组播。音视频数据可以在客户端本地发送到IP组播组,也可以由客户端上传到服务器,然后由服务器发送到IP组播组。
客户端有关IP组播的相关接口定义(以JavaScript脚本为例):
1. //内核参数定义(API:BRAC_SetSDKOption传入参数)
2. var BRAC_SO_NETWORK_MULTICASTPOLITIC = 45; //组播策略控制(参数为int型,定义为常量:BRAC_MCPOLITIC_XXXX)
3.
4. //组播策略定义
5. var BRAC_MCPOLITIC_DISABLE = 0; //执行服务器路由策略,禁止所有组播发送[默认]
6. var BRAC_MCPOLITIC_ONLYLOCALMC = 1; //忽略服务器路由策略,只向客户端本地组播组广播媒体流
7. var BRAC_MCPOLITIC_SERVERANDLOCALMC = 2; //执行服务器路由策略,同时在客户端本地发送组播数据
8. var BRAC_MCPOLITIC_ONLYSERVERMC = 3; //忽略服务器路由策略,只向服务器本地组播组广播媒体流
9. var BRAC_MCPOLITIC_SERVERANDSERVERMC = 4; //执行服务器路由策略,同时在服务器端发送组播数据
10.
11. //组播功能标志定义
12. var BRAC_MCFLAGS_JOINGROUP = 0x00000001; //加入多播组
13. var BRAC_MCFLAGS_LEAVEGROUP = 0x00000002; //离开多播组
14. var BRAC_MCFLAGS_SENDDATA = 0x00000010; //数据发送标志,指示该多播组用于发送数据
15. var BRAC_MCFLAGS_RECVDATA = 0x00000020; //数据接收标志,指示该多播组用于接收数据
16.
17. //组播功能控制
18. functionBRAC_MultiCastControl(lpMultiCastAddr, dwPort, lpNicAddr, dwTTL, dwFlags);
19.
典型应用:A、B、C三个客户端,其中服务器、B、C处于一个组播网络环境下,A本地不支持组播,A的数据希望在服务器端组播传给B、C,而B、C的数据希望通过服务器直接点对点传给A
1、A需要使用组播策略4(SERVERANDSERVERMC),同时通知服务器向组播组发送数据,示例代码如下:
1. BRAC_SetSDKOption(BRAC_SO_NETWORK_MULTICASTPOLITIC,BRAC_MCPOLITIC_SERVERANDSERVERMC);
2. BRAC_MultiCastControl("224.2.3.4", 8100, "", 5,BRAC_MCFLAGS_SENDDATA);
2、B、C也需要使用组播策略(SERVERANDSERVERMC),同时需要加入多播组,示例代码如下:
1. BRAC_SetSDKOption(BRAC_SO_NETWORK_MULTICASTPOLITIC,BRAC_MCPOLITIC_SERVERANDSERVERMC);
2. BRAC_MultiCastControl("224.2.3.4", 8100, "", 5,BRAC_MCFLAGS_JOINGROUP + BRAC_MCFLAGS_RECVDATA);
相关示例代码(Web)位于Git库\web\src\tools\AnyChatMultiCast目录下(需要安装最新版本Web插件)
音视频SDK开发 IP组播技术