毕业设计(论文)基于SIP协议的嵌入式VOIP系统的研究与实现_第1页
毕业设计(论文)基于SIP协议的嵌入式VOIP系统的研究与实现_第2页
毕业设计(论文)基于SIP协议的嵌入式VOIP系统的研究与实现_第3页
毕业设计(论文)基于SIP协议的嵌入式VOIP系统的研究与实现_第4页
毕业设计(论文)基于SIP协议的嵌入式VOIP系统的研究与实现_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、embeddedvoipsip-based research and implementation ofthe terminala dissertation submitted tonanjing institute of technologyfor the academic degree of bachelor of scienceby supervised byinstructor college of communication engineeringnanjing institute of technologyjune 2011摘要随着计算机技术和网络技术的发展,语音压缩和实时传输控制

2、技术的不断发展,使得在ip网上传输语音数据变得不再困难。voip是指利用ip网络传送话音的技术,也称网络电话或ip电话。在多媒体技术和网络互连技术的推动下,voip技术诞生虽然时间很短,但发展迅猛。同时,随着嵌入式技术的不断发展,嵌入式技术从过去工业控制的应用模式逐步渗透进入消费电子产业。嵌入式voip终端作为嵌入式技术与voip技术的结合,有着广阔的发展前景。论文首先概要介绍了voip的发展现状和前景,研究了基于sip的信令技术、实时传输技术和媒体协商技术;然后详细阐述了linux系统基础上终端应用层的实现思想和具体架构,其中包括用于控制信令的sip模块、用于处理语音的语音模块和用于网络传输

3、的rtp模块。在信令控制部分,在研究并分析开源osip协议栈的事务状态机模型的基础上,解决了信令控制问题。在语音信号处理和数据包传输部分,主要研究并分析了开源mediastreamer协议栈的实时语音传输工作流程。模拟测试结果显示,设计并实现的嵌入式voip终端可以对sip信令进行很好地控制,具有良好的互通性。关键字:sip;嵌入式linux;voip;rtp;armabstractwith the development of computer technology and network technology, voice compression and real-time transmi

4、ssion control technology continues to evolve, making the internet to transmit voice data in ip becomes no longer difficult. voip , also called ip phone ,is a technology that transmits voice in packet-switching net. with the technology evolution of multimedia and network, voip technology advance rapi

5、dly. at the same time, with the development of embedded technology, embedded products have extended from traditional industry field to consuming electronics. as the combination of both technologies, embedded voip terminal will consequentially have great future.firstly, voips current and future state

6、s are overviewed in this dissertation. and the signaling technology based on the sip, the real time transport technology and session description technology is discussed and analyzed. secondly, the application architecture and realization of the embedded terminal base on linux system is discussed, wh

7、ich contain sip module (signaling controller), rtp module(voice transmitter) and voice module (voice processor). in the sip module, the difficulty of signaling control is settled after studying and analyzing transaction state machine of osip. in rtp and voice modules, the open source real time strea

8、m media library (mediastreamer) is devoted to work the flow of processing and transmitting of voice data. after testing, the terminal can work well to send, receive sip signaling and voice stream.key words:sip; embedded linux; voip; rtp; arm 目录第一章 绪论1.1论文的背景及国内外研究现状在70年代,人们已开始了voip的研究,然而当时系统的话音质量不能令

9、人满意,主要原因是当时投入运营的arpanet的干线链路带宽仅为50kbit/s,为典型的窄带分组交换网络,不能满足话音的实时传输。进入90年代后,随着internet在全球范围内兴起和话音编码技术的发展,ip分组话音通信技术获得了突破性的进展和较为广泛的应用。1996年,经过各国专家的努力,itu-t(国际电信联盟)通过了局域网上支持可视电话通信的信令协议,也就是现在应用最为广泛的h.323协议族。这个协议一经推出,就成为ip网络电话系统的公共规范,同时也极大的推动了ip电话的发展,并逐渐进入公共电话网服务。2002年,另一大阵营ietf(因特网工程任务组)发布了rfc3261规范,即基于s

10、ip的信令协议标准。sip与h.323提供的功能和服务基本上都是相同的,但是由于sip在设计上更能体现internet体系结构的优势,同时基于文本方式的信令使用简单且易于扩展。sip协议一经推出便得到了迅速发展,3gpp组织也在其发布的ims5中采用sip作为信令协议。随着voip技术的发展,相信sip协议将逐步代替h.323协议成为voip的核心信令协议。基于这一应用趋势,国际上已经开展了sip系统的研究和实现,这些sip系统中关于终端的研究大多集中在软终端上。如美国的sj labs公司开发了一套基于sip的voip软终端系统sjphone,使用这套软终端系统,可以使pc用户方便的通过互联网

11、进行语音通讯。微软的视窗(windows)操作系统中的msn messenger采用的也是sip协议。在嵌入式终端方面,随着嵌入式技术的不断发展成熟,嵌入式技术与sip技术的结合越来越受到关注,国外的个别机构也已开始了这方面的研究,如法国cegetel公司曾演示了一套sip多媒体消息系统,采用这套系统后,个人数字助理(pda)、笔记本和移动电话都可以非常方便地通过公网通信,但是这些终端在信令控制和通用性上还有待提高。目前,我国也有一些公司和科研机构在进行基于sip的ip电话的研究,但总体来看,我国在基于sip的ip电话的研究方面相对还比较滞后。1.2论文的研究内容与意义voip(voice o

12、ver ip),也称ip电话,它是利用基于分组交换的ip(internet/intranet)数据网络进行语音信号传输的一种技术。voip中最重要的是信令系统,sip(session initiation protocol,会话初始化协议)协议因其简单、灵活的技术特点,正在逐步代替原有的h.323协议成为ip语音技术的信令核心协议,基于sip的voip终端研究也随之成为一个热点。然而,目前大多数终端的研究都集中在软终端上,对于嵌入式终端的研究还存在较多问题,例如sip信令控制复杂、硬件相关性较大和通用性不好等。为此,本文在研究了sip协议、rtp协议和嵌入式系统的基础上,移植并实现了一种基于l

13、inux操作系统的,使用sip信令协议的,通用性较好的嵌入式voip终端,以适应voip终端的广泛应用。本文研究与实现的voip终端结合了sip信令与嵌入式终端两大技术的优势,满足了越来越多用户的需求,并且符合集移动通信、网络技术和嵌入式系统为一体的智能化通信终端的发展趋势,对推进voip终端的普及与sip信令协议的广泛使用有重要的意义。1.3论文的章节安排第一章绪论,简要介绍了voip技术的发展,指出了课题研究的背景、意义和本次课题主要研究内容。第二章嵌入式和voip的关键技术,主要介绍了嵌入式交叉编译等知识。对voip的关键技术,如sip协议,sdp协议,rtp协议,pcm语音编解码做了分

14、析和探讨。第三章软硬件总体设计方案,这一章介绍了voip终端的硬件支持,详细介绍了本次毕设所采用的arm9开发平台。此外,还重点介绍了本次应用层所采用的开源软件linphone及其移植时所依赖的各个库。第四章voip系统实现方案,这一章主要介绍嵌入式bootloader,内核以及文件系统的制作。另外,还介绍了来源软件linphone和它所需要依赖的各个库在arm平台和x86平台上的移植。第五章系统实现和测试时遇到的问题的解决方案,本章主要介绍了在安装搭建交叉编译环境,linphone软件移植以及最终测试时遇到的一些问题,并给出这些问题的解决方案。第六章成果展示及源码分析,本章主要介绍了本次毕业

15、设计所作的一些成果,包括bootloader、内核、文件系统、交叉编译后的目标文件以及使用抓包软甲对通话过程进行的抓包工作。最后对所抓的包和linphone的源代码进行了简要的分析。第七章总结与展望,总结了本课题的研究工作,提出了今后进一步工作的方向。 第三章 软硬件总体设计方案3.1系统设计目标与开发方法3.1.1系统设计目标本系统设计的目标是在嵌入式平台上实现一个voip终端(用户代理,如图2.3中的ua hard),具体来说包括:(l)能够满足ip网上语音通信的基本要求(ua呼叫控制、sip消息解析、语音编解码、rtp传输);(2)按照标准sip协议开发,能和其它使用sip协议的ua互通

16、;(3)运行稳定;(4)具有良好的开放性和扩展性;(5)系统易于维护,方便后续的研究和开发。3.1.2系统的总体结构根据分层实现的思想,系统的总体结构如图3.1所示:图3.1 系统的总体结构3.2系统硬件平台的选择根据局域网上语音通信的需要,本系统的硬件部分至少应包括以下模块:(l)嵌入式微处理器(2)存储器(3)音频模块:包括音频的输入(mic)和输出(扬声器)(4)lan模块:采用标准rj-45接口与局域网连接开发嵌入式硬件平台是一项复杂的工作,不仅要考虑各模块的功能、性能、接口,模块间电压匹配、时序匹配等技术性因素,还要考虑成本,供货情况等非技术因素。此外,硬件结构的设计还应具有一定的可

17、扩展性以利于保护投资。综合各种因素,我们选用了mini2440开发板,该开发板采用samsung的s3c2440微处理器,带有丰富的接口,完全可以满足本系统开发的需求。系统硬件框图如图3.2所示(实物图见附录a)。图3.2 系统硬件框图3.3硬件平台的介绍3.3.1 s3c2440芯片原理及开发板结构(cpu) 三星公司推出的16/32risc微处理器s3c2440a,为手持设备和一般类型应用提供了低价格、低功耗、高性能小型微控制器的解决方案。为了降低整体系统成本,s3c2440a提供了丰富的内部设备s3c2440a采用了arm920t的内核,0.13um的cmos标准宏单元和存储器单元。其低

18、功耗,简单,优雅,且全静态设计特别适合于对成本和功率敏感型的应用。它采用了新的总线架构 advaneedmicrocontr0llerbusaiehiteeture(amba)。s3c2440的杰出特点是其核心处理器 (cpu),是一个由arm公司设计的16/32位arm920t的risc处理器。arm920t实现了mmu, ambabus和harvard高速缓冲体系结构。这一结构具有独立的16kb指令cache和16kb数据cache。每个都是由具有8字长的行组成。通过提供一套完整的通用系统外设,s3c2440a减少整体系统成本和无需配置额外的组件。下图是s3c2440a方框图3.3图3.3

19、s3c2440方框图mini2440开发板选用s3c2440处理器,并结合udal341音频eodee,es8900网卡芯片,以及sdram,nomash,nandflash等芯片,其资源信息如下:cpu处理器- samsung s3c2440a,主频400mhz,最高533mhzsdram 内存- 在板64m sdram - 32bit 数据总线 - sdram 时钟频率高达100mhzflash 存储- 在板128m nand flash, 掉电非易失 - 在板2m nor flash,掉电非易失,已经安装 bioslcd显示 - 板上集成4线电阻式触摸屏接口,可以直接连接四线电阻触摸屏

20、- 支持黑白、4 级灰度、16 级灰度、256 色、4096 色 stn 液晶屏,尺寸从 3.5 寸到 12.1寸,屏幕分辨率可以达到1024x768象素; - 支持黑白、4 级灰度、16级灰度、256色、64k色、真彩色tft液晶屏,尺寸从 3.5寸到12.1寸,屏幕分辨率可以达到1024x768象素; - 标准配置为nec 256k色240x320/3.5英寸tft真彩液晶屏,带触摸屏; - 板上引出一个 12v电源接口,可以为大尺寸tft液晶的12v ccfl 背光模块(inverting)供电。接口和资源- 1个100m 以太网rj-45 接口(采用dm9000网络芯片) - 3个串行

21、口 - 1个usb host - 1个usb slave b型接口 - 1个sd卡存储接口 - 1路立体声音频输出接口,一路麦克风接口; - 1个2.0mm间距10 针jtag接口 - 4 user leds - 6 user buttons(带引出座) - 1个pwm 控制蜂鸣器 - 1个可调电阻,用于ad模数转换测试 - 1个i2c总线at24c08芯片,用于i2c总线测试 - 1个2.0 mm间距20pin 摄像头接口 - 板载实时时钟电池 - 电源接口(5v),带电源开关和指示灯系统时钟源12m 无源晶振实时时钟- 内部实时时钟(带后备锂电池)3.3.2存储器存储器是硬件系统的重要组成

22、部分,在嵌入式系统中,通常用非易失flash存储器存储启动信息、操作系统、各种配置参数以及断电后需要保存的用户数据,而用sdram存储临时数据和程序。 flash存储器又分为nor flash和nand flash两种。mini2440提供了2mb的nor flash存储器,可存放少量启动代码。同时还提供了1片128mb的nand flash用于存放启动代码、操作系统镜象和文件系统。s3c2440支持stepping stone机制,因此可以采用l片nand flash同时作为启动rom和系统程序保存rom。mini2440通过一个bootsel跳线来选择通过nor flash启动还是通过na

23、nd flash启动。此外,mini2440还包含64mb的sdram,用于设置程序堆栈和存放各种变量等用途。3.3.3以太网模块mini2440包含一个cs8900a作为主控芯片的10m以太网模块。其主要特性如下: 单芯片ieee802.3以太网控制器(带directisa-bus接口) 工作电压3v,最大工作电流55ma 全双工操作 片上收发帧的ram缓存区 10base-t端口具备隔离变压器 可编程传输特性3.3.4音频模块mini2440使用了philips的uda1341音频芯片。该芯片工作电压为3v,集成adc和dac,提供1路立体声音频输出、1路mic(可支持录音)和1路line

24、-in。而由于voip需要声卡能够全双工工作,uda1341不支持使用dma方式的全双工工作方式,因此本系统使用了外接的usb声卡(采用uac3556b芯片)代替板载的uda1341声卡芯片,实现全双工工作方式。3.4系统软件构架3.4.1嵌入式操作系统的选择嵌入式操作系统是嵌入式设备软件的核心部分。它的存在使得设备的功能有很大的扩展空间和伸缩性能。选择嵌入式操作系统时要考虑系统的定制能力、开发工具支持、可利用资源、可移植性、系统成本、对中文的兼容性以及技术资料支持等因素。典型的嵌入式操作系统有:windows ce、vxworks、嵌入式linux。linux进入嵌入式操作系统市场较晚,但发

25、展极其迅速,目前己经抢占了大片市场。linux之所以能在嵌入式系统市场上取得如此辉煌的成果,与其自身的优良特性是分不开的。1.广泛的硬件支持linux能够支持x86、arm、mips、alpha、powerpc等多种体系结构,目前已经成功移植到数十种硬件平台,几乎能够运行在所有流行的cpu上。2.内核高效稳定linux内核的高效和稳定已经在各个领域内得到了大量事实的验证,linux的内核设计非常精巧,分成进程调度、内存管理、进程间通信、虚拟文件系统和网络接口五大部分,其独特的模块机制可以根据用户的需要,实时地将某些模块插入到内核或从内核中移走,这些特性适合于嵌入式系统的需要。3.开放源码,软件

26、丰富linux是开放源代码的自由操作系统,它为用户提供了最大限度的自由度,由于嵌入式系统千差万别,往往需要针对具体的应用进行修改和优化,因而获得源代码就变得至关重要了。linux软件资源十分丰富,每一种通用程序在linux上几乎都可以找到,并且数量还在不断增加。在linux上开发嵌入式应用软件一般不用从头做起,而是可以选择一个类似的自由软件作为原型,在其上进行二次开发。4.免费使用嵌入式linux是免费的。使用者无需向任何组织或个人申请使用许可,更不用交纳许可证费用,这无疑有利于降低嵌入式产品的成本。综合考虑,本课题选择免费的嵌入式linux作为操作系统平台。3.4.2 sip,rtp协议栈的

27、选择协议栈是协议的具体实现实体,开发sip应用需要一个稳定高效的sip协议栈。sip协议栈的作用是提供sip操作所需的基本数据结构和各种应用程序编程接口(api)。本设计选用了开源sip协议栈osip与开源rtp协议栈ortp。osip协议栈用ansi c编写,结构小巧简单,只有400k左右,适合嵌入式系统,并具有模块化、可移植性好、工作稳定、兼容性强等特点。osip由解析模块、工具模块和状态机模块构成,其核心是状态机模块。ortp 特性与osip基本相同。3.4.3本次课题所采用的开源软件(1)操作系统red hat enterprise linux 5(2)交叉编译器arm-linux-g

28、cc(3)开源软件linphone(4)开源软件所需要的依赖库libogg-1.1.3.tar.gz(/gnu) speex-1.2beta3.tar.gz(依赖于 libogg) libosip2-3.3.0.tar.gz(/gnu/osip/libosip2-3.3.0.tar.gz) libexosip2-3.3.0.tar.gz readline(optional) intltool-0.35.0.tar.gz(optional) ffmpeg(提供 linphone视频支持,如不需视频功能可不要)(5)intltoo

29、l的依赖库xml-parser(6)超级终端securecrt(7)远程登录软件ssh(8)串口转usb软件(9)usb下载程序软件(10)dnw烧写程序工具以上所介绍的开源软件都可以在chinaunix网站上下载得到。3.5linphone依赖库介绍linphone可以分为以下两部分:前端和liblinphone:无论gnome图形界面还是liblinphonee文字界面都属于前端;linphone则是linphone能够提供功能的库函数。liblinphone所依赖的库:包括sip协议客户端库exosip和osip,实时传输协议库ortp,回声消除算法speex和语音压缩和解压算法库lib

30、ogg,生成音频和视频流的mediastreamer2。3.5.1osip模块osip是遵循ietf标准,使用ansic编写,源代码开放的sip协议栈。osip主要有下列优点:(l)结构小巧简单,只有400k左右,适合在嵌入式系统上应用;(2)可移植性好,已被成功的应用于solaris、hpunix、vxworks、windows和gnu/linux等系统中;(3)工作稳定、兼容性强。osip主要由解析模块、工具模块和状态机模块构成,其核心是状态机模块。图3.4 osip结构解析模块完成对sip请求和响应进行封装与解析处理。解析模块又可分为sip解析、sdp解析与url解析。工具模块主要提供一

31、些处理工具用于对话管理和sdp协商。状态机模块负责对某个事务(如注册过程、呼叫过程等)状态的维持及处理,并在特定的状态下触发响应的事件或回调函数。根据rfc描述中关于sip协议事务层的定义,osip协议栈有4种状态机:客户端邀请事务(ict),客户端非邀请事务伽ict),服务器端要求事务 (ist),服务器端非邀请事务 (nist)。前两种状态机是由客户端发起的,后两种状态机是由服务器发起的,这4种状态机涵盖了sip的各种事务类型。其中ict是sip客户端中最常见的事务。图3.5 ict状态机osip的4种状态机对应了sip中的4种基本事务,而在sip信令的通信过程中,事务是最基本的通信单元,

32、所以在用osip实现sip协议栈的过程中,对于这4种状态机的维护和管理是非常关键的。从图中可以看出osip的状态机比较复杂,管理起来也比较复杂,但在实际的应用过程中不需要对状态机进行管理,这里需要管理的是事务,在事务初始化的同时,osip协议栈内部会对状态机进行管理,这也是osip模块松耦合的表现之一。鉴于osip只是实现了sip协议栈的状态机,在voip终端中直接使用比较复杂,osip专注于sip底层解析,这使得它具有很高的效率。但另一方面,由于没有提供高层的sip会话控制api,使得上层应用在调用协议栈时很破碎,降低了易用性。为此osip的开发者们又在。sip的基础上开发了exosip。e

33、xosip是osip的扩展,它部分封装了osip协议栈,使得它更容易被使用。exosip实现了作为单个sip终端的大部分功能,如register、eall、subseription等。鉴于osip只是实现了sip协议栈的状态机,在voip终端中直接使用比较复杂,我们使用osip的扩展函数库exosip简化开发任务。下面我们将详细介绍exosip库的内容。3.5.2 exosip模块exosip是osip的一个扩展协议集,其在osip的基础上部分封装了osip协议栈,使其更容易被使用。exosip使用udp socket套接字实现底层sip协议的接收/发送;使用定时轮循的方式调用osip的事务处

34、理函数,这部分是协议栈运转的核心。通过添加/读取事务消息管道的方式,驱动事务的状态机,使得来自远端的sip信令能汇报给调用程序,来自调用程序的反馈能通过sip信令回传给远端;增加了对各个类型事务的超时处理,确保所有资源都能循环使用,不会被耗用殆尽;使用jevent消息管道来向上通知调用程序底层发生的事件,调用程序只要读取该消息管道,就能获得感兴趣的事件,进行相关的处理。exosip函数库中的主要数据结构:struct exosip_event exosip_event_type_t typechar textinfo 256void external_referenceosip_message

35、_t *requestosip_message_t *responseosip_message_t *ackint tidint didint ridint cidint sidint nidint ss_statusint ss_reason 主要exosip函数举例:int exosip_init ( void )用途:初始化 exosip函数库int exosip_listen_addr (int transport, const char *addr, int port, int family, int secure )用途:监听发送到指定端口的sip事件参数:transport:使用

36、ipproto_udp指定使用udp协议 addr:指定绑定的地址 (null 代表所有接口) port:指定监听的端口. (0 代表随机端口) family:指定使用协议族(af_inet 或者 af_inet6). secure:0指定 udp 或者 tcp, 1 指定 tls.1. exosip_event_t * exosip_event_wait ( int tv_s, int tv_ms)用途:指定查询sip事件的时间间隔参数:tv_s:间隔时间 (单位:秒)tv_ms:间隔时间(单位:毫秒)2. int exosip_call_build_initial_invite (osip

37、_message_t,*invite, const char *to, const char *from, const char *route, const char *subject )用途:为一个新的呼叫构造默认的invite消息. 参数:invite:指向sip消息的指针.to:被呼叫着的sip url. from:呼叫者的sip url.route: invite消息的头部. (可选) subject:呼叫的主题.3. int exosip_call_send_initial_invite (osip_message_t *invite )用途:发送已构造完毕的invite消息参数:i

38、nvite:待发送的invite消息。3.5.3 rtp模块本系统的rtp模块采用开源的rtp协议栈ortp16,ortp是gpl授权的实现rtp的开源协议栈,用c语言编写,可应用于windows和linux平台。其支持多种rtp格式;能够完成发送接收的实时调度,单线程支持多路媒体流;有自适应的缓冲区算法并实现了rtcp。利用该协议栈可以较方便的实现对实时媒体的传输和控制,如对本地待发数据的rtp封装,对接收到的rtp包拆包以及通过对网络rtcp监测,适当的调整本地的编解码器策略。rtp提供了时间戳、序列号以及其它的结构用于控制实时数据的流放,发送端依照即时的采样在数据包里设置了时间标签。在接

39、收端收到数据包后,就依照时间标签按照正确的速率恢复成原始的媒体流。rtp和udp二者共同完成运输层协议功能:rtp负责数据包按时间标记和封装;udp只是传输数据包,不考虑数据包之间的时间顺序。rtp数据发送的过程可以简单描述如下:(l)持续地从数据队列中取出待发送的数据;(2)根据系统时间生成当前的时间戳;(3)将数据和时间戳一起交由协议栈发送处理;(4)协议栈完成对数据的rtp格式封装并交付udp层发送。当从网络上接收到rtp/rtcp包时,首先调用rtc解包模块进行拆包,然后按照一定的时间粒度调用去抖缓冲中的函数将压缩语音包送给cpu,通过cpu还原成媒体信号,最后经codec芯片进行d/

40、a转换后送至终端输出。数据拆包过程如图3.6所示。图3.6 rtp数据包拆包ortp中发送和接收主要是两个函数rtp_session_send_with_ts和rtpsession_recy_with_ts。以rtp_session_recv_with_ts为例:内部接收数据使用的是rtp_session_recv_with_ts,首先,会接收所有scoket上的数据,然后将rtp包存放在一个队列之中,一系列处理之后,有一个pthread_mutex_lock的线程锁,将线程锁住。此时,由rtp_scheduler_schedule线程进行调度(该线程在协议栈初始化)时创建。rtp_sched

41、uler_schedule会遍历所有的 media session(媒体流),然后判断其中的timestamp(时间戳),如果计算的时间到达,则让rtp_sessin_recvm_with_ts继续处理。 时间戳的算法是以第一个打到的rtp数据包为准,然后根据其中的时间,进行推算。假如第一个包是10点整来的,然后ptime又是20ms,那么下一个包的时间就是10点又20毫秒。media session是一个rtpsession对象,包含多种属性和方法。rtpscheduler中包含一个rtpsession的队列,用来支持多媒体流。 值得一提的是,npesscheduler-schedule中有

42、一个独特的”sleep”,该sleep可以停顿10ms。并且这个时间是绝对的,如果中间因为处理或者其他原因延迟了2ms,那么这个sleep停顿的就是8ms。具体函数可以看一下posixtimer.c中的posix_timer_do。实现。精确的计时使用select,精确时间的取得很多使用gettimcofday这个函数。在实现单线程支持多路媒体流上,ortp对外是有一个sessionset,完全模拟了select的做法,对外提供的接口,也和标准seleet几乎一样。主要的处理实现,还是在找pesscheduler里面完成。模拟seleet的唤醒,使用了 pthread_cond_wait。3.

43、5.4语音处理模块语音处理模块的工作是完成语音信号的采集、编码、解码和回放,其大致的工作流程如图5.4所示,可分为语音数据发送和语音数据接收两个部分。图3.7语音模块处理流程语音数据发送的过程为:通过uac3556b编解码芯片完成语音信号的脉冲编码调制(pcm),将模拟信号转化成数字信号;采用选定的编码标准对数字信号进行压缩编码;加上rtp头和其它头部字段,封装数据包送到udp协议层传输,完成音频信号的发送。语音数据的接收,采用在sdp协商过程中获得的对方的编码方式,首先需要从rtp包中获得语音的编码信号,对数据进行解码,然后将这些经过解码的信号解调还原成模拟信号。本系统中采用mediastr

44、eamer媒体库完成语音模块的功能。mediastramer媒体库将语音模块的工作分为write/read device,encode/decode,rtp_send/rtp_recv六部分,每一个部分都可以声明成为一个ms_filter。每一个ms_filter可以从另一个ms_filter读入数据作为输入,并将数据输出作为另一个ms_filter的输入。发送或接受语音流时将需要使用的ms_filter按顺序使用ms_filter_link连接起来,即可完成语音从采集到编码再到发送或从接受到解码到播放的任务。第四章voip系统实现方案4.1交叉开发环境的建立4.1.1连接硬件我们采用一台安装

45、red hat enterprise linux 5的laptop作为宿主机,用一根串行线连接宿主机的com口和mini2440上的com口用于在宿主机和开发板(目标机)之间传递调试数据。用一根网线连接宿主机的网口与mini2440上的网口,用与传输ip数据包。用一根usb连接线连接宿主机usb口与mini2440上的usb口,用于为开发板烧写文件系统与linux内核。4.1.2安装交叉编译器mini2440的光盘中自带了交叉编译器,安装的过程就是将相应文件拷入相应目录的过程。先将光盘目录linux 中的arm-linux-gcc-3.3.2.tgz 拷贝到某个目录下如tmp,然后进入到该目录

46、,执行解压命令:#cd tmp#tar -xvzf arm-linux-gcc-3.3.2.tgz c 执行该命令, 将把arm-linux-gcc分别安装/usr/local/arm/3.3.2,然后运行命令#gedit /root/bashrc编辑/root/.bashrc 文件,在最后一行 export path=$path:/usr/local/arm/3.4.1/bin也可以访问/etc/profile文件,具体执行为vim /etc/profile,在export path上一行添加path=$path:/usr/local/arm/3.4.1/bin。之后再重新启动linux宿主

47、机,这样交叉编译器即安装完毕。在命令行输入 arm-linux-gcc v,就可以查看到交叉编译器是否成功安装,可以查看到交叉编译器的版本号,就表示正确安装了。4.1.3配置与烧写vboot将mini2440的光盘中linux 内核的源代码包vboot-src-20090721.tgz复制到某一个目录,进入该目录,运行以下命令:#tar -xvzf vboot-src-20090721.tgz c opt/friendlyarm/mini2440这样将把内核源代码解压到/opt/friendlyarm/mini2440/kernel-2.6.13 的目录进入内核源代码目录,进入vboot目录进

48、行make命令编译。就会生成一个vbot.bin文件,利用超级终端和dnw工具把vboot烧写到arm开发板中。4.1.4配置与烧写内核将mini2440的光盘中linux 内核的源代码包linux-2.6.13-qq2440v3.tgz复制到某一个目录,进入该目录,运行以下命令:#tar -xvzf linux-2.6.13-qq2440_20070517.tgz c opt/friendlyarm/qq2440这样将把内核源代码解压到/opt/friendlyarm/qq2440/kernel-2.6.13 的目录进入内核源代码目录,然后执行“make menuconfig”,出现配置内核

49、界面,载入config_mini2440_n35预设配置方案,执行命令首先执行下面的命令cp config_mini2440_n35 .config。在此预设方案中设置好了大部分的基本设置,因为本系统使用了usb声卡作为声音的输入,输出媒介,因此需要在内核中加入对usb声卡的驱动支持。在内核配置界面中,device drivers-usb support-usb audio support配置为内核内建模块,内核usb声卡配置如图4.1所示。图4.1内核usb声卡配置退出内核配置界面。输入以下命令,开始编译内核:#make zimage将最终生成的zimage内核文件烧入开发板。4.1.5制作

50、根文件系统进入busybox,对makefile进行相应的修改将189行的arch?=$(subarch)修改为arch?=arm,164行的cross_compile?=修改为cross_compile?=arm-linux-修改后执行make命令编译busybox。配置busybox和配置linux内核一样,执行make menuconfig,会出现下图的配置界面:图4.2busybox的配置然后安装busybox,将busybox安装/home/wjxt 目录下,在安装之前需要在pc机上执行“mkdir/home/wjxt”命令建立wjxt目录,然后执行“make config_pref

51、ix =/home/wjxt install”命令完成安装。开发板的根文件系统在主机上的目录为/home/work/rootby。在此目录下使用mkdir命令建立dev,etc,home,lib,mnt,proc,root,sys,tmp目录。进入/home/work/rootby工作目录,执行以下命令: #cd /home/work/rootby #mkyaffs2image root_qtopia root_qtopia.img 如果你使用的是 128m nand flash 的 mini2440/micro2440,请使用mkyaffs2image-128m制作工具,本次毕业设计所采用的

52、是mini2440开发板,因此使用mkyaffs2image-128m制作工具。这样问价系统就制作好了。烧写到开发板中,这样开发板就可以启动运行了。本系统的开发环境就搭建完成了。4.2 linphone在 linux x86下的编译4.2.1 linphone 依赖库准备libogg-1.1.3.tar.gz(/gnu) speex-1.2beta3.tar.gz(依赖于 libogg) libosip2-3.3.0.tar.gz(/gnu/osip/libosip2-3.3.0.tar.gz) libexosip2-3.3.

53、0.tar.gz(/unix/nongnu/exosip/libexosip2-3.3.0.tar.gz) readline(optional) intltool-0.35.0.tar.gz(optional) ffmpeg(提供 linphone视频支持,如不需视频功能可不要) linphone 版本: linphone-3.2.0.tar.gz o s: red hat enterprise linux 5(vmware 下)4.2.2解压源代码在 linux 的/home/cena/目录下新建目录 linphone 在其中建立 sources、bu

54、ild、x86_target、arm_target ;注:这里 cena 为用户名,以下类同!rootbcdcena# mkdir p/home/cena/linphone/sources,/home/cena/linphone/build/home/cena/linphone/x86_target,/home/cena/linphone/arm_target将相应的库与 linphone源码拷贝到 sources目录下|soureces -| libogg-1.1.3.tar.gz -| libosip2-3.3.0.tar.gz -| libexosip2-3.3.0.tar.gz -|

55、speex-1.2beta3.tar.gz -| linphone-3.2.0.tar.gz将所有压缩文件解压准备编译;root bcd cena# cd linphone/sources root bcd sources# tar zxvf libogg-1.1.3.tar.gz root bcd sources# tar zxvf libosip2-3.3.0.tar.gz root bcd sources# tar zxvf libexosip2-3.3.0.tar.gz root bcd sources# tar zxvf speex-1.2beta3.tar.gz root bcd sources# tar zxvf linphone-3.2.0.tar.gz 4.2.3配置编译各个依赖库和linphone开源代码(1)进入 libogg目录,配置编译 liboggroot bcd sources# cd ./

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论