基于SIP协议的视频会议研究.docx

上传人:b****5 文档编号:29706002 上传时间:2023-07-26 格式:DOCX 页数:18 大小:737.62KB
下载 相关 举报
基于SIP协议的视频会议研究.docx_第1页
第1页 / 共18页
基于SIP协议的视频会议研究.docx_第2页
第2页 / 共18页
基于SIP协议的视频会议研究.docx_第3页
第3页 / 共18页
基于SIP协议的视频会议研究.docx_第4页
第4页 / 共18页
基于SIP协议的视频会议研究.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

基于SIP协议的视频会议研究.docx

《基于SIP协议的视频会议研究.docx》由会员分享,可在线阅读,更多相关《基于SIP协议的视频会议研究.docx(18页珍藏版)》请在冰豆网上搜索。

基于SIP协议的视频会议研究.docx

基于SIP协议的视频会议研究

SIP是一个基于文本的应用层控制协议,独立于底层传输协议TCP/UDP,用于建立、修改和终止IP网上的双方或多方多媒体会话。

SIP系统采用了因特网常用的客户机/服务器结构,由用户代理和服务器两大部分组成。

 

用户代理又分为用户代理客户(UAC:

UserAgentClient)和用户代理服务器(UAS:

UserAgentServer)两种。

UAC用来发起会话请求,UAS用来接受并响应会话请求。

这两者只是逻辑上的功能,实际上网络终端应同时具备这两种功能,既能发起会话,又能接受、响应会话。

可以统称为终端UA.

服务器分为:

代理服务器(ProxyServer)、重定向服务器(RedirectedServer)、注册服务器(Registrar)

终端UA注册流程

 

首先,与会者也就是终端要向服务器发送REGISTER消息,REGISTER方法用于客户机向SIP服务器注册列在To字段中的地址信息。

第二步,注册服务器将终端信息存放到定位服务器。

这步没有SIP的往返。

第三步,注册服务器给会议终端回复100trying消息,表示服务器已经收到了它的请求消息,并且正在处理。

最后,服务器给终端回复200OK消息,表明终端注册成功。

集中服务器模式:

集中服务器模式会议中,服务器是整个系统运行的唯一核心,系统的所有业务都将通过该服务器来实现,包括系统管理、成员通话以及会议等。

Focus:

会议的控制中心与每个与会者之间存在SIP消息联系。

Mixer:

媒体混合服务器负责完成会议媒体的混合和分发,接收者可以是会议的与会者或其他的媒体混合服务器。

分布式模式

这种模式的优点是:

既具有集中的会议控制功能,媒体流的处理也较方便,延迟小,因为传输过程中没有混合编码转换的过程。

缺点是:

对于每个端点的带宽要求高。

而且,每个终端应该支持所有成员的编码,因为传输过程中并没有编码的转换。

混合式模式

混合式模式是RFC4353提出的一种应对大型会议的模型。

模型只是将多个Mixer分列出来,来完成较为复杂的媒体流处理。

这种模型也被业内称为松耦合。

系统模型设计

 

 

综合分析以上几种会议模型,按照实际需求,结合各个模式的优点,提出了应用于本系统的会议模型设计。

视频会议的逻辑拓扑结构

 

系统功能模块

节点管理模块

主要是方便系统对所有与会者进行统一管理,当与会者启动时,要先发送REGISTER消息到服务器进行注册,当有新的与会者要加入到系统中时,将首先通过服务器验证,服务器通过验证后新的与会者加入到系统中,这将保护系统的安全性。

另外,系统还通过节点管理模块提供对终端成员的监测功能,包括待机、未登陆、响铃、通话或是正在录音等。

节点管理的实现是通过定义特定的类和文件来组成的。

监控功能定义的类结构如下:

classCPhoneBookMember:

publicCDialog

{

public:

……

CStringm_strName;//节点名称

CStringm_strIPAddress;//节点IP地址

CStringm_strIPPhoneNumber;//节点的电话号码

CStringm_family;//节点固定电话号码

CStringm_mobile;//节点移动电话号码

……

};

状态信息定义的类结构如下

classCPhoneInformation:

publicCDialog

{

public:

……

CStringm_Phonename;//用户名称

CStringm_PhoneNumber;//电话号码

CStringm_PhoneState;

CStringm_meeting;//开会信息

CStringm_skystate;//录音信息

CStringm_recordstate;//调听录音信息

CStringm_phoneip;//电话IP地址

CStringm_meetphone;

……

};

会议控制模块

会议初始化

会议初始化模块是用来给与会者提供预约会议的接口,与会者通过管理界面与该接口通信。

系统采用的会议室是静态会议室,每个服务器都设置有多个会议室,每个会议室都有一个会议号码,可以是事先编写好的号码,这个会议号码在整个系统中都是唯一的。

系统中的会议有两种模式,即呼入型和呼出型。

在同一个会议召开过程中,可以同时使用这两种方式添加会议成员。

会议模式选择

系统提供两种会议模式,混音会议模式和广播会议模式。

系统提供两种会议模式,混音会议模式和广播会议模式。

混音模式是指所有与会者在逻辑上处于平等的地位,每个与会者都能自由的发言,并且每个与会者都能听到其他任何与会者的发言;广播会议模式是指由管理员(控制管理界面的人员)指定一个发言人,此时其他与会者只能听此发言人的声音,发言人听不到其他与会者的声音,其它与会者没有发言权限。

会场管理

在会议进行的时候,管理员可以对会场进行管理,包括等待会议开始前的会议背景音乐的发放、发言人的切换、新增会议成员、邀出会议成员、提示与会者第一个进入会议室、提示有新进与会者等。

会议结束

会议的结束有两种方式,一种是在会议结束时,所有与会者都挂断电话,这时会议自动结束;一种是管理员通过将与会者全部邀出会议的方式结束会议,这种方式下会议结束模块向所有与会者终端发送BYE消息来终止会议,这时所以与会者都会离开会议室。

与会者和管理员可以任意选择这两种方式结束会议。

多级管理模块

根据实际的需要系统采用分层多级的架构,上级服务器具有对下级服务器的管理权限,每个服务器的管理范围为本服务器所在的域及其下属的区域,这样的分级架构是为了当服务器出现故障时,不至于影响到其它域的服务器正常工作。

而且,系统特别具有应急保护功能,当任何一台服务器出现故障问题不能正常使用时,当前服务器下注册的终端话机在一段时间内无法检测到当前服务器的情况下将自动注册到上一级服务器上,这样就保证了在服务器出现问题时该服务器上注册的终端话机仍能正常通话。

录音及检索模块

录音及检索模块允许系统管理员对重要的通话或是必须进行录音的通话和会议进行录音,同时,可以通过输入检索条件来查找录音文件并回放。

录音流程

 

录音检索流程

 

信令处理模块

信令处理模块实际上就是SIP消息的解析器和打包器。

图为信令解析流程。

 

系统安全机制

本系统引入认证机制来解决安全问题。

 

当终端向服务器发送INVITE请求消息后,服务器并不是马上根据该消息执行相应的指令,而是给消息发起方返回一个407消息来请求认证。

消息发起方收到407消息后重新发送包含认证信息的请求消息包给服务器。

服务器收到这个请求消息进行证书校验工作,校验通过后才继续执行操作。

音频处理编程实现

在本系统中,G.729的结构实现如下:

structformat_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,

//偏移量

};

视频处理编程实现

系统中H.264结构定义如下:

structformat_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(structh264_desc),

#defineBUF_SIZE4096,//缓冲区大小

};

视频会议流程

 

INVITEsip:

8001@192.168.1.3SIP/2.0

Via:

SIP/2.0/UDP

Max-Forwards:

70

Contact:

7001@192.168.1.186:

1324>

To:

"8001"

8001@192.168.1.3>

From:

"7001"

7001@192.168.1.3>;tag=1d16e37b

Call-ID:

MjE3YmRiZWU3OWE4NTVhNjQ1YmVkNzA5YTU5YjZlYTA.

CSeq:

1INVITE

Allow:

INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,NOTIFY,MESSAGE,SUBSCRIBE,INFO

Content-Type:

application/sdp

Content-Length:

655

v=0

m=audio24102RTP/AVP10711910010601059883101

m=video31420RTP/AVP11534

SendingtextCONTROL:

STARTVIDEOonSIP/7001-082048a8

MESSAGEsip:

7001@192.168.1.186:

1324SIP/2.0

Via:

SIP/2.0/UDP192.168.1.3:

5060;branch=z9hG4bK2dd91b80;rport

From:

"8001"

8001@192.168.1.3>;tag=as65d8afda

To:

"7001"

7001@192.168.1.3>;tag=1d16e37b

Call-ID:

MjE3YmRiZWU3OWE4NTVhNjQ1YmVkNzA5YTU5YjZlYTA.

CSeq:

102MESSAGE

Max-Forwards:

70

Content-Type:

text/plain

Content-Length:

18

CONTROL:

STARTVIDEO

INFOsip:

7002@192.168.1.16:

31922SIP/2.0

Via:

SIP/2.0/UDP192.168.1.3:

5060;branch=z9hG4bK5a457265;rport

From:

"8002"

8002@192.168.1.3>;tag=as1aef0d86

To:

"7002"

7002@192.168.1.3>;tag=0338fb69

Contact:

8002@192.168.1.3>

Call-ID:

ODkxNDI1OThkMjc3ODZlYThjMDYyMWVmMGJkNmQwMWM.

CSeq:

102INFO

Max-Forwards:

70

Content-Type:

application/media_control+xml

Content-Length:

205

视频会议实现部分核心代码

structast_conference*start_conference(structast_conf_member*member)

{

structast_conference*conf=NULL;

ast_mutex_lock(&conflist_lock);//获取会议列表

ast_log(AST_CONF_DEBUG,"attemptingtofindrequestedconference\n");

//寻找现有的会议

conf=find_conf(member->conf_name);

ast_log(AST_CONF_DEBUG,"attemptingtocreaterequestedconference\n");

//创建一个新的会议

conf=create_conf(member->conf_name,member);

//创建一个有一个新成员的会议

add_member(member,conf);//加入一个新成员

ast_mutex_unlock(&conflist_lock);//释放会议列表

};

voidconference_exec(structast_conference*conf)//主要的会议功能

{

……

intspeaker_count;

intlistener_count;//计算发言者和听者

……

longtime_diff=0;

longtime_sleep=0;//屏蔽底层差异

……

curr=ast_tvnow();//获取缓冲时间

time_diff=ast_tvdiff_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,"exitconference_exec\n");//退出会议

……

}

系统测试

系统测试主要包含功能测试和性能测试两个方面的内容

SIP代理服务器的构建

 

视频会议管理界面

电话的录音

 

会议界面

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1