- 1 -
VOIP语音网关协议栈的设计与开发
薛楠,温向明
北京邮电大学通信网络综合技术研究所 ,北京(100876)
摘 要:本文阐述了用 协议实现 VOIP语音网关的设计方案及具体实现方法,文章
详细论述了协议栈的开发。
关键词:VOIP,,状态机,协议栈
中图分类号:
1. 引言
由于价格低廉和对网络的高效利用等优点,VOIP(Voice over IP)[1]已经成为当前通信行业
中发展最快的应用服务之一(图1)。VOIP是利用基于TCP/IP协议族的包交换网络进行语音
通信的技术,以前的分组交换网络对于语音这样的实时业务,其服务质量是很难得到保证的,
但是随着网络质量的改善和带宽的增加,IP语音业务正越来越被人们所接受。
图 1:VOIP网络体系结构
国际电信联盟(ITU-T)于1996年提出了基于包交换网络的多媒体会议标准。
具有较好的可移植性、高可靠性以及灵活的功能接口和用户接口,因此,为了设计高性价比
的语音网关,本论文提出的VOIP语音网关开发采用协议,使其具有较高的运行性能。
本文将重点介绍该语音网关开发过程中软件部分的开发。
2. VOIP语音网关的体系结构
硬件结构体系
在开发时采用“硬件+嵌入式操作系统+应用层软件”的系统架构来设计VOIP语音网关
[2]。硬件平台以VOIP主芯片为核心,辅以必要的外围设备。主芯片使用ARM7处理器,用于
管理内存、控制以太网口、与调试主机通信以及与DSP进行通信;DSP采用三星S3C4510,
主要作用是控制SLIC(用户线路接口电路)并完成语音处理功能,如语音编码、回声消除、
DTMF的生成与检测等。AC483作为外围语音编解码模块(支持、等编码方式)、
网络通信模块(10M、100M自适应)电话接口线路。硬件模块体系结构如图2:
2
图 2:语音网关硬件模块体系结构
软件结构体系
系统的实现依赖于网络协议栈和嵌入式实时操作系统(RTOS)。本网关采用的RTOS
是VxWorks[3],它的特点有:系统内核小、高效的任务管理、灵活的任务间通信、微秒级中
断处理和支持广泛的网络通信协议。开发工具使用优秀的实时操作系统开发工具Tornado。
该语音网关具备以下五个基本模块:IP接入端的呼叫管理模块、PSTN接入端的
PSTN呼叫管理模块、RTP/RTCP模块、网管接口模块以及上述四大模块的核心控制管理模块
(图3)。
图 3:语音网关软件模块体系结构
呼叫管理模块和PSTN接入端的PSTN呼叫管理模块是VOIP语音网关最基本的两
大模块,分别负责IP端和PSTN端的接续任务;在通话双方接续完成后,通话开始,RTP/RTCP
模块控制板卡DSP进行语音的编码和解码;网管通过网关接口模块对整个接续和通话的过
程、状态进行跟踪;核心控制管理模块采用FSM(有限状态机)来控制管理所有模块工作的
开始和结束及相互间交互的任务。基于程序结构的层次性以及各种呼叫流程的独立性,有限
状态机分为三个层次:
主状态机:描述了完整的呼叫流程,包含了各种可能的业务种类及新业务接口。主状态
机规定的各种业务流程被设计成可根据不同应用类型、用户等级进行灵活配置的方式。
3
业务流程状态机:描述了部分可以从完整呼叫流程中独立出来的业务流程,包括:呼叫
建立子状态机、释放子状态机、主动管理前向逻辑通道子状态机、主动管理反向逻辑通道子
状态机、被动管理前向逻辑通道子状态机、被动管理反向逻辑通道子状态机以及各种补充业
务子状态机等。
协议状态机:包括协议规定的各种RAS通道过程状态机、呼叫信令通道过程状态
机以及协议规定的各种控制过程的状态机。
协议利用开源项目移植进入该系统Stack中(在系统设计中将协议
栈模块与核心控制管理模块合称为Stack)。
3. Stack模块的开发设计
协议
Stack模块由协议栈模块与核心控制管理模块组成。主要负责信令流与语音流的建
立、控制。下面将对协议栈进行简单的介绍(图4)。
图 4: 协议栈
AUDIO:定义了一系列的语音编码协议,如、、等,通话时双方可
以协商采用一个都能接受的编码方式。
RTP协议:为实时数据的发送提供端到端的网络传输功能,它不保证实时服务的Qos。
RTCP协议:在一个会话过程中,RTCP定期地将控制和统计信息传送给会话各方。
RAS:RAS利用消息在终端与网守之间执行登记、许可、带宽改变、状态、
脱离等功能。
协议:用以实现呼叫的建立与终止。
协议:定义了一系列的控制信息以保证端到端之间音频、视频数据和一般数
据的可靠传输以及终端、局端间能力集的交换,并负责建立、关闭语音逻辑信道。
Stack启动流程
协议栈的开发框架如图5:
4
图 5:协议栈开发框架
注释:蓝色框部分不包含在Stack。
CLI(Command Line Interface)模块主要负责取得和处理用户对网关的配置参数,并且
将配置参数通过接口函数向其他模块传递。启动网关系统后,从flash中读取参数,例如配置
网关向网守注册过程所需要的参数,就在网关启动后从CLI的接口函数中取得。
Stack启动时,首先启动核心控制管理层,从 CLI中读取所需参数,配置相应参数。然
后依次启动状态机、超时机制、四路接受 RTP包的 task、发送语音包到硬件的 task,最后进
入监听 socket的无限循环。同时启动两个进程分别控制收发消息与状态机的转换。
基本通话流程
来电过程中首先被叫端的核心控制管理层从监听端口接收到 消息,调用 Alerting
回调函数,改变状态机的状态。
在被叫端摘机后,打开 信道。然后打开 信道,进行能力集协商。在能力集
协商结束后,打开接收信道、发送信道,开始接收 RTP 包。通话结束后,逆序关闭相应的
端口即可。
去电过程中主叫摘机后拨号,Driver检测到摘机后将该消息传送给 Stack,Stack通过控
制 FSM状态转换,并且启动 makecall()函数来发起呼叫。
首先打开 信道,发送 setup消息,通过 RAS发送 admission消息。然后打开
信道,进行能力集协商。在协商结束之后,打开接收信道、打开发送信道,开始发送 RTP
包。
通话结束时,逆序关闭相应端口即可。
Stack功能性描述
Stack 函数主要任务是通过调用 MonitorChannels()函数,启动一个消息监听进程。通过
监听各个 socket信息来监听呼叫信息。并通过使用回调函数,执行建立
5
建立语音通道,收发信令信息,能力集协商等操作。
LMonitor()进程由 stack在初始化的时候创建。主要负责改变状态机状态,接收 driver
和 stack发送的消息,并且分析做相应的处理。
Timeout()任务由 stack在初始化的时候创建。使用 Send2HW_isr()协助定时,每 4ms
向 g_msgq_timeout发送 MSG_TIMER_OUT。通过利用消息队列接收 timeout信息来实现拨
号和摘机超时处理。
RVFromNet_0, RVFromNet_1, RVFromNet_2, RVFromNet_3这四个任务由 stack在初始
化的时候创建,四个任务分别负责 0,1,2,3四路话路从网络上接受语音包。
SVToHW()任务由 stack在初始化的时候创建。主要任务是定时向 driver发送语音包。
如果编码格式为 ,则间隔 10ms向 driver发送一次语音包,每次发送长度为 10bytes。
如果编码格式为 ,则间隔 80ms向 driver发送一次语音包,每次发送长度为 80bytes。
4. 结束语
以上分析了语音网关的设计与开发过程,给出了 VOIP语音网关的软、硬件解决方案,
经过实际测试,该方案满足实际应用的要求,具有较高的实用价值。
VOIP强调网络的开放性,其原则包括网络架构、网络设备、网络信令和协议。实现呼
叫控制与承载分离,并且与现有网络互通,支持各种业务和用户的接入。通过语音网关,电
路交换网和分组交换网实现了很好的交互和融合。
参考文献
[1] 张登银,孙精科,VOIP技术分析与系统设计。北京:人民邮电出版社,2003。
[2] 沈鑫剡,多媒体传输网络与 VOIP系统设计。北京:人民邮电出版社,2005。
[3] 程敬原,VxWorks软件开发项目实例完全解析。北京:中国电力出版社,2005。
Design and Exploitation of Stack in VOIP Gateway
Xue nan,Wen xiangming
Synthetical Telecommunication Network Technologies Research of Beijing University of Posts
and Telecommunications,Beijing(100876)
Abstract
The paper introduce a design solution and realization method of VOIP Gateway using protocol.
Discussing the exploitation of stack particularly.
Keywords:VOIP,,state machine,stack
作者简介:薛楠,男,1981年生,内蒙古包头市人,就读于北京邮电大学,硕士,通信与
信息系统专业,方向为无线宽带网。