1、基于SIP协议的视频会议研究 SIP是一个基于文本的应用层控制协议,独立于底层传输协议TCP/UDP,用于建立、修改和终止IP网上的双方或多方多媒体会话。SIP系统采用了因特网常用的客户机/服务器结构,由用户代理和服务器两大部分组成。用户代理又分为用户代理客户(UAC:User Agent Client)和用户代理服务器(UAS:User Agent Server)两种。UAC用来发起会话请求,UAS用来接受并响应会话请求。这两者只是逻辑上的功能,实际上网络终端应同时具备这两种功能,既能发起会话,又能接受、响应会话。可以统称为终端UA.服务器分为:代理服务器(Proxy Server)、重定向
2、服务器(Redirected Server)、注册服务器(Registrar) 终端UA注册流程 首先,与会者也就是终端要向服务器发送REGISTER消息, REGISTER方法用于客户机向SIP服务器注册列在To字段中的地址信息。第二步,注册服务器将终端信息存放到定位服务器。这步没有SIP的往返。第三步,注册服务器给会议终端回复100 trying消息,表示服务器已经收到了它的请求消息,并且正在处理。最后,服务器给终端回复200 OK消息,表明终端注册成功。集中服务器模式:集中服务器模式会议中,服务器是整个系统运行的唯一核心,系统的所有业务都将通过该服务器来实现,包括系统管理、成员通话以及会
3、议等。 Focus:会议的控制中心与每个与会者之间存在SIP消息联系。 Mixer:媒体混合服务器负责完成会议媒体的混合和分发,接收者可以是会议的与会者或其他的媒体混合服务器。 分布式模式这种模式的优点是:既具有集中的会议控制功能,媒体流的处理也较方便,延迟小,因为传输过程中没有混合编码转换的过程。缺点是:对于每个端点的带宽要求高。而且,每个终端应该支持所有成员的编码,因为传输过程中并没有编码的转换。 混合式模式混合式模式是RFC4353提出的一种应对大型会议的模型 。模型只是将多个Mixer分列出来,来完成较为复杂的媒体流处理。这种模型也被业内称为松耦合 。系统模型设计综合分析以上几种会议模
4、型,按照实际需求,结合各个模式的优点,提出了应用于本系统的会议模型设计。视频会议的逻辑拓扑结构系统功能模块节点管理模块 主要是方便系统对所有与会者进行统一管理,当与会者启动时,要先发送REGISTER消息到服务器进行注册,当有新的与会者要加入到系统中时,将首先通过服务器验证,服务器通过验证后新的与会者加入到系统中,这将保护系统的安全性。另外,系统还通过节点管理模块提供对终端成员的监测功能,包括待机、未登陆、响铃、通话或是正在录音等。 节点管理的实现是通过定义特定的类和文件来组成的。监控功能定义的类结构如下: class CPhoneBookMember : public CDialog pub
5、lic: CString m_strName; /节点名称 CString m_strIPAddress; /节点IP地址 CString m_strIPPhoneNumber; /节点的电话号码 CString m_family; /节点固定电话号码 CString m_mobile; /节点移动电话号码 ; 状态信息定义的类结构如下class CPhoneInformation : public CDialog public: CString m_Phonename; /用户名称CString m_PhoneNumber; /电话号码CString m_PhoneState;CString
6、 m_meeting; /开会信息CString m_skystate; /录音信息CString m_recordstate; /调听录音信息CString m_phoneip; /电话IP地址CString m_meetphone; ;会议控制模块会议初始化会议初始化模块是用来给与会者提供预约会议的接口,与会者通过管理界面与该接口通信。系统采用的会议室是静态会议室,每个服务器都设置有多个会议室,每个会议室都有一个会议号码,可以是事先编写好的号码,这个会议号码在整个系统中都是唯一的。系统中的会议有两种模式,即呼入型和呼出型。在同一个会议召开过程中,可以同时使用这两种方式添加会议成员。 会议模
7、式选择 系统提供两种会议模式,混音会议模式和广播会议模式。系统提供两种会议模式,混音会议模式和广播会议模式。混音模式是指所有与会者在逻辑上处于平等的地位,每个与会者都能自由的发言,并且每个与会者都能听到其他任何与会者的发言;广播会议模式是指由管理员(控制管理界面的人员)指定一个发言人,此时其他与会者只能听此发言人的声音,发言人听不到其他与会者的声音,其它与会者没有发言权限。会场管理 在会议进行的时候,管理员可以对会场进行管理,包括等待会议开始前的会议背景音乐的发放、发言人的切换、新增会议成员、邀出会议成员、提示与会者第一个进入会议室、提示有新进与会者等。会议结束会议的结束有两种方式,一种是在会
8、议结束时,所有与会者都挂断电话,这时会议自动结束;一种是管理员通过将与会者全部邀出会议的方式结束会议,这种方式下会议结束模块向所有与会者终端发送BYE消息来终止会议,这时所以与会者都会离开会议室。与会者和管理员可以任意选择这两种方式结束会议。多级管理模块根据实际的需要系统采用分层多级的架构,上级服务器具有对下级服务器的管理权限,每个服务器的管理范围为本服务器所在的域及其下属的区域,这样的分级架构是为了当服务器出现故障时,不至于影响到其它域的服务器正常工作。而且,系统特别具有应急保护功能,当任何一台服务器出现故障问题不能正常使用时,当前服务器下注册的终端话机在一段时间内无法检测到当前服务器的情况
9、下将自动注册到上一级服务器上,这样就保证了在服务器出现问题时该服务器上注册的终端话机仍能正常通话。录音及检索模块录音及检索模块允许系统管理员对重要的通话或是必须进行录音的通话和会议进行录音,同时,可以通过输入检索条件来查找录音文件并回放。录音流程录音检索流程信令处理模块信令处理模块实际上就是SIP消息的解析器和打包器。 图为信令解析流程。系统安全机制本系统引入认证机制来解决安全问题。 当终端向服务器发送INVITE请求消息后,服务器并不是马上根据该消息执行相应的指令,而是给消息发起方返回一个407消息来请求认证。消息发起方收到407消息后重新发送包含认证信息的请求消息包给服务器。服务器收到这个
10、请求消息进行证书校验工作,校验通过后才继续执行操作。音频处理编程实现在本系统中,G.729的结构实现如下:struct format_g729_f name = g729, exts = g729, format = AST_FORMAT_G729A /使用G.729格式 write = g729_write, seek = g729_seek, trunc = g729_trunc, /信号流通的长度 tell = g729_tell, read = g729_read, /数据送往的接口 buf_size = BUF_SIZE + AST_FRIENDLY_OFFSET, /偏移量;视频处
11、理编程实现系统中H.264结构定义如下:struct format_h264_f name = h264,exts = h264,format = AST_FORMAT_H264, /应用H.264格式open = h264_open, write = h264_write,seek = h264_seek,trunc = h264_trunc, /数据长度tell = h264_tell,read = h264_read, /数据送往的接口buf_size = BUF_SIZE + AST_FRIENDLY_OFFSET, /偏移量desc_size = sizeof(struct h264
12、_desc),#define BUF_SIZE 4096, /缓冲区大小 ;视频会议流程INVITE sip:8001192.168.1.3 SIP/2.0Via:SIP/2.0/UDP Max-Forwards: 70Contact: To: 8001From: 7001;tag=1d16e37bCall-ID: MjE3YmRiZWU3OWE4NTVhNjQ1YmVkNzA5YTU5YjZlYTA.CSeq: 1 INVITEAllow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFOCo
13、ntent-Type: application/sdp Content-Length: 655v=0m=audio 24102 RTP/AVP 107 119 100 106 0 105 98 8 3 101m=video 31420 RTP/AVP 115 34Sending text CONTROL:STARTVIDEO on SIP/7001-082048a8MESSAGE sip:7001192.168.1.186:1324 SIP/2.0Via: SIP/2.0/UDP 192.168.1.3:5060;branch=z9hG4bK2dd91b80;rportFrom: 8001;t
14、ag=as65d8afdaTo: 7001;tag=1d16e37bCall-ID: MjE3YmRiZWU3OWE4NTVhNjQ1YmVkNzA5YTU5YjZlYTA.CSeq: 102 MESSAGEMax-Forwards: 70Content-Type: text/plainContent-Length: 18CONTROL:STARTVIDEO INFO sip:7002192.168.1.16:31922 SIP/2.0Via: SIP/2.0/UDP 192.168.1.3:5060;branch=z9hG4bK5a457265;rportFrom: 8002;tag=as1
15、aef0d86To: 7002;tag=0338fb69Contact: Call-ID: ODkxNDI1OThkMjc3ODZlYThjMDYyMWVmMGJkNmQwMWM.CSeq: 102 INFOMax-Forwards: 70Content-Type: application/media_control+xml Content-Length: 205视频会议实现部分核心代码struct ast_conference* start_conference( struct ast_conf_member* member ) struct ast_conference* conf = N
16、ULL ; ast_mutex_lock(&conflist_lock); / 获取会议列表 ast_log( AST_CONF_DEBUG, attempting to find requested conferencen ) ; / 寻找现有的会议 conf = find_conf( member-conf_name ) ; ast_log( AST_CONF_DEBUG, attempting to create requested conferencen ) ;/ 创建一个新的会议 conf = create_conf( member-conf_name, member ) ; / 创
17、建一个有一个新成员的会议 add_member( member, conf ) ;/加入一个新成员 ast_mutex_unlock(&conflist_lock);/释放会议列表;void conference_exec( struct ast_conference *conf ) /主要的会议功能 int speaker_count ; int listener_count ; / 计算发言者和听者 long time_diff = 0 ; long time_sleep = 0 ; /屏蔽底层差异 curr = ast_tvnow();/ 获取缓冲时间 time_diff = ast_t
18、vdiff_ms(curr, base); / 计算缓冲时间 ast_mutex_lock(&conflist_lock); ast_mutex_lock(&conf-lock); / 获取会议列表 ast_mutex_unlock(&conf-lock); ast_mutex_unlock(&conflist_lock); / 释放会议列表 speaker_count = 0 ; listener_count = 0 ; /重新安排与会者中的发言者和听者 member = conf-memberlist ; / 获取与会者列表 spoken_frames = NULL ; /更新发言者列表 video_source_member = NULL; /更新视频资源 dtmf_source_member = NULL; /更新音频资源 send_frames = mix_frames( spoken_frames, speaker_count, listener_count ) ; /媒体流的混合 ast_log( AST_CONF_DEBUG, exit conference_execn ) ;/退出会议 系统测试系统测试主要包含功能测试和性能测试两个方面的内容SIP代理服务器的构建视频会议管理界面 电话的录音 会议界面
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1