一种新型SIP视频终端系统的设计

2023-02-02

利用互联网进行实时的信息通讯成为近些年来出现的一种新的网络技术, 包括即时通讯 (Instant Messaging) , 视频会议 (Video Conference) , IP语音技术 (VoIP) 等。这些利用互联网, 为彼此通讯的双方提供实时信息交互的技术, 随着网络应用的进一步普及, 逐渐占据重要位置, 和电子邮件一样, 成为人们利用网络相互联系的重要手段。

视频电话, 作为这一技术的应用之一, 旨在为在线的双方提供实时的语音交流。本文就介绍一种利用会话初始协议 (SIP) 作为基础的网络视频终端软件的设计和实现方案。这一方案, 同样可以应用在即时通讯, 视频会议等领域。

1 SIP协议概述

SIP (Session Initiation Protocol) 协议是由IETF的MMUSIC (Multiparty Multimedia Session Control) 工作组于1997年7月提出的, 是应用层的控制协议, 能建立、调整和终止多媒体的呼叫和会话。它的主要目的是为了解决IP网中的信令控制, 以及同SoftSwitch的通信, 从而构成下一代的增值业务平台, 对电信、银行、金融等行业提供更好的增值业务。

1.1 SIP有用户代理 (UA) 和网络服务器两个主要的结构元素

(1) SIP的用户代理。

它是SIP系统中的端用户, 是一个智能部件, 根据它们在会话中扮演的角色又可分为用户代理客户机 (UAC, User Agent Client) 和用户代理服务器 (UAS, User Agent Server) , 前者发起呼叫请求, 后者响应呼叫请求。

(2) SIP网络服务器。

主要功能是名字解析和用户定位。SIP把这类网络服务器分为以下3类。

(1) 代理服务器Proxy。具有解析名字的能力, 能够代理前面的用户向下一跳服务器发出呼叫请求。然后服务器决定下一跳的地址, 这有点类似另一个动态路由协议BGP (Border Gateway Protocol) 。

(2) 重定向服务器Redirect。在获得了下一跳的地址后, 立刻告诉前面的用户, 让该用户直接向下一跳地址发出请求而自己则退出对这个呼叫的控制, 访问这样的服务器就像访问一个数据库一样。

(3) 登记服务器Register。用来完成对U A C的登录, 在S I P系统的网元中, 所有UAC都要在某个登录服务器中登录, 以便UAC通过服务器能找到它们。

1.2 S I P主要支持以下5个方面的功能

(1) 用户定位:确定通信所用的端系统位置。

(2) 用户能力交换:确定所用的媒体类型和媒体参数。

(3) 用户可用性判定:确定被叫方是否空闲和是否愿意加入通信。

(4) 呼叫建立:邀请和提示被叫, 在主被叫之间传递呼叫参数。

(5) 呼叫处理:包括呼叫终结和呼叫转交 (transfer) 等。

2 系统总体设计

整个系统主要分为四个部分:主控程序模块、SIP/SDP协议实现模块、媒体处理模块和网络接口模块。其中媒体处理模块又可分为音视频设备接口模块、音视频编解码模块和RTP传输模块。

主控模块主要为系统提供人机交互界面, 以及为各个模块分配资源和为终端初始化。SIP/SDP协议模块为系统提供了基本的SIP呼叫控制和切换, 例如:用户注册和登记, 呼叫初始化, 修改呼叫属性, 终止呼叫等。媒体处理模块可以分为音视频设备接口模块、音视频编解码模块和RTP传输模块三个次级模块, 这三个模块一起实现了音频数据和视频数据的基本处理和RTP实时传输和控制。网络接口模块通过调用Windows Socket从而实现了可视电话系统之间SIP消息的发送和接收。

3 各个模块的设计

3.1 SIP/SDP模块的设计

这个模块的设计主要是在开源协议栈oSIP的基础上完成的, 针对oSIP协议栈的特点, 充分利用其优点来对SIP协议栈进行设计与实现。因此这个模块可以分为两个部分:核心协议栈和信令控制模块。

oSIP是按照RFC3261 (SIP) 和RFC2327 (SDP) 标准, 并使用标准c编写的一个SIP协议栈。它是一个公开源码的免费协议栈。oSIP协议栈结构简单而小巧, 它并不提供高层的SIP会话控制的API, 它主要提供一些解析SIP/SDP消息的API和事务处理的状态机。

oSIP支持线程安全, 既可以用于多线程的编程模式, 也可以用于单线程的编程模式;oSIP可以用来开发User Agent, IP soft~phone和SIP Proxy等等。

oSIP主要包括三大部分的内容:状态机模块、解析器模块和工具模块。

状态机模块的功能:完成对某个事务 (注册过程, 呼叫过程等等) 状态记录, 并在特定状态下触发相应的事件或回调函数。

解析器模块的功能:该模块主要完成对SIP消息结构剖析、SDP消息的结构剖析以及URI结构的剖析。

工具模块的功能:该模块提供一些SDP等处理的一些工具。

3.2 媒体处理模块的设计

多媒体通信功能由终端中的音视频设备接口模块、音视频编解码模块和RTP传输模块共同完成。合称为媒体处理模块。媒体处理模块是Windows平台SIP终端的重要组成部分, 它负责原始音频、视频数据的采集、压缩、解压缩和回放。考虑到网络性能的复杂性, 还需要做到充分利用网络带宽, 调整编解码策略, 尽可能迅速而不失真地传送数据。

媒体流的处理是一个独立于SIP处理的线程, 在双方SIP对话建立以后启动。出于程序结构性和可移植性方面的考虑, 整个媒体处理部分按其功能划分成几个次级模块, 包括采集端接口类、编码器类、解码器类和播放器类四个次级模块。每个次级模块都有自己的一系列数据处理函数。传输开始前将各次级模块按顺序连接, 使前后级次级模块共享数据队列, 数据流就可以在它们之间传送。

3.2.1 音视频处理接口的设计

(1) 音频处理。

通过waveIn函数族完成连续的录音。录音之前要确定录音的参数。Windows提供的低层多媒体接口由一系列以waveIn开头的函数构成, 其中该系统中需要使用的函数包括waveInPrepareHeaderwavelnUnprepareHeade () , waveln0pen () , waveInCloseQ, waveInReset () , wavelnAddBuffer () , waveInStart () 等。

通过waveOut函数族完成连续的放音。放音的过程和录音一样, 也需要采用多缓冲技术。和录音类似, Windows提供一系列以waveOut开头命名的函数, 其中有waveO utOpen () , waveOutClose () , waveOutReset () , waveOutWrite () , waveOutPrepareHeader () , waveOutUnprepareHeader () 等。和录音不相同的是, 打开放音设备采用消息机制, 即由窗口负责处理放音结束消息。

(2) 视频处理。

本系统就是采用Microsoft公司为开发Windows平台下的视频应用程序提供的软件工具包——VFW来实现视频采集的。

视频数据的实时采集, 主要通过AVICA P模块中的消息、宏函数、结构以及回调函数来完成。视频捕获的一般过程如下。

(1) 建立捕获窗口。

(2) 登记回调函数。

(3) 获取捕获窗口的缺省设置。

(4) 设置捕获窗口的相关参数。

(5) 连接捕获窗口与视频捕获卡。

(6) 获取采集设备的功能和状态。

(7) 设置捕获窗口显示模式。

(8) 捕获图像到缓存或文件并作相应处理。

(9) 终止视频捕获断开与视频采集设备的连接。

3.2.2 RTP实时传输的控制

RTP是目前解决流媒体实时传输问题的最好办法。JRTPLIB是一个面向对象的R T P库, 它完全遵循R F C 1 8 8 9设计, 支持Windows、Linux等多种平台。利用JRTPLIB库可以轻易实现RTP/RTCP的传输和控制。本系统的这部分就是基于这个开源库设计实现的。JRTPLIB共有三个类:RTPSession、RTPPacket和RTPSourceData。其中, RTPSession主要是用于数据包的发送和接收;RTPPacket主要是用于对接收到的RTP/RTCP包的具体细节进行分析;RTPSourceData主要是提供参加这个会话的各个源的信息。

3.3 网络接口的设计

SIP消息可以基于UDP协议, 也可以基于TCP协议的, 在本系统的实现中采用的是UDP协议, 所以在这部分使用的是Windows Sockets (Windows套接字) 的数据报套接字 (SOCK DGRAM) 编程。所谓套接字指的是一种网络编程接口, 提供了发送和接受数据的机制, 是网络编程的基础。而Windows Sockets就是微软为Windows操作系统提供的网络编程接口。

一些网络应用程序 (如网络电话、多媒体会议工具) 对实时性要求非常强, 要求能够直接应用WinSock发送和接收数据。为了充分利用MFC的优势, 首选方案应当是MFC中的CAsyncSocket类或CSocket类, 这两个类完全封装了WinSock API, 并提供更多的便利。本系统中就是使用CSocket类来实现发送和接收数据的。

CSocket类是由CAsyncSocket继承而来的, 事实上, 在MFC中CAsyncSocket逐个封装了WinSock API, 每个CAsyncSocket对象代表一个Windows Socket对象, 使用CAsyncSocket类要求程序员对网络编程较为熟悉。相比起来, CSocket类是CAsyncSocket的派生类, 继承了它封装的WinSock API。

一个CSocket对象代表了一个比CAsyn cSocket对象更高层次的Windows Socket的抽象, CSocket类与CSocketFile类和CArch ive类一起工作来发送和接收数据, 因此使用它更加容易使用。

4 结语

本文提出了一种基于SIP协议的视频终端软件的实现方案。主要论述了SIP/SDP协议模块的设计 (负责SIP会话的建立与维护) 、媒体处理模块的设计 (包括音视频的采集播放、RTP的实时传输和控制) 以及网络接口模块的设计 (主要是Windows Socket的设计) 。

摘要:本文阐述了基于SIP协议的视频电话终端软件的原理及设计。首先简单介绍了视频电话应用, 然后介绍了SIP协议, 重点提出系统的总体设计和视频电话系统各个模块的设计。其中重点在于媒体处理模块的设计, 包括音视频处理流程和RTP实时传输的控制, 以及网络接口的实现。

关键词:VoIP,SIP,视频电话

参考文献

[1] J.Rosenberg, H.Schulzrinne, GCamarilloandsoon“, Session initiation protocol”, RFC3261, Internet Engineer-ing Task Force, 6.2002.

[2] 司端锋.韩心慧.SIP标准中的核心技术与研究进展[J].软件学报, 2005, 16 (2) :239~250.

[3] 卢美莲, 程时端“.软交换技术”中兴通信技术, 2002 (4) .

上一篇:浅谈琶洲展馆装饰工程施工安全管理下一篇:长岭县农村土地调查工作方法研究