该系统由服务端、客户端组成,服务端包括信令服务、NAT穿透服务、流媒体服务,客户端包括SIP信令服务、音频采集服务、视频采集服务、主进程调度服务及文件参数处理模块。
信令服务为整个系统核心部分,主要功能是信令发起、等待接收、转发消息、终端保活等,其实现核心为SIP(会话发起协议) 协议栈,由IETF(Internet Engineering Task Force,因特网工程任务组) 制定的多媒体通信协议,是一种基于文本(TEXT) 的应用层控制协议,用于创建、修改和释放一个或多个参与者的会话。SIP 是一种源于互联网的IP 语音会话控制协议,具有灵活、易于实现、便于扩展等特点。
NAT穿透即内网穿透服务,在网络的各个节点上其组成了由路由器构建的各个转发节点,NAT为网络提供了一个安全的保障,且扩展了IP的资源不足的问题,同时也带来了数据不能够自由传输的困难,网络中的UDP数据在通过NAT时将会被丢弃,而TCP具有长连接的特性在网络中传输又有多种重发保护机制,所以能够被NAT认可并建立长效链接,但其传输效率比较低下不适合远程跨网络、大数据内容的传输,其延迟效果非常明显。而UDP为无链接状态,常常用于内网传输的应用,在跨网络传输过程中可以建立单向的数据传输,因其独有的特性在传输的效率方面非常高,但其无法在跨网络过程中建立有效的双向链接,故而提出了NAT穿透技术。
(1) 全锥形NAT网络
是将内部网络的IP和端口重映射到相同的外部网络的IP和端口,其自身会在路由器中建立一张映射表,同时数据传输的时候,会将内部IP和端口信息保留在IP信息包中,用于在数据传输的过程中进行路由的分配,但不限制双方的IP及端口。以此目的达到内外网的链接通信,其形制为多对一方式。
(2) 限制性锥形NAT网络
此种情况下和全锥形NAT工作机制的IP和端口映射到外部网络中的形式是一致的,其中IP和端口对跟随每一次建立链接而变化,但区别在于只有在内部网络主动发送信息与外部网络建立链接的情况下,外部网络才可以发送信息到内部网络,其形制为多对一方式。
(3) 端口限制性锥形NAT网络
此种情况下和限制性锥形NAT网络工作形式一致,但区别在于由内部主机向外部网络中的主机先发送数据至外部网络中的特定主机的IP及端口后建立链接,而后此主机的通信IP及端口均被绑定为特定的端口上,若再次链接需重新建立TCP/IP链接,定义Session接口,其形制为多对一方式。
(4) 对称NAT网络
此种情况下也是最复杂的NAT穿透,以上三种其本质还是属于锥形NAT,属性还是多对一的方式即NAT会分配同一个IP及端口号(IPa:Pa) 专门用于内网主机(IPm:Pm) 与外网中的任何IP及地址(IPx:Px) 通信,但对称性NAT形制为多对多的形式,处于不同网络中的子网主机将会建立多个Session,分配不同的端口号甚至是IP,这样在通信的过程中将无法定位一种数据通道,使得在网络穿透过程中极其容易丢失数据,其工作原理为内网中地址(IPa:Pa)与NAT中的地址(IPm:Pm) 以及外网中的主机地址(IPw:Pw) 建立绑定通信,如果外网中又有另外的主机地址(IPv:Pv) 想建立链接,其形式为内网主机地址(IPa:Pa)与重分配NAT中的地址(IPn:Pn) 以及外网主机地址(IPv:Pv) 重新建立绑定。
其实总体上分为两种网络方式锥形和对称形网络,其目的为缓解IPv4的地址资源不足,以及安全的考虑,总体的表现形式如下图1 NAT类型。
图1 NAT类型
对称NAT网络和全锥型NAT组合对端、对称型NAT网络和限制性锥形NAT网络组合对端,均是可以穿透;对称NAT网络和端口限制性锥形NAT网络、对称网络NAT与对称网络NAT,均不可以穿透;上述四种类型,如果以序号定义1-4,N为序列号相加,则其穿透关系为,如果N小于等于6是可穿透,例如2和4序列相加等于6是可穿透,而 3和4序列相加等于7则不可穿透。
传统流媒体多采用RTP方式传输数据,即传输层为UDP方式,将视频数据音频数据加上RTP包头12个字节打包后,用UDP的方式直接传输至接收端的P2P方式。RTP数据流媒体传输适合与内网或远程服务传输,但无同步控制信号,无法达到双向的控制,对于媒体的播放控制有限,例如在媒体传输过程中的时间同步、播放暂停控制等均无标准定义。但随着流媒体的发展,以及人们的日益需求出现了RTP+RTCP的控制方式,最终形成RTSP的一套数据流媒体控制协议,其中RTP沿用以往的数据包格式,外加RTCP实现客户端播放控制、时间同步,同时在流媒体服务端实现一个轻量级的TCP SERVER的形式,利用RTCP的协议实现SERVER的同步控制。
为了适应WEB新时代,出现了可以在网页端直接播放视频的方式,由Adobe公司开发了一套基于FLV格式的网页端视频播放的插件FLASH,让用户可以轻松的在网页上播放媒体数据。其强大的功能给网络流媒体时代插上了强有力翅膀,为行业做出了突出的贡献,此流媒体传输方式被称为RTMP。其实现流程为流媒体终端采集设备上,将音频数据视频数据利用FLV的打包协议,打包成可播放的媒体数据,然后利用RTMP特有的协议方式加上数据包头,在传输层上采用TCP的方式直接传输给远端服务器,同时RTMP是一个基于TCP传输层的协议,所以也具有双向数据传输的特性,进而也解决了媒体数据同步、播放控制的功能,经过媒体服务器转发之后即可达到广播、点播的效果。
在流媒体经过了长时间的发展之后出现了各种各样的传输协议,例如HLS、HTML5等。HLS起初是由苹果公司开发的一套流媒体传输服务协议,其数据传输原理为,在媒体采集终端将数据按照RTMP的协议打包发送至服务端,由服务端转为HLS的协议方式,最终的媒体数据将由FLV转为TS的格式,并被分解为若干段,由.m3u8文件管理这些媒体片段,用户通过HTTP的方式逐个访问媒体文件,所有TS文件均为临时产生,在播放停止后将被统一删除。所以根据具体的流程可以看出HLS在延时方面相对于RTMP有先天的劣势。HTML5单纯的无法实现实时流媒体的点播方式,其只适用于已有媒体文件的整体下载方式,若要实现点播还需HLS的协议配合。