CN102123154B - 一种sip终端及其会话处理方法 - Google Patents
一种sip终端及其会话处理方法 Download PDFInfo
- Publication number
- CN102123154B CN102123154B CN201110065712.8A CN201110065712A CN102123154B CN 102123154 B CN102123154 B CN 102123154B CN 201110065712 A CN201110065712 A CN 201110065712A CN 102123154 B CN102123154 B CN 102123154B
- Authority
- CN
- China
- Prior art keywords
- jmf
- sip
- file
- terminal
- sip terminal
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Telephonic Communication Services (AREA)
Abstract
本发明公开了一种SIP终端及其会话处理方法,均可在运行完JMF安装程序后,在对应目录中提取关键文件,包括:涉及JMF框架的jmf.jar文件、记录客户端本地属性的jmf.properties文件、本地链接库文件;并将以上文件都放在web服务器中;在加载并运行SIP终端中的applet时,下载以上文件到对应的目录,实现所述SIP终端的免安装,并基于此进行呼叫控制。本发明的SIP终端及其会话处理方法,能够有效保证SIP终端的免安装和跨平台特性。
Description
技术领域
本发明涉及通信领域,具体涉及一种会话发起协议(SIP)终端及其会话处理方法。
背景技术
SIP协议借鉴了超文本传输协议(HTTP)和简单邮件传输协议(SMTP),具有结构简单以及有可扩充性、可扩展性的优点;此外还提供了良好的服务质量(QoS)支持,因此基于SIP的多媒体交互通信越来越得到人们的认可和重视。SIP协议用于控制互联网或者其他网络上的设备初始化、管理和终止的交互式会话进程,包括了语音和整个网络有关的内容。SIP网络采用客户机-服务器的工作方式,SIP网络包含两类组件:SIP用户代理和网络服务器。用户代理是一个终端系统,代表了要加入会话的用户。
Applet是Java小应用程序,可以直接嵌入到网页中或者其他特定的容器中,并能产生特殊的效果。Applet继承了Java优良的跨平台特性,而且还可以在多种浏览器中运行。
随着SIP协议的普及应用,各个公司社团都纷纷推出了自身的SIP终端,但普遍存在如下缺点:
多为桌面应用程序。用户需要在本地安装软件才能够使用,而能够在浏览器中运行的SIP终端并不多。
很多终端是基于C/C++语言开发的,不具有很好的跨平台性;
即便能够开发成插件嵌入IE浏览器,也会出现需要安装插件和浏览器不支持的问题。
发明内容
有鉴于此,本发明的主要目的在于提供一种SIP终端及其会话处理方法,保证SIP终端的免安装和跨平台特性。
为达到上述目的,本发明的技术方案是这样实现的:
一种会话发起协议SIP终端,该终端包括呼叫控制模块,媒体处理模块和SIP协议栈;其中,
所述媒体处理模块,用于在运行完JAVA多媒体框架JMF安装程序后,在对应目录中提取关键文件,包括:涉及JMF框架的jmf.jar文件、记录客户端本地属性的jmf.properties文件、本地链接库文件,并将以上文件都放在web服务器中;还用于在加载并运行SIP终端中的小应用程序applet时,下载以上文件到对应的目录,实现所述SIP终端的免安装;
所述呼叫控制模块,用于基于所述媒体处理模块实现的SIP终端的免安装,进行呼叫控制;
所述SIP协议栈,用于对包括所述呼叫控制以内的通信提供协议支持。
该终端进一步包括用户界面,用于提供实现SIP多媒体会议系统所需要的标准用户界面;
所述用户界面包括:小应用程序的界面和HTML界面。
所述呼叫控制模块,用于通过与所述用户界面的交互,调用应用于综合网络的JavaAPI SIP和所述媒体处理模块的相关功能,实现用户、SIP终端和SIP服务器之间的呼叫连接的建立和拆除;
所述呼叫控制模块的逻辑包括:加入会议、主动退出会议、被动退出会议。
所述媒体处理模块基于JMF实现,并且增加了JMF对H.264视频编解码格式的支持。
所述媒体处理模块,进一步用于:
在所述SIP方法刚运行时,检测客户端的媒体设备,包括:检测本地是否有所述jmf.properties文件,以及检测本地是否有所有需要的本地链接库文件。
一种SIP终端的会话处理方法,该方法包括:
运行完JMF安装程序后,在对应目录中提取关键文件,包括:涉及JMF框架的jmf.jar文件、记录客户端本地属性的jmf.properties文件、本地链接库文件;并将以上文件都放在web服务器中;
在加载并运行SIP终端中的applet时,下载以上文件到对应的目录,实现所述SIP终端的免安装,并基于此进行呼叫控制。
所述SIP终端中包括用户界面,包括:小应用程序的界面和HTML界面;
该方法进一步包括:
由所述用户界面提供实现SIP多媒体会议系统所需要的标准用户界面。
所述SIP终端中包括呼叫控制模块和媒体处理模块,所述呼叫控制模块的逻辑包括:加入会议、主动退出会议、被动退出会议;
该方法进一步包括:
通过与所述用户界面的交互,由所述呼叫控制模块调用应用于综合网络的Java API SIP和所述媒体处理模块的相关功能,实现用户、SIP终端和SIP服务器之间的呼叫连接的建立和拆除。
所述媒体处理模块基于JMF实现,并且增加了JMF对H.264视频编解码格式的支持。
该方法进一步包括:
在所述SIP终端刚运行时,由所述媒体处理模块检测客户端的媒体设备,包括:检测本地是否有所述jmf.properties文件,以及检测本地是否有所有需要的本地链接库文件。
本发明的SIP终端及其会话处理方法,均可在运行完JMF安装程序后,在对应目录中提取关键文件,包括:涉及JMF框架的jmf.jar文件、记录客户端本地属性的jmf.properties文件、本地链接库文件;并将以上文件都放在web服务器中;在加载并运行SIP终端中的applet时,下载以上文件到对应的目录,实现所述SIP终端的免安装,并基于此进行呼叫控制。本发明的SIP终端及其会话处理方法,能够有效保证SIP终端的免安装和跨平台特性。
附图说明
图1为本发明实施例的SIP终端结构图;
图2为本发明实施例的媒体发送序列图;
图3为本发明实施例的媒体接收序列图;
图4为本发明实施例的加入私网穿越功能时对REGISTER消息的修改流程图;
图5为本发明实施例的加入私网穿越功能时对200OK消息的修改流程图;
图6为本发明实施例的加入私网穿越能力时对BYE消息的修改流程图;
图7为本发明实施例的加入私网穿越能力时对回复BYE消息的200OK消息的修改流程图;
图8为本发明实施例的SIP终端会话处理流程简图。
具体实施方式
本发明实施例所阐述的基于Web的SIP终端,采用SIP作为信令协议,可运行在各种系统平台上,支持音频、视频的媒体传输。主要包括四个组成部分:用户界面,呼叫控制模块,媒体处理模块和SIP协议栈,基于Web的SIP终端软件架构如图1所示。
所述SIP终端应用继承了java跨平台特性的Applet程序,能够在多种浏览器和多种平台下运行,而且除了音频通信还支持视频的通信。
其中,针对用户界面而言,用户可以通过嵌入浏览器的小应用程序界面来控制程序运行。Applet小应用程序嵌入在HTML网页中,所述用户界面主要由两部分组成:小应用程序的界面和HTML界面。
用户界面提供了所有实现SIP多媒体会议系统所需要的标准用户界面,包括以下部分:菜单、LOGO、用户当前的状态(如:是否已注册等),本地视频窗口、远端视频窗口、退出会议控制按钮等。所述菜单中包含配置、注册、解注册三个选项。其中,在配置框中用户可以配置URI、注册周期、SIP注册服务器地址、STUN服务器地址(IPV6系统无此选项)和TURN服务器地址(IPV6系统无此选项)等。
用户界面通过事件驱动方式通过呼叫控制模块调用协议栈,以进行消息发送和实现协议栈状态迁移。通过用户界面与用户的直接交互控制其他模块的操作,并为他们分配资源,如媒体处理模块。
Java Applet小应用程序是嵌入在HTML或JSP中的,并且应用浏览器运行。因此不必专门开发软件与网络的接口程序,是网络应用的理想选择。Applet程序通过<applet>标签嵌入JSP页面中,其中Applet需要的参数可以写在<param>标签中,这些参数可以在Applet初始化执行public void init()方法时读入。
如果浏览器打开终端所在的页面后,不能正常显示Applet,而是显示了“您的浏览器不支持Applet或者JRE的版本太低系统请点击此处此下载”并提供下载JRE的链接,表明Applet未正常显示,可能的原因是浏览器暂时不支持,或者是JRE未安装或版本太低。只要为浏览器安装插件或安装合适版本的JRE即可。
针对呼叫控制模块而言,作为整个系统的主要模块,呼叫控制模实现了SIP终端的呼叫控制功能;并且,作为整个系统的枢纽,承接系统的其他三个部分。通过与用户界面的交互,调用应用于综合网络的Java API(Java API for IntegratedNetworks,JAIN)SIP和媒体处理模块的相关功能,实现用户、SIP终端和SIP服务器之间的呼叫连接的建立和拆除。呼叫控制模块的逻辑大致分为:加入会议、主动退出会议和被动退出会议三部分。
一、加入会议
用户可以以两种身份加入会议。第一种是作为会议的创建者,即主席。在多媒体会议系统主页上创建会议,在会议开始时,SIP服务器向终端发起呼叫,使用户加入会议;第二种,作为普通与会成员,在所欲参与的会议召开之时,SIP服务器向其终端发起呼叫,使其加入会议。
在SIP服务器邀请用户加入会议时,SIP服务器首先向终端发送邀请(INVITE)消息。
SIP协议栈监听到INVITE消息后,呼叫控制模块会查看当前是否有会话,如果当前有会话,SIP协议栈返回486BUSY信令,通知SIP服务器由于终端忙而导致不能加入。
若当前没有会话,呼叫控制模块会通过SIP协议栈向SIP服务器返回180Ring信令,表示正在呼叫,同时会话控制层调用用户界面层的功能,弹出对话框以询问用户是否能接受当前的呼叫。若接收到用户点否的确认,则呼叫控制模块调用SIP协议栈的功能,向SIP服务器返回消息486busy,表示暂时不能加入会议。若接收到用户点是的确认,呼叫控制模块调用SIP协议栈的功能,向SIP服务器端回复带本地媒体资源描述的200OK,并调用媒体处理模块的相关功能,为即将到来的会话分配媒体资源。所述本地媒体资源描述可以包含在200OK的会话描述协议(SDP)中。
此时,SIP服务器向SIP终端返回带SDP的ACK消息,呼叫控制模块调用SIP协议栈的功能处理ACK消息,并调用媒体处理模块按ACK中的SDP内容(如:远端音频、视频发送端口,以及终端和服务器经协商后采用的统一的音、视频编解码格式)进一步分配媒体资源,向SIP服务器端发送本地媒体流并接收SIP服务器发来的媒体流。至此,用户便成功加入会议并可以进行音视频通信了。
针对SIP信令中的SDP包而言,200OK和ACK消息内都含有SDP包,用于客户端和媒体服务器进行媒体协商。在程序运行之初,媒体处理模块会首先检测终端是否支持音视频,以及分别支持音频和视频哪些编解码格式。当客户端收到SIP服务器发来的INVITE,SIP协议栈会将所支持的媒体格式写入200OK消息的SDP包中。
所支持的音频格式可以为:G723、G711、GSM、PCMA、G728、G729等。在音频的媒体描述MediaDescription中,将写入:媒体类型(audio)、本地接受音频的端口、支持媒体格式的代码,以及每种编解码格式的属性,包括属性名称、代码、采样率等。
所支持的视频格式可以为:JPEG、H263、H264、H261等。在视频的媒体描述MediaDescription中,将写入:媒体类型(video)、本地接受视频的端口、支持媒体格式的代码,以及每种编解码格式的属性,包括名称、代码、采样率、支持的视频大小(CIF/QCIF)等。
SIP协议栈将含有本地媒体描述的200OK消息发送到SIP服务器,SIP服务器端再进行媒体协商,最终选取两端都支持的媒体编解码格式进行交互。SIP服务器在发送ACK时,将选定的编解码格式的媒体描述一同返回给客户端。客户端通过解析SDP中的内容,可以获知SIP服务器端最终选择的媒体编解码格式,最终在初始化媒体处理器时,对处理器进行设置,以便按协商过的编解码格式发送音视频。
用户可以以两种方式退出会议:主动退出,即用户在希望结束通话时向SIP服务器发送BYE消息,主动申请结束会话;被动退出,即当一个会议已经结束或者主席在开会过程中执行了撤销该用户的会议参与者身份操作后,SIP服务器会向客户端发送BYE消息,结束本次会议。
当需要主动退出会议时,用户以点击用户界面的退出会议按钮等方式触发用户界面,用户界面调用呼叫控制层的方法来结束会议。呼叫控制层首先调用SIP协议栈向SIP服务器发送SIP消息BYE,随后呼叫控制层找到当前的会话,调用媒体处理模块释放该会话所有的媒体资源。最后,呼叫控制层将当前的会话状态设为当前没有会话,并将当前会话删除。当终端收到SIP服务器发来的200OK时,呼叫控制层调用SIP协议栈处理该消息。
经过以上操作,通过用户的主动申请,用户已经从会议中退出了。
当需要被动退出会议时,在主席要求某人退出会议或者会议结束的情况下,SIP服务器会向终端发来BYE消息,SIP协议栈收到BYE消息后向SIP服务器回复200OK。呼叫控制层获取到当前的会话,调用媒体处理模块释放当前会话所有的媒体资源,最后移除当前的会话,并将状态改为当前没有会话。
媒体处理模块主要负责对与会者的媒体流进行采集、发送,并为用户终端上层应用提供网络上采集到的媒体数据。媒体处理模块首先从媒体设备采集未经处理的媒体信号并以特定的编码格式编码,编码后的媒体数据以RTP媒体流的形式在网络上传播,而RTP多基于底层的UDP协议进行传输。媒体的接收过程与此相反,通过网络接收到媒体流、解码并播放、显示。
在SIP消息交互过程中,通过SDP包写入本地会话描述并解析远端会话描述,客户端和SIP服务器之间可以互相通知对方本地所支持的媒体格式和具体参数。两端经过媒体协商,采用统一的媒体编解码格式进行媒体通信。
媒体处理模块是独立于呼叫控制模块的,并且通过JAVA多媒体框架(JMF)来实现。JMF提供了先进的媒体处理能力,从而扩展了Java平台的功能。这些功能包括媒体捕获、压缩、流转、回放以及对主要媒体形式和编码的支持。
实时传输协议(RTP)是网络上针对多媒体数据流的一种传输协议,为实时数据提供端到端的服务,RTP通常运行在UDP之上。
媒体处理模块主要由以下功能实体构成:发送器、接收器、设备管理器、播放器、媒体处理器、RTP管理器等。
媒体的发送过程如下:媒体处理模块从客户端的摄像头和麦克风捕捉音、视频信号,并在此基础上建立数据源。将视频的数据源复制,建立和原始数据源关联的播放器以播放本地视频。将复制出的数据源与处理器关联,之后将数据压缩编码成帧,形成RTP协议格式封装的媒体流,再递交给RTP分组处理模块,用于加上此协议的分组包头,并根据采样时钟打上时间戳,标记顺序号,并给定帧频分辨率相应的压缩格式等参数,然后进行发送。本地发送的地址和远端接收的地址需要在RTP管理模块中定义。
媒体发送涉及的主要功能实体包括:发送器、设备管理器、播放器、媒体处理器、RTP管理器等。
进行媒体发送时的具体流程如图2所示,图2所示流程包括以下步骤:
1、发送器调用设备管理器以获取用户设备列表;
2、设备管理器向发送器返回给捕捉到的媒体设备;
3、发送器从设备管理器获得媒体设备的定位器;
4、发送器得到当前设备的媒体定位器;
5、发送器通过得到的视频、音频设备的媒体定位器分别创建视频数据源和音频数据源,为了既能显示本地视频又能向远端发送本地视频,可以将本地视频数据源复制,将原始的视频数据源与音频数据源共同生成混合数据源,用来创建媒体处理器,而复制出的视频数据源和播放器相关联,用来播放本地视频;
6、发送器将视频数据源复制,并利用复制得到的数据源创建播放器;
7、发送器启动播放器,使播放器开始播放本地采集到的视频;
8、发送器获取播放器的可视组件;
9、发送器获得可视组件;
10、发送器将播放器的可视组件添加到前台用户界面上,使用户在用户界面上可以看到本地视频,至此本地视频已经可以成功显示;
11、发送器创建混合了音频和视频的数据源,据此创建媒体处理器,如果只有一种数据源则基于该数据源创建媒体处理器;
12、发送器设置处理器的输出格式为RTP格式;
13、媒体处理器的状态变为实例化;
14、发送器获取媒体处理器的输出数据,并作为数据源;
15、发送器在媒体处理器建立的数据源的基础上建立RTP管理器;
16、发送器将本地媒体流的发送地址绑定在RTP管理器上;
17、发送器将发送媒体流的目的地址绑定在RTP管理器上;
18、发送器在媒体处理器产生的数据源基础上调用RTP管理器以创建输出流;
19、发送器以调用输出流的方式将本地媒体流发向网络。
至此,终端可以正常地向网络发送媒体流。
媒体的接收过程与发送过程相反,RTP管理器绑定本地接收地址和远端发送地址,RTP管理器处理接收到的数据,根据其会话标识和序列号进行鉴别,过滤掉自身发送的信息,再传递给不同解码器解压,最后发送给播放器以便回放。
用于媒体接收的主要功能实体包括:接收器、RTP管理器、播放器等。
进行媒体接收时的具体流程如图3所示,图3所示流程包括以下步骤:
1、接收器创建并初始化RTP管理器;
2、接收器得到新创建的RTP管理器;
3、接收器调用RTP管理器绑定本地媒体监听地址,准备接收输入流;
4、接收器调用RTP管理器开始绑定远端媒体发送地址;
5、接收器监听到RTP管理器的收到新流事件;
6至7、接收器获取输入流;
8至9、接收器获取基于输入流的数据源,得到其句柄;
10、接收器利用刚刚得到的数据源创建播放器;
11、接收器为播放器添加监听器,监听播放器的状态;
12、接收器实例化播放器;
13、当播放器完全具体化时,接收器获取播放器的可视化组件;
14、接收器获得播放器可视化组件的句柄;
15、如果可视化组件不为空,则接收器将该组件加入到用户界面上,以显示和播放远端媒体数据。
至此,远端音、视频可正常显示在用户界面上了。
针对H.264编解码方法的集成涉及如下内容:
媒体处理模块是基于JMF实现的,但是JMF默认不支持视频H.264编解码格式。在此按如下步骤增加了JMF对H.264视频编解码格式的支持。
虽然JMF默认不支持H.264编码,但它提供一些接口,可以扩展JMF的功能。可以以插件的形式实现H.264编解码器,并通过相应的接口注册到JMF内部。为了增加对H.264编码格式的支持,以Windows平台为例,可以进行如下操作:
(1)生成ffmpeg.dll文件,提供H.264的编解码器。ffmpeg.dll具体生成过程如下:
编写ffmpeg.java文件,在此文件在中需要定义一些常量和函数,作为操作编解码器的接口。
编译ffmpeg.dll文件。使用javah命令,生成头文件(javah ffmpeg)。
生成dll文件。使用c/c++编辑器生成ffmpeg.c文件,程序中添加函数ffmpeg.h中函数的实现,函数名必须用jni规定格式,可以照到.h文件里的声明来编写。注意把ffmpeg.h,jni.h,jni_md.h以及ffmpeg类库中的libavutil、libavcodec、libavformat复制到编辑器工程目录中,然后编译生成ffmpge.dll。
(2)将生成的包含H.264编解码器的dll文件放到path指定的路径下,此时用户可在java程序中通过jni调用该dll对音视频进行编码。
(3)根据jmf规范,定义H.264的编码器和解码器,它们都必须实现jmf的codec接口。在H.264的编码器里,设置其需要的输入媒体格式、输出媒体格式、编码视频的分辨率、码率等参数,并通过open初始化函数将一些参数设置到ffmpeg中。对压缩过的数据还可通过packetizer将其分割成小的数据块,让后打包成rtp包在网上传输。在H.264解码器里面,同样需要设置和编码器中基本相同的参数和初始化工作,设置支持的输入格式为H264_RTP。解码过程也是通过调用ffmpeg.dll动态链接库的函数实现的。
(4)将实现好的codec注册到jmf框架中,使jmf能够识别这些编解码器:
把定义好的编解码器完整类名定义成字符串类型变量,并将所有的编解码器名保存在一个数组中;
从JMF的PluginManager中取出JMF默认支持的编解码器,并保存在Collection中;
依次遍历集合中定义的编解码器,并判断此编解码器是否在Collection中,如果当前不支持该种编解码器,则利用反射机制,生成此编解码器的对象,并加到PluginManager中,让JMF的PluginManager进行管理。
在视频会话初始化时,将H.264格式的视频格式注册到JMF的RTPManager(rtpManager.addFormat(Format,int))中,列入RTPManager的管理。
通过以上操作,已经将H.264的编解码器实现并注册到JMF框架中,JMF框架可以像管理自身默认的编解码器一样管理这些以插件的形式加入的编解码器。终端与终端之间或终端与SIP服务器之间通过SDP协商后,通过媒体格式选择的策略,如果选择H.264为视频的传输格式,JMF就可以使用上述完成的H.264插件完成视频的压缩和打包。
JMF的免安装方法涉及如下内容:
为了使用户不需要安装附加软件(但是JRE必须安装)就能使用SIP终端,这种基于Web的SIP终端做了JMF的免安装处理,使用户能够在不安装JMF软件包的情况下使用网页版SIP终端。
可以按如下方法实现JMF基于Windows系统的免安装:
运行完JMF安装程序后,在对应目录中提取关键文件。
要提取的文件有:
1)Jmf.jar:JMF框架的Jar包;
2)Jmf.properties:记录客户端本地的一些属性;
3)本地链接库文件:Jmdaud.dll,jmdaudc.dll,jmh263enc.dll,jmutil.dll,jmf723.dll,jmvfw.dll,jmvh263.dll。
对于1),通过调用jmf.jar里的应用编程接口(API),Applet版的SIP终端可以使用Java Media Framework提供的媒体处理能力。因此需要把jmf.jar提取出来并放到Applet程序能够访问的路径下。
对于2),jmf.properties文件是jmf用来记录客户端本地媒体属性的文件,其中记录了客户端所支持的媒体设备和每种媒体设备所支持的编解码格式。在第一次安装JMF时会生成jmf.properties文件;因此在安装JMF时,可以插入摄像头,使jmf.properties将摄像头作为本地所支持的媒体设备。并且在安装时选中允许Applet读本地文件的选项,为Applet的终端开放权限,否则Applet无法从本地媒体设备读取媒体流。
对于3),这些本地链接库文件是用来对媒体流做编解码处理的。以上dll文件均为SIP终端需要支持的编解码格式所对应的本地链接库文件。
将以上文件都放在web服务器中;
在加载并运行applet时,下载以上文件到对应的目录:
Jmf.jar:在JSP中,Applet标签的ARCHIVE属性后写入jmf.jar;使用户加载SIP终端的Applet程序时,jmf.jar能够被一同加载到用户本地;
Jmf.properties:程序在用户目录下创建jmf文件夹,将jmf.properties下载到该目录(下载前,程序会检测本地是否有jmf.properties文件,如果有则跳过下载过程;否则,从服务器下载这些文件)。
本地链接库文件:在用户目录下创建dll文件夹,将所有的链接库文件下载到该目录(下载前,程序会检测本地是否有这些链接库文件,如果有责跳过下载操作)。
在SIP终端开始运行时,需要做的设置工作如下:
在终端刚刚运行时,媒体处理模块首先需要检测客户端的媒体设备。这个过程需要读取jmf.properties文件。所以在检测设备之前,首先检测本地是否有jmf.properties文件,如果有则跳过下载过程;否则在用户工作目录下创建jmf目录,将jmf.properties下载到该目录下,并将此目录的绝对路径添加到classpath中,以便能够找到该文件。之后,检测设备便可以读取jmf.properties文件了。
另一方面,媒体处理模块还需要对媒体流进行相应的编解码,这需要用到对应的本地链接库文件。所以在这之前需要将SIP服务器上的本地链接库文件下载到本地。在用户工作目录下创建dll目录,将本地链接库文件下载到其中。下载前检测本地是否有所有需要的本地链接库文件,如果有则跳过下载过程;否则,从SIP服务器下载这些文件。最后要将该目录的绝对路径加在系统环境变量path下,以便能够找到对应的dll文件。
经过以上操作,在不安装JMF软件的情况下,用户也可以使用基于JMF框架的终端了。
对于其他的系统,如linux,可以用相同方法进行JMF的免安装处理。只不过此时从JMF的安装目录下抽取出的是.so文件。可以在系统加载运行时检测操作系统类型,如果是Windows,下载所需要的DLL文件;如果是Linux或Solaris,则下载对应的.so文件。
由于JMF提供对多种平台的支持,因此经过如上处理,终端便可以运行在多种平台中,解决了系统的跨平台问题。
在实际应用时,可以通过多线程方式实现本地和远端视频初始化。
在用户同意建立多媒体连接之后,终端开始显示本地视频和收到的远端视频。显示本地和远端视频可以用两种方式,一种方式是顺序显示本地视频以及远端视频,但是这种方式使用户的等待时间较长;另一种方式是通过Java的并发机制使本地视频和远端视频同时初始化,以减少用户的等待时间。
基于Web的SIP终端的协议栈是基于JAIN SIP协议栈开发的。JAIN SIP提供以下功能以方便应用程序的实现,首先是解析器功能:提供了SIP URI的解析功能、SIP消息解析功能和SDP解析功能。当SIP消息处理完毕后,将待发送的SIP消息结构转换成文本并发送。其次是事务层的功能,提供用户使用时间机制控制应用程序,并调用相应方法来响应时间。其核心是事务处理,事务处理由有限状态机表示,状态机内部的跳转可以由事件触发。
在需要集成私网穿越功能,需要对信令进行修改。具体而言,随着应用TCP/IP的互联网的普及,私有网络(简称私网)的数量和规模都越来越大,私网这种组网方式在组建各种规模局域网时被大量应用。为了能够适应复杂的网络环境,多媒体会议系统的WEB版SIP终端,也集成了私网穿越的功能,包括对称NAT和非对称NAT两种方式。
在WEB版SIP终端中,是否采用NAT技术取决于用户是否在配置对话空中填写对应的服务器地址。如果采用对称NAT技术,则需要配置TURN服务器的地址和端口,如果采用非对称NAT技术进行私网穿越,则需要配置STUN服务器的地址和端口。
为了融合NAT技术,当用户选择了采用NAT技术时,需要修改对应的SIP消息。当用户只需要简单地在配置界面上选择使用STUN或者TURN功能时,就可以开启对应的私网穿越功能,并根据用户的选择改变相应的SIP消息内容。终端可结合自身的STUN和TURN模块,所以用户无需填写STUN和TURN的IP地址与端口,使用方便。
对比于其他的终端,有些终端不支持私网穿越,遇到复杂的网络环境完全不能使用;有些需要第三方提供私网穿越服务的服务器地址才能使用私网穿越功能,这对于初级用户而言很不方便,并且对于不知道能提供私网穿越服务的地址的用户而言,终端相当于没有私网穿越能力;有些融合进私网穿越功能的终端也只提供STUN或者TURN两者中的一种穿越方式。而本发明实施例中不但集成了常用的STUN的私网穿越方法,还集成了TURN方法,基本可以满足绝大多数复杂的网络拓扑环境下用户对私网穿越功能的需求。
可以根据用户是否使用私网穿越功能去改变某些关键SIP消息的内容,如:
对于注册(REGISTER)消息,如果使用了STUN服务器,将消息体中ViaHeader中的地址和ContactHeader中的地址改成NAT出口地址。建立REGISTER消息的流程如图4所示,图4所示流程包括以下步骤:
1、创建Register消息体;
2、判断是否使用STUN,如果判断结果为是,进入步骤3;否则,进入步骤5;
3、将via头改为出口NAT的地址;
4、将contact头改为出口NAT的地址,进入步骤5;
5、发送Register消息;
在程序使用了STUN或TURN的情况下,如果客户端收到来自SIP服务器的为注册消息返回的200OK,则创建线程reRegisterTimer,该线程的任务是定时向服务器发送注册消息。并且,该线程在解注册时被停止。需要说明的是,创建该线程的作用主要是保持NAT上的端口映射关系映射。如:为了保持NAT上SIP信令监听端口的映射端口,需要定期发送SIP消息,体现在实现上即终端每隔一定时间向SIP服务器发送一次注册消息。
另外,为回复SIP服务器的INVITE消息而发送的200OK也需要做相应修改,主要需要修改SDP包中描述本地媒体的监听端口和200OK消息中的contact头。
创建SDP的流程如图5所示,图5所示流程包括以下步骤:
1、获得所分配的音频视频监听端口的值;
2、判断是否使用STUN服务器且没有使用TURN服务器,如果判断结果为是,进入步骤3;否则,进入步骤4;
3、将媒体描述中的媒体端口改为对应的NAT出口端口,并进入步骤7;
4、判断是否使用TURN服务器,如果判断结果为是,进入步骤5;否则,进入步骤6;
5、将媒体描述中的媒体端口改为对应的中转服务器上的端口,并进入步骤7;
6、将为监听媒体流分配的原端口写入媒体描述中;
7、为SDP包加入其他正常通信消息,创建完整的SDP包;
关于contactHeader,主要修改其中的ContactURI。如果使用了STUN,contactURI中的地址改为对应的NAT出口IP,port改为对应的NAT出口端口。
如果使用了TURN,则利用INVITE消息中的TO域中的URI来建立contact头中的contactURI。
在发送200OK之后,还要创建UDP发送线程。该线程的作用是,定时通过本地的媒体监听端口向外界发UDP包。
设计UDP发送线程的原因有两个:
一个原因是:在有防火墙的网络环境,终端的某一个端口必须先向外发包,外界才能将包送到这个端口。而媒体服务器会在终端不发任何媒体包之前先向本地的媒体监听端口发试探包,如果发送不成功,媒体服务器会主动结束本次连接。因此,为了能正常的收到试探包,终端需要在发送200OK后,通过向外发送UDP包,实现在防火墙上打通媒体监听对应的UDP端口。
另一个原因是:为了保持NAT上的端口映射关系。本地接收音、视频媒体流和发送音、视频媒体流的端口分别是四个不同的端口,因此接收媒体流的两个端口会一直保持只收不发的状态。为了保持NAT上媒体流接收端口的映射端口有效,需要定期通过这两个接收端口向外发送UDP包。
对于用户主动发出的BYE消息,需要修改ViaHeader的对应内容。创建BYE消息。加入私网穿越能力对BYE消息的修改流程如图6所示,图6所示流程包括以下步骤:
1、建立BYE的request消息体;
2、判断是否使用了STUN服务器,如果判决结果为是,进入步骤3;否则,进入步骤4;
3、将ViaHeader中的本地IP改为对应的出口NAT的IP,并进入步骤4;
4、判断是否使用了STUN或者TURN,如果判决结果为是,进入步骤5;否则,进入步骤6;
5、确认开启了UDP线程,停止UDP发送线程,并进入步骤6;
6、释放媒体资源;
7、判断是否使用了TURN服务器,如果判决结果为是,进入步骤8;否则,进入步骤9;
8、向TURN服务器发送消息,通知服务器释放之前被占用的端口,以便下次使用;
9、向TURN服务器发送BYE消息,并从会话列表中删除当前会话,同时修改会话状态。
当收到服务器发来的BYE消息时,对回复BYE的200OK消息同样需要进行修改,以加入私网穿越能力;具体的流程如图7所示,图7所示流程包括以下步骤:
1、建立并向服务器返回200OK消息;
2、从会话列表中删除当前会话,同时修改会话状态;
3、判断是否使用了STUN或者TURN服务器,如果判断结果为是,进入步骤4;否则,进入步骤5;
4、确认开启了UDP线程,停止UDP发送线程;
5、释放媒体资源;
6、判断是否使用了TURN服务器,并在判断结果为是时进入步骤7;
7、向TURN服务器发送消息,通知服务器释放之前被占用的端口,以便下次使用。
另外,在用户界面对私网穿越的支持体现在用户可以从对话框中选择希望使用的私网穿越方法,如STUN或TURN。当用户填入某种穿越方式的服务器地址并点击确定后,呼叫控制模块开启对应的穿越方法,并调用SIP协议栈以向服务器发送注册消息。
会话控制模块对私网穿越功能的支持还体现在定时发包以打通防火墙这一功能上:
假如某个局域网中有防火墙,需要做打通防火墙的操作。防火墙有如下行为模式:不允许防火墙外的主机首先通过特定端口向内网发包,而必须是先由内网通过此端口向外网发包后,才允许此端口接收外网发送来的数据包。
由于媒体服务器会先向终端发送媒体流,因此如果不提前向外发包打通防火墙,媒体流始终会被拦在防火墙以外;所以要先向外网发包,打通防火墙。
由于TURN的穿越方式是中转的方式,(即终端先发给TURN服务器,TURN服务器再转发给媒体服务器或者会议服务器;同理,服务器发来的媒体流或者信令也是通过TURN服务器转发给终端的),所以在媒体流到达之前已经向中转服务器发过消息,因此TURN的穿越方式不需要提前打通防火墙。
在用户选择使用STUN的穿越方式时,当服务器邀请用户进入会议而且用户同意时,会话控制层会向媒体服务器的地址发送简单UDP包,以打通防火墙。在随后的的媒体交互过程中,终端始终向媒体服务器发送简单UDP包,以保持防火墙上的对应端口可用。
终端对基于IPV6的通信和基于IPV4的通信均可支持。媒体处理模块的JMF和SIP协议栈的JAIN SIP本身均支持IPV4和IPV6双栈。所以只要做简单改动即可。
每次在系统启动时,呼叫控制模块都要获取本机IP,以支持基于SIP协议的通信和基于媒体的通信。在呼叫控制模块获取本机IP时,如果用户输入的服务器地址是IPV6的地址,则取一个IPV6地址作为本机地址;若用户输入的服务器地址是IPV4地址,则取一个IPV4地址做为本机地址。
在SIP协议栈创建SDP消息时,根据当前地址类型将Connection和Origin域的地址设为IP4或IP6。对应的如果是IPV4环境,SDP包中这两个域中的IP6应替换为IP4。
针对用户界面,如果本机IP为IPV6地址,则配置STUN和TURN的对话框不会出现在用户界面中,因为在IPV6的环境下不需要私网穿越功能。
目前所采用的SIP协议栈是基于JAIN SIP的,这样可以保持Java的可移植性和Applet程序在多种浏览器中运行的特点。其他的协议栈也有很多,如:OPAL是使用C++语言开发的;reSIProcate也是使用C++开发的;oSip是使用C语言开发的;sipX是使用C++实现的。这些协议栈都各有优缺点,但是考虑到跨平台性和浏览器对其作为插件的支持上,可以优先选用基于Java语言开发的JAINSIP协议栈。
基于以上所述技术内容可知,本发明SIP终端的会话处理方法具有如图8所示的操作思路。参见图8,图8为本发明实施例的SIP终端会话处理流程简图,该流程包括以下步骤:
步骤810:运行完JMF安装程序后,在对应目录中提取关键文件,包括:涉及JMF框架的jmf.jar文件、记录客户端本地属性的jmf.properties文件、本地链接库文件;并将以上文件都放在web服务器中。
步骤820:在加载并运行SIP终端中的applet时,下载以上文件到对应的目录。
综上所述可见,无论是装置还是方法,本发明的会话处理技术具有如下优点:
第一,基于Web的SIP终端具有很好的跨平台特性。Java语言有着跨平台的特性,只要有Java虚拟机,Java程序就能够运行。而基于Web的SIP终端是基于Java语言开发的Java小应用程序,因此也具有跨平台的特性。只要客户端安装了JAVA虚拟机,而且有浏览器程序,系统就可以在客户端的浏览器程序中正常运行,应用的范围广泛。
第二,由于不用进行插件的安装,用户使用起来很方便。Applet本身不需要安装就可以使用。虽然JMF需要安装才能使用,但是由于终端集成了JMF,因此不需要运行JMF安装文件,免去了安装的过程。
第三,基于Web的SIP终端能够在多种浏览器中正常运行。由于很多主流浏览器对Applet都有很好的支持,所以通过Applet标签嵌入网页的Java小应用程序能够在大多数浏览器中运行,即基于Web的SIP终端能够通过多种浏览器打开。经测试,终端在IE、FireFox、Opera、Chrome等浏览器上均可正常运行。
另外,系统能够在复杂的网络环境中顺利运行。系统具有私网穿越的能力,能够进行STUN和TURN穿越。因此,面对对称NAT网关、非对称NAT网关甚至是多级串联的NAT网关,系统都能顺利运行。
最后,终端支持多种媒体编解码格式。所支持的音频格式为:G723、G711、GSM、PCMA、G728、G729;所支持的视频格式为:JPEG、H263、H264、H261。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种会话发起协议SIP终端,其特征在于,该终端包括呼叫控制模块,媒体处理模块、SIP协议栈及STUN和TURN模块;其中,
所述媒体处理模块,用于在运行完JAVA多媒体框架JMF安装程序后,在对应目录中提取关键文件,包括:涉及JMF框架的jmf.jar文件、记录客户端本地属性的jmf.properties文件和本地链接库文件或.so文件,并将以上文件都放在web服务器中;还用于在加载并运行SIP终端中的小应用程序applet时,检测当前操作系统类型为Windows,下载涉及JMF框架的jmf.jar文件、记录客户端本地属性的jmf.properties文件和本地链接库文件到对应的目录,检测当前操作系统类型为Linux或Solaris,下载涉及JMF框架的jmf.jar文件、记录客户端本地属性的jmf.properties文件和.so文件到对应的目录,实现所述SIP终端的免安装;其中,所述JMF为支持H.264视频编解码格式的JMF;
所述呼叫控制模块,用于基于所述媒体处理模块实现的SIP终端的免安装,进行呼叫控制;
所述SIP协议栈,用于对包括所述呼叫控制以内的通信提供协议支持;
所述STUN和TURN模块,用于开启STUN或TURN方式的私网穿越。
2.根据权利要求1所述的终端,其特征在于,该终端进一步包括用户界面,用于提供实现SIP多媒体会议系统所需要的标准用户界面;
所述用户界面包括:小应用程序的界面和HTML界面。
3.根据权利要求2所述的终端,其特征在于,所述呼叫控制模块,用于通过与所述用户界面的交互,调用应用于综合网络的Java API SIP和所述媒体处理模块的相关功能,实现用户、SIP终端和SIP服务器之间的呼叫连接的建立和拆除;
所述呼叫控制模块的逻辑包括:加入会议、主动退出会议、被动退出会议。
4.根据权利要求1至3任一项所述的终端,其特征在于,所述媒体处理模块基于JMF实现,并且增加了JMF对H.264视频编解码格式的支持。
5.根据权利要求4所述的终端,其特征在于,
所述媒体处理模块,进一步用于:
在所述SIP方法刚运行时,检测客户端的媒体设备,包括:检测本地是否有所述jmf.properties文件,以及检测本地是否有所有需要的本地链接库文件。
6.一种SIP终端的会话处理方法,其特征在于,该方法包括:
运行完JMF安装程序后,在对应目录中提取关键文件,包括:涉及JMF框架的jmf.jar文件、记录客户端本地属性的jmf.properties文件和本地链接库文件或.so文件;并将以上文件都放在web服务器中;其中,所述JMF为支持H.264视频编解码格式的JMF;
在加载并运行SIP终端中的applet时,检测当前操作系统类型为Windows,下载涉及JMF框架的jmf.jar文件、记录客户端本地属性的jmf.properties文件和本地链接库文件到对应的目录,检测当前操作系统类型为Linux或Solaris,下载涉及JMF框架的jmf.jar文件、记录客户端本地属性的jmf.properties文件和.so文件到对应的目录,实现所述SIP终端的免安装,并基于此进行呼叫控制。
7.根据权利要求6所述的方法,其特征在于,所述SIP终端中包括用户界面,包括:小应用程序的界面和HTML界面;
该方法进一步包括:
由所述用户界面提供实现SIP多媒体会议系统所需要的标准用户界面。
8.根据权利要求7所述的方法,其特征在于,所述SIP终端中包括呼叫控制模块和媒体处理模块,所述呼叫控制模块的逻辑包括:加入会议、主动退出会议、被动退出会议;
该方法进一步包括:
通过与所述用户界面的交互,由所述呼叫控制模块调用应用于综合网络的Java API SIP和所述媒体处理模块的相关功能,实现用户、SIP终端和SIP服务器之间的呼叫连接的建立和拆除。
9.根据权利要求8所述的方法,其特征在于,所述媒体处理模块基于JMF实现,并且增加了JMF对H.264视频编解码格式的支持。
10.根据权利要求9所述的方法,其特征在于,该方法进一步包括:
在所述SIP终端刚运行时,由所述媒体处理模块检测客户端的媒体设备,包括:检测本地是否有所述jmf.properties文件,以及检测本地是否有所有需要的本地链接库文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110065712.8A CN102123154B (zh) | 2011-03-17 | 2011-03-17 | 一种sip终端及其会话处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110065712.8A CN102123154B (zh) | 2011-03-17 | 2011-03-17 | 一种sip终端及其会话处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102123154A CN102123154A (zh) | 2011-07-13 |
CN102123154B true CN102123154B (zh) | 2015-07-08 |
Family
ID=44251607
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110065712.8A Expired - Fee Related CN102123154B (zh) | 2011-03-17 | 2011-03-17 | 一种sip终端及其会话处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102123154B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102307196A (zh) * | 2011-08-26 | 2012-01-04 | 深圳市天和荣视频技术有限公司 | 一种网络传输实时视频数据的方法 |
CN103123592B (zh) * | 2011-11-21 | 2017-05-31 | 腾讯科技(深圳)有限公司 | 开放平台中应用程序的访问方法及系统 |
CN103248654B (zh) * | 2012-02-10 | 2018-09-21 | 中兴通讯股份有限公司 | 虚拟桌面服务参数的协商方法、装置及系统 |
US9300647B2 (en) * | 2014-01-15 | 2016-03-29 | Sonos, Inc. | Software application and zones |
CN104917992A (zh) * | 2015-05-12 | 2015-09-16 | 太仓市同维电子有限公司 | 一种基于sip协议的可视电话系统 |
CN106789914B (zh) * | 2016-11-24 | 2020-04-14 | 邦彦技术股份有限公司 | 一种多媒体会议控制方法和系统 |
CN110493555B (zh) * | 2019-08-22 | 2022-01-14 | 视联动力信息技术股份有限公司 | 请求处理方法、用户终端、核心服务器、设备及存储介质 |
CN112083939A (zh) * | 2019-12-31 | 2020-12-15 | 蓝桥赛维科技(北京)有限公司 | 批量升级方法、装置、系统及介质 |
CN112153080A (zh) * | 2020-11-24 | 2020-12-29 | 山东富通信息科技有限公司 | 一种跨平台的视频数据的传输方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101052048A (zh) * | 2007-05-24 | 2007-10-10 | 杭州华三通信技术有限公司 | 会话发起协议呼叫方法、中间件及会话发起协议用户代理 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1374051A1 (en) * | 2001-03-28 | 2004-01-02 | BRITISH TELECOMMUNICATIONS public limited company | Component-based software distribution and deployment |
-
2011
- 2011-03-17 CN CN201110065712.8A patent/CN102123154B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101052048A (zh) * | 2007-05-24 | 2007-10-10 | 杭州华三通信技术有限公司 | 会话发起协议呼叫方法、中间件及会话发起协议用户代理 |
Non-Patent Citations (3)
Title |
---|
DESIGN AND IMPLEMENTATION OF SIP USER-AGENT BASED ON APPLET;Si Qin;《IEEE Proceedings of IC-BNMT2010》;20101028;第781-782页 * |
基于web的语音与视频交互系统的设计和实现;王尚君;《北京交通大学硕士学位论文》;20080831;第45-47页,第58页 * |
如何在不安装JMF软件包的情况下使用JMF;qq355667166;《http://qq355667166.iteye.com/blog/473863》;20090922;最后一段 * |
Also Published As
Publication number | Publication date |
---|---|
CN102123154A (zh) | 2011-07-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102123154B (zh) | 一种sip终端及其会话处理方法 | |
US7529675B2 (en) | Conversational networking via transport, coding and control conversational protocols | |
US7934000B2 (en) | Real-time communication using inter-process communications | |
US20100254375A1 (en) | INSTANT INTERNET BROWSER BASED VoIP SYSTEM | |
WO2007056921A1 (fr) | Dispositif de verification de protocole et procede de verification de protocole associe | |
EP1962472B1 (en) | Multimedia application interface | |
Hillenbrand et al. | A web services based framework for voice over ip | |
Lohse | Network-Integrated Multimedia Middleware, Services, and Applications | |
Chan et al. | Modeling IETF Session Initiation Protocol and its services in SDL | |
Amor et al. | A Survey of Multimedia Software Engineering. | |
Parnes | An IP-Multicast based Framework for Designing Synchronous Distributed Multi-User Applications on the Internet | |
Burger | Ubiquitous reach and remote control of devices | |
Zimmermann | Towards tailormade eLearning streaming services: A framework for specification, implementation and management | |
Simoes | Providing media control to SIP-based IVR applications: The IVRObject approach | |
Stegmann | Design and implementation of a digital video recorder, with live video streaming to cellphone over mobile broadband | |
da Silva | Video-conference system based on open source software | |
Poroye | SIP based IM on Mobile Devices | |
Ram | Billing system design for VoIP implemented using SIP Protocol | |
Bergkvist | Conversational real-time multimedia in Java ME | |
Berglund et al. | Mobile video calls in public safety | |
Taha | Architecture for a SIP-based conferencing server | |
Chen | Web Call SDK: SIP Stack in Web Container Component | |
Wong | An extensible framework for RTSP applications | |
Högberg | Video telephony in an IP-based set-top box environment | |
Nykopp | A java-based presentation system for synchronized multimedia |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150708 Termination date: 20170317 |
|
CF01 | Termination of patent right due to non-payment of annual fee |