基于S3C2410的无线视频电话终端设计
时间:05-05
来源:互联网
点击:
引言
视频电话终端依据其使用方式的不同,大体可分为“PC到PC”型和“电话到电话”,“PC到电话”型三大类。“电话到电话”型产品两端都不需要计算机,电话终端本身包含音视频处理器或者音视频处理软件完成音视频即时通讯功能。由于此类产品使用简单、安装方便、便于控制、性价比合理等优点..市场前景广阔,是目前国内外研究的热点。
SIP(Session Initiation Protocol)协议是IETF于1999年提出的一种新的网络多媒体通信的交互信令,它相对于市场主体的H.323协议具有简单、扩展性好、便于实现等优点,凭借其简单、易于扩展、便于实现等诸多优点越来越得到业界的青睐,它正逐步成为NGN和3G多媒体子系统域中的重要协议。市场上出现越来越多支持SIP的智能多媒体终端及相关软件和软交换设备,SIP将成为IP视频电话业务的主流协议之一。
本文提出了一个基于SIP的嵌入式无线视频电话终端,它除了采用数字化和网络化的手段以外,还使用了嵌入式Wince设备代替原有系统的软电话软件,提高了电话设备的移动性和灵活性。更为重要的是它采用了开放的SIP同其他电话设备进行通信,从而将网络中任何一台主机变成终端,一方面扩展了通信范围,另一方面还可以同执行SIP的其他设备进行通信。同时,基于IP网络技术的多媒体通信以其部署简单,业务丰富,成本低廉等特点逐步得到企业的青睐。
1 总体方案设计
1.1 硬件系统结构
本文确定的电话终端系统的硬件方案为:使用三星公司的通用ARM芯片S3C2410配合嵌入式操作系统WINCE5.0.NET实现各种外围接口,视音频编解码处理,和传输控制协议等。这样既不存在芯片成本高的问题,又能保持很高的性能,可通过简单的程序下载实现软件下载升级或者增加新的编解码标准。系统的硬件结构框图如图1所示。实现该系统的要点是:在WINCE下添加USB摄象头和USB无线网卡驱动模块。
图1 系统硬件结构图
1.2应用软件结构
在系统硬件完成后,剩下的需要大量的工作来定制平台和编写代码实现各个功能模块,最终实现整个系统。系统的软件结构如图2所示。音频编码采用G.711/729/723.1,是为了让终端能适应音频编解码的非对称操作。本文根据视频电话终端的特点和当前实现的技术难点主要讨论视频采集传输和SIP协议栈2大核心技术的软件实现。
图2 软件系统结构图
2 无线视频电话终端的设计与实现
2.1 系统平台的设计
在WinCE产品开发中,主要有内核定制和应用程序开发两项非常蓖要的工作。
2.2 音频编码模块的实现
在系统初始化以后,音频采集编码模块对应的子线程就被创建并挂起。当用户需要采集音频数据时才分别被唤醒。音频采集编码模块主要完成语音的录制和编码处理过程。首先打开波形音频输入设备,准备好缓冲区;然后利用声卡把语音录入到准备好的缓冲区里区,一个缓冲区录满后,就可以对缓冲区里的数据进行编码。其中音频采集通过调用Windows低级音频API函数族WaveIn和WaveOut来实现.编码通过调用G.7XX音频接口提供的编解码器接口实现。
2.3 视频采集编码模块的实现
2.3.1 视频采集编码模块
笔者采用了中星微301PLUS快速主控芯片。该芯片是一款高性能图像压缩芯片。输出MJPEG视频流数据。它的误差稳定性非常好,可以获取清晰度很高的视频图像,而且还可以灵活设置各路视频清晰度,压缩帧数。本系统直接从摄像头驱动中获取MJPEG视频流数据,图像采集流程如图3所示。图像采集模块用到的主要函数有:
capInitCamera() 用来初始化视频设备,并获取当前可用的视频设备数目。
capSetVideoFormat() 设置视频格式和分辨率。本系统使用的视频格式为RGB24,分辨率为320x240像素。
capGrabFrame() 从驱动中抓取1帧图像,并存储在缓存FrameBuffer中。
capGetLastjpeg() 将抓取的MJPEG格式的图像转换成JPEG格式.送到无线发送模块。
图3 视频编码模块流程
视频采集部分还有查询视频采集格式、设置叫暗度、设置对比度等相关函数,不再详述。在完成视频采集后,再对视频流进行H.263+的视频JK缔。视频编码通过调用H.263+视频接口提供的编解码器接口实现。音频解码回放模块和视频解码回放模块将接收到的音频和视频数据解码后播放。视频播放则将视频数据格式转化为RGB.再用函数DrawDibDraw函数将其显示。
2.4 语音视频流实时传输部分的实现
2.4.1 配置无线网卡
本次开发通过开发板和主机之间的无线网卡构建无线局域网络,能够实现点对点的无缝连接,笔者通过此无线网络可以实现文件传输、视频通信等应用。开发板端的无线网卡也需要加载驱动才能运行。
2.4.2 音视频数据传输的实现
利用RTP/RTCP实现语音视频流的的实时传输.RTP负责数据发送和接收,RTCP负责网络丢包、误码情况的反馈等。JRTPLIB是一个用C++语言实现的,面向对象的开源的RTP库,它通过调用JRTPLIB提供的库函数就可以开发出高质量的音,视频传输程序。
发送端调用JRTPLIB提供的库函数实现语音视频等的实时发送的过程是:
1) 通过调用RTPSession类的构造函数创建一个RTP会话实例.然后调用RTPSession类的方法来对其进行初始化操作,来设置负载类型、标识和时戳增量。以及指定流媒体的目标地址。
2) 设置RTP会话参数,通过凋用RTPSeftsionParams类的SetOwnTimeStampUnit()方法来设置时间戳和设置RTP传输参数。
3) 调用SendPacket()方法用来向目标地址发送采集编码后的音视频数据。接收端的创建RTP会话实例和RTP会话参数设置和发送端的设置是一样的。
2.5 SIP用户代理的实现
SIP UA模块用于会话的建立、修改、终止,起着信令控制作用。此模块使用的SIP协议栈是OSIP2和EXOSIP。
EXOSIP有2种工作模式:事件模式和同调模式。本软件采用的是事件模式,使用一个定时器,定时到了后就通过函数exosip_wait_event()去获取SIP事件,SIP事件主要有EXOSIP_CALL_NEW、EXOSIP_CALL_ANSWERED等。获取到事件后.就调用相应的事件处理函数,如SipCallNew、SipCallRinging、SipCallAnswered等等。要建立、修改、终止呼叫还需要调用EXOSIP的以下几个函数:osip_build_initial_invite、eXosip_initiate_call等。
呼叫的有关控制变量都存在CCall类中,如呼叫ID、对话ID、对端IP、对端RTP端口、语音通信的线程号、是否允许有RTP流等。SIP系统中的呼叫类型主要有两个用户代理之问的普通呼叫、重定向呼叫和通过代理服务器的呼叫。
视频电话终端依据其使用方式的不同,大体可分为“PC到PC”型和“电话到电话”,“PC到电话”型三大类。“电话到电话”型产品两端都不需要计算机,电话终端本身包含音视频处理器或者音视频处理软件完成音视频即时通讯功能。由于此类产品使用简单、安装方便、便于控制、性价比合理等优点..市场前景广阔,是目前国内外研究的热点。
SIP(Session Initiation Protocol)协议是IETF于1999年提出的一种新的网络多媒体通信的交互信令,它相对于市场主体的H.323协议具有简单、扩展性好、便于实现等优点,凭借其简单、易于扩展、便于实现等诸多优点越来越得到业界的青睐,它正逐步成为NGN和3G多媒体子系统域中的重要协议。市场上出现越来越多支持SIP的智能多媒体终端及相关软件和软交换设备,SIP将成为IP视频电话业务的主流协议之一。
本文提出了一个基于SIP的嵌入式无线视频电话终端,它除了采用数字化和网络化的手段以外,还使用了嵌入式Wince设备代替原有系统的软电话软件,提高了电话设备的移动性和灵活性。更为重要的是它采用了开放的SIP同其他电话设备进行通信,从而将网络中任何一台主机变成终端,一方面扩展了通信范围,另一方面还可以同执行SIP的其他设备进行通信。同时,基于IP网络技术的多媒体通信以其部署简单,业务丰富,成本低廉等特点逐步得到企业的青睐。
1 总体方案设计
1.1 硬件系统结构
本文确定的电话终端系统的硬件方案为:使用三星公司的通用ARM芯片S3C2410配合嵌入式操作系统WINCE5.0.NET实现各种外围接口,视音频编解码处理,和传输控制协议等。这样既不存在芯片成本高的问题,又能保持很高的性能,可通过简单的程序下载实现软件下载升级或者增加新的编解码标准。系统的硬件结构框图如图1所示。实现该系统的要点是:在WINCE下添加USB摄象头和USB无线网卡驱动模块。
图1 系统硬件结构图
1.2应用软件结构
在系统硬件完成后,剩下的需要大量的工作来定制平台和编写代码实现各个功能模块,最终实现整个系统。系统的软件结构如图2所示。音频编码采用G.711/729/723.1,是为了让终端能适应音频编解码的非对称操作。本文根据视频电话终端的特点和当前实现的技术难点主要讨论视频采集传输和SIP协议栈2大核心技术的软件实现。
图2 软件系统结构图
2 无线视频电话终端的设计与实现
2.1 系统平台的设计
在WinCE产品开发中,主要有内核定制和应用程序开发两项非常蓖要的工作。
2.2 音频编码模块的实现
在系统初始化以后,音频采集编码模块对应的子线程就被创建并挂起。当用户需要采集音频数据时才分别被唤醒。音频采集编码模块主要完成语音的录制和编码处理过程。首先打开波形音频输入设备,准备好缓冲区;然后利用声卡把语音录入到准备好的缓冲区里区,一个缓冲区录满后,就可以对缓冲区里的数据进行编码。其中音频采集通过调用Windows低级音频API函数族WaveIn和WaveOut来实现.编码通过调用G.7XX音频接口提供的编解码器接口实现。
2.3 视频采集编码模块的实现
2.3.1 视频采集编码模块
笔者采用了中星微301PLUS快速主控芯片。该芯片是一款高性能图像压缩芯片。输出MJPEG视频流数据。它的误差稳定性非常好,可以获取清晰度很高的视频图像,而且还可以灵活设置各路视频清晰度,压缩帧数。本系统直接从摄像头驱动中获取MJPEG视频流数据,图像采集流程如图3所示。图像采集模块用到的主要函数有:
capInitCamera() 用来初始化视频设备,并获取当前可用的视频设备数目。
capSetVideoFormat() 设置视频格式和分辨率。本系统使用的视频格式为RGB24,分辨率为320x240像素。
capGrabFrame() 从驱动中抓取1帧图像,并存储在缓存FrameBuffer中。
capGetLastjpeg() 将抓取的MJPEG格式的图像转换成JPEG格式.送到无线发送模块。
图3 视频编码模块流程
视频采集部分还有查询视频采集格式、设置叫暗度、设置对比度等相关函数,不再详述。在完成视频采集后,再对视频流进行H.263+的视频JK缔。视频编码通过调用H.263+视频接口提供的编解码器接口实现。音频解码回放模块和视频解码回放模块将接收到的音频和视频数据解码后播放。视频播放则将视频数据格式转化为RGB.再用函数DrawDibDraw函数将其显示。
2.4 语音视频流实时传输部分的实现
2.4.1 配置无线网卡
本次开发通过开发板和主机之间的无线网卡构建无线局域网络,能够实现点对点的无缝连接,笔者通过此无线网络可以实现文件传输、视频通信等应用。开发板端的无线网卡也需要加载驱动才能运行。
2.4.2 音视频数据传输的实现
利用RTP/RTCP实现语音视频流的的实时传输.RTP负责数据发送和接收,RTCP负责网络丢包、误码情况的反馈等。JRTPLIB是一个用C++语言实现的,面向对象的开源的RTP库,它通过调用JRTPLIB提供的库函数就可以开发出高质量的音,视频传输程序。
发送端调用JRTPLIB提供的库函数实现语音视频等的实时发送的过程是:
1) 通过调用RTPSession类的构造函数创建一个RTP会话实例.然后调用RTPSession类的方法来对其进行初始化操作,来设置负载类型、标识和时戳增量。以及指定流媒体的目标地址。
2) 设置RTP会话参数,通过凋用RTPSeftsionParams类的SetOwnTimeStampUnit()方法来设置时间戳和设置RTP传输参数。
3) 调用SendPacket()方法用来向目标地址发送采集编码后的音视频数据。接收端的创建RTP会话实例和RTP会话参数设置和发送端的设置是一样的。
2.5 SIP用户代理的实现
SIP UA模块用于会话的建立、修改、终止,起着信令控制作用。此模块使用的SIP协议栈是OSIP2和EXOSIP。
EXOSIP有2种工作模式:事件模式和同调模式。本软件采用的是事件模式,使用一个定时器,定时到了后就通过函数exosip_wait_event()去获取SIP事件,SIP事件主要有EXOSIP_CALL_NEW、EXOSIP_CALL_ANSWERED等。获取到事件后.就调用相应的事件处理函数,如SipCallNew、SipCallRinging、SipCallAnswered等等。要建立、修改、终止呼叫还需要调用EXOSIP的以下几个函数:osip_build_initial_invite、eXosip_initiate_call等。
呼叫的有关控制变量都存在CCall类中,如呼叫ID、对话ID、对端IP、对端RTP端口、语音通信的线程号、是否允许有RTP流等。SIP系统中的呼叫类型主要有两个用户代理之问的普通呼叫、重定向呼叫和通过代理服务器的呼叫。
嵌入式 ARM S3C2410 USB 解码器 WIFI 相关文章:
- 蓝牙无线电调制解调器Siw1701原理与应用(02-19)
- 嵌入式移动数据库的关键技术(03-20)
- 在嵌入式SQL中怎样使用游标(08-12)
- 嵌入式Linux系统软件开发学习思路详细介绍 (08-20)
- 基于AVR单片机的嵌入式“瘦服务器”系统设计思想(03-11)
- 嵌入式系统设计中的存储碎片收集策略(05-04)