4.2.2 服务端设计
主要包含三个服务模块。
(1) 信令服务
采用freeswitch实现SIP信令的转发,freeswitch是非常通用的一款IVR,其功能十分强大,采用Sofia的SIP协议栈,媒体流分三种不同的方式,其一为媒体流转发模式,可以实现不同协议的压缩流的之间的转换;其二为媒体旁路模式也可称之为透传模式,媒体只是通过服务进行转发而不管媒体流的压缩格式;其三为单纯的信令模式,只转发媒体SDP信息进行数据交互双方的数据桥接作用,媒体流数据是通过另外的媒体服务进行传输。其中在第一种媒体模式可以进行计费、计时、录音等服务,对于商业应用是非常好的一套功能,当然本设计主要采用第三种方式,只是应用了Sofia的SIP协议栈,视频数据采用其他的媒体服务进行转发,音频数据P2P的方式传输。
(2) 穿透服务
穿透服务采用Coturn实现NAT穿透的P2P通讯方式,其主要由两种穿透方式组成,其一为STUN穿透服务,其二为TURN穿透服务;STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序) 主要目的是链接Peer两端的外网IP和端口进行绑定处理,将对端的双方链接到一条临时通道上,所有数据带宽压力在Peer对端的网络上,使得双方可以用UDP的传输方式进行传输,目前也同时支持TCP模式,由于NAT的网络的复杂性,在中国据有关统计50%的网络是无法用STUN进行穿透的,故出现了TURN的模式;TURN(Traversal Using Relay NAT) 是通过Relay方式穿越NAT,主要数据是通过TURN服务进行数据的转发,所有数据带宽的压力处于TURN服务器的网络上,但本设计穿透服务数据仅限音频数据,故对服务端的数据带宽压力是非常小的。
(3) 视频流服务
采用Nginx+RtmpModule实现Nginx是由俄罗斯伊戈尔塞耶夫创作的一款非常强大的源代码以类BSD许可证的形式发布,其主要由HTTP服务、反向代理服务组成同时也提供IMAP/POP3/SMTP的邮件服务,因其稳定性、丰富的功能集、简单的配置文件和低系统资源消耗而闻名,在和RtmpModule结合后形成了一套完美的流媒体服务架构。
4.2.3 客户端设计
客户端主要包括五个模块。
(1) SIP协议栈模块
采用oSIP+eXosip轻量协议,应用于对端(UAC/UAS) 间会话发起响应信息SDP的交互,因其小巧遵循IETF并且开放源码而广泛应用于电信系统中,其具有优越的稳定性,被用于实时操作系统Vxworks上;在PC端应用广泛的同时也支持一些手持设备,并将在IOT等设备上大放异彩。因其各种优越的表现,结合本设计中的硬件资源性能方面,故最终被选为多媒体终端SIP通信模块的构建。
(2) Audio模块
此模块是基于HI3516EV200模组而产生,HI3516EV200在音频处理方面更上一层楼,主要体现在降噪和回音消除方面,在主叫端设备采用HI3516EV200,用于发起会话,收发音频数据。在被叫端设备采用HI3516DV300硬件平台,用于模拟被叫端,建立会话链接,收发音频数据,采集视频数据。
(3) Video模块
此模块基于HI3516DV300模组而产生,用于视频的采集、处理、压缩、打包为RTMP的数据格式发送至服务端用于用户在PC设备上利用VLC打开观看视频。
(4) NAT数据链接模块
采用Libnice开源代码项目实现,此架构类似于WEBRTC中应用的NAT穿透服务,支持STUN和TURN模式的NAT穿透方式,同时其功能库主要采用glib-2.0库的接口进行代码的编写,所以对Linux的平台支持的很好,同时glib-2.0在Linux的应用程序开发中也提供了不少的API接口,在开发中可以节约不少时间。
(5) 进程调度模块
此模块主要用于对以上模块建立的进程进行管理,包括加载初始参数数据、配置处理参数存储数据结构等。
(6) 数据存储模块
以文本的方式JSON的数据格式来存储多媒体模块的一些进程加载的初始化数据。