您的位置 首页 硬件

选用Linux操作系统和图形用户界面库完成SIP电话终端的设计方案

采用Linux操作系统和图形用户界面库实现SIP电话终端的设计方案-随着VoIP的迅猛发展,越来越多的个人用户正在使用软件电话、IP电话通过VoIP系统拨打国内和国际长途,IP电话的需求量越来越大,同时,人们对IP电话的要求也越来越高,例如要求IP电话体积小、方便携带、功耗低、待机时间长、漂亮的人机交互界面,功能可扩展等。解决这些需求的可行方案就是用嵌入式系统,具体而言就是采用一款32位嵌入式处理芯片(如ARM、Power PC),将Linux操作系统和MiniGUI图形库经过裁减移植到这些嵌入式处理芯片所构建的硬件平台上。由于Linux具有强大的网络功能,而MiniGUI是一款优秀的针对嵌入式Linux的轻量级图形用户界面库,在它们的基础上做应用开发,能够保证IP电话的稳定性和功能扩展,也能开发出漂亮的人机交互界面。

跟着VoIP的迅猛发展,越来越多的个人用户正在运用软件电话、IP电话经过VoIP体系拨打国内和世界远程,IP电话的需求量越来越大,一起,人们对IP电话的要求也越来越高,例如要求IP电话体积小、便利带着、功耗低、待机时间长、美丽的人机交互界面,功用可扩展等。处理这些需求的可行计划便是用嵌入式体系,详细而言便是选用一款32位嵌入式处理芯片(如ARM、Power PC),将Linux操作体系和MiniGUI图形库经过削减移植到这些嵌入式处理芯片所构建的硬件渠道上。因为Linux具有强壮的网络功用,而MiniGUI是一款优异的针对嵌入式Linux的轻量级图形用户界面库,在它们的基础上做运用开发,可以确保IP电话的稳定性和功用扩展,也能开宣布美丽的人机交互界面。

现在用来完结VoIP体系的协议有三种:SIP、MGCP和H.323,其间SIP协议是运用得最广泛的协议,所谓SIP电话便是支撑SIP协议的IP电话。

1 、SIP电话完结计划

依据IP电话的功用需求,SIP电话应当完结人机界面的交互、呼叫处理、语音的收集和播映、语音的编码和解码、语音的实时传输。本规划人机界面的交互运用嵌入式体系硬件渠道上的LCD和功用按键,选用MiniGUI图形库和Linux按键驱动;呼叫处理模块运用硬件渠道上的网络接口,选用eXoSIP协议栈;语音的收集与播映运用硬件渠道上的音频接口,选用Linux音频设备驱动;语音的编码和解码直接选用开源G.7-29A源代码;语音的实时传输运用RTP协议,选用开源的JRTPLIB库。

选用Linux操作体系和图形用户界面库完结SIP电话终端的规划计划

SIP电话软件结构图如图1所示。SIP电话由八个模块组成。每一模块对应一个线程。其间,主线程(线程1)的使命是:a.加载装备文件到内存中;b.初始化音频设备和功用按键设备;c.创立RTP会话实例和初始化eXoSIP协议栈;d.初始化四个数据区缓冲结构;e.创立、办理、吊销子线程;f. 显现SIP装备文件的装备信息和状况信息,处理来自呼叫处理模块子线程的音讯。呼叫处理模块子线程(线程2)的使命是:经过调用eXoSIP协议栈的API函数,完结SIP电话的呼叫进程操控。语音收集模块子线程(线程3)的使命是:完结语音的收集并将收集到的语音数据存储到大局数据缓冲区行列1中。语音编码模块子线程(线程4)的使命是:从大局数据缓冲区行列1中读取PCM码流并对其进行编码,将转化往后的G.729码流存储到大局数据缓冲区行列2中。数据发送模块子线程(线程5)的使命是:从大局数据缓冲区行列2中提取G.729码流,打包成RTP数据包发送到出去。数据接纳模块子线程(线程6)的使命是:检测接纳端口上的RTP语音包,提取G.729码流存储到大局数据缓冲区行列3中。语音解码模块子线程(线程7)的使命是:从大局数据缓冲区行列3中读取G.729码流对其进行解码,将转化往后的PCM码流存储到大局数据缓冲区行列4中。语音播映模块子线程(线程8)的使命是:从大局数据缓冲区行列4中读取PCM码流,经过D/A转换成模仿语音信号。

2、 各线程模块的完结

主线程模块首要完结体系各个功用模块的初始化作业,也是程序的进口点,MiniGUI程序的进口点为MiniGUIMain()函数;装备文件的加载拟完结从根文件体系到内存的加载,然后进行解析,寄存在大局SIP装备参数结构中。装备文件用来寄存呼叫处理模块和语音传输模块运用的参数,详细包含:本机IP地址、子网掩码、网关地址、SIP服务器IP地址,SIP端口号、用户名、本机电话号码、暗码、RTP端口号、被叫电话号码和注册间隔时间。初始化音频设备拟完结翻开音频设备文件,设置音频设备的采样频率,量化位数和声道数目。翻开音频设备文件可

经过调用Linux体系函数audio_fd=open(“/dev/dsp”,O_RDWR)来完结,调用成功后将回来音频设备的文件描述符。设置音频设备的采样频率,量化位数和声道数目可经过调用ioctl(fd,….)函数来完结。功用按键设备的初始化很简单,直接调用buttons_fd=open“/dev/b-uttons”,O)函数翻开按键设备文件即可。创立RTP会话实例,可经过调用JRTPLIB库的RTPSession类来完结,然后调用RTPSession类的Create()办法来对其进行初始化,创立完结后,需设置RTP会话实例的传输参数和会话参数。eXoSIP协议栈的初始化直接调用eXoSIP协议栈所供给的初始化函数。七个子线程的创立可经过调用pthread_create函数来完结。SIP装备信息的显现拟完结装备文件中的信息在MiniGUI主窗口上的显现,首要显现本机的IP地址和端口号、SIP服务器的IP地址、本机号码、本机用户名。SIP状况信息的显现拟完结对整个SIP业务搬迁状况的显现。例如,假如收到“180Ringing”音讯,则在MiniGUI主窗口上显现“对方正在响铃”,假如收到定时器的超时音讯,则在MiniGUI主窗口上显现“无人接听,请稍后再拨”。SIP状况信息的显现是一个音讯驱动的动态显现。SIP装备信息和状况信息的显现直接选用MiniGUI的窗口模型和音讯处理机制。SIP装备信息的显现直接经过调用MiniGUI供给的TextOut(hdc,O,O,host_ip)将SIP参数结构中的参数显现在MiniGUI主窗口上。SIP状况信息的显现有必要为每个SIP业务音讯界说相对应的MiniGUI音讯,以“180 Ringing”音讯和定时器超时音讯为例,自界说音讯如下:

#define MSG_180Ringing(MSG_USER+10)

#define MSG_TimerC(MSG_USER+11)

当呼叫处理模块子线程收到IP网络上的“180 Ringing”音讯和Linux内核的定时器超时音讯后,则经过调用SendMessage(hWnd,MSG_180-Ringing,0,0L)向MiniGUI主线程发送MSG_180Ringing音讯,主线程经过调用GetMessage()函数获取呼叫处理模块子线程所发过来的音讯,经过调用DispatchMessage(&Msg)函数把这些音讯发送到窗口进程函数进行处理。窗口进程函数收到相应的音讯,首要判别音讯的类型,若是MSG_180Ringing音讯,然后调用TextOut(hdc,0,0,“对方正在响铃”)函数在窗口上显现“对方正在响铃”字样。

呼叫处理模块子线程可直接调用eXoSIP协议栈所供给的API函数集,eXoSIP是在oSIP2的基础上对SIP音讯的API作了更上层的封装,可以很简单完结SIP电话的呼叫进程操控。呼叫处理模块子线程完结的难点是当呼叫衔接成功后,怎么发动语音收集、语音编码、数据发送、数据接纳、语音解码和语音播映6个子线程。本规划选用Linux线程间通讯-管道机制向其它6个子线程发送发动标识,6个子线程接纳到发动标识后,唤醒各自的线程,进行相应的语音处理和语音的传输。相同,当呼叫衔接开释时,呼叫处理模块子线程向6个子线程发送中止标识,6个子线程接纳到中止标识后,中止语音处理和语音的传输,堵塞各自的线程。

语音收集模块、语音编码模块、数据发送模块、数据接纳模块、语音解码模块和语音播映模块6个子线程的进程操控是相同的,首要进入主循环,调用Linux体系函数select()堵塞本线程,侦听本线程与呼叫处理模块子线程之间的管道,若管道中有数据,则调用体系函数read()读取数据,判别数据是否为发动标识,若是,则进入子循环进行相应的处理;若为其它数据,则从头回到新一轮的循环。进入子循环进行相应的处理的一起,将select()设为非堵塞形式,调用select()函数侦听本线程与呼叫处理模块子线程之间的管道,若管道中有数据,则调用体系函数read()读取数据,判别数据是否为中止标识,若为中止标识,则跳出子循环从头回到主循环,线程从头回到堵塞状况;若为其它数据,则不做任何处理,从头回到子循环。

因为各子线程同享数据缓冲区行列,为了正确读写数据,在规划数据缓冲区行列结构和读写操作函数时,运用了Linux下线程间的同步和互斥机制,确保了对内存资源的安全同享。为了规划出通用的数据缓冲区行列结构和读写操作函数,无妨将向缓冲区写数据的子线程界说为生产者线程,将从缓冲区读取数据的子线程界说为顾客线程。为了确保对数据缓冲区行列进行安全的读写操作,生产者线程和顾客线程有必要满意两个条件:

(1)生产者线程写入缓冲区的数目不能超过缓冲区容量;

(2)顾客线程读取的数目不能超过生产者线程写入的数目。

为了完结这两个条件,在程序完结中运用了写指针和读指针来判别缓冲区是空仍是满。在初始化时读指针和写指针为0;假如读指针等于写指针,则缓冲区是空的;假如(写指针+1)%N等于读指针,则缓冲区是满的,%表明取余数,N表明缓冲区行列的长度。

3、 结语

本文提出了根据嵌入式Linux和MiniGUI的SIP电话终端的完结计划,并给出了各线程模块的完结办法,与传统的台式IP*处理计划比较,本计划具有如下杰出的特色与立异点:a.体积小、功耗低,因为体系所依靠的硬件渠道是嵌入式体系渠道,而嵌入式硬件渠道自身具有体积小、功耗低特色。b.功用可扩展。因为嵌入式体系软硬件可裁剪,可以便利开发人员进行功用扩展。c.图形界面美丽。因为体系选用嵌入式图形界面MiniGUI,可以开宣布美丽的图形界面。d.选用多线程机制和缓冲区行列对语音的收集与播映、语音的编码与解码和语音的实时传输进行并行处理,确保了语音通话的连续性。

对体系进行测验的结果表明,本规划可以对呼叫进行稳键的操控,可以确保语音通话的连续性,对从事相关产品的开发具有必定的参考价值。

责任编辑:gt

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/95633.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部