基于此硬件及接口规范,实现了集成音频输出、Linein输入和Mic输入功能。视频采集使用的是OV9650CMOS摄像头模块,分辨率高达130万像素,可直接与OK6410开发板的Camera接口相接。适用于高端消费类电子产品、工业控制、车载导航、多媒体终端、行业PDA、嵌入式教育培训、个人学习等。其结构较简单,提供硬件驱动程序,便于使用和调试。
2.2 无线传输模块
本系统的无线传输模块采用工作在2.4 GHz公共频段的WiFi模块来实现,它遵循IEEE 802.11b/g网络标准,可用于在后期开发中将终端接入Internet,其最高数据率为54 Mb/s,支持WinCE、Linux系统。室内通信距离可达100 m,室外开阔地可达300 m。只需要对ARM?Linux操作系统进行简单的配置就可以由以太网连接模式转化为双机通信AD?HOC模式,在系统启动之后,设计了基于Qt[2]的窗口设计,方便切换连接模式。
选用WiFi具有很好的可扩展性,可以通过无线路由器的WiFi连接到广域网,具有很好的应用前景。同时大多数手机等终端设备具有WiFi功能,后期还可以将软件升级至Andriod系统,方便开发和移植。它减少了音视频实时传输的开发成本和周期,也给现代移动通信提供了一种新的音视频通信方式。
WiFi的驱动配置好后,应用层和以太网接口模式编程完全相同。由于此设计音视频数据量较大,不宜采用UDP,因为当数据量过大或传输信号不好时,UDP会严重丢包,所以最终选择面向连接的TCP传输协议,保证了系统音视频有效传输。由于TCP是应答时式传输数据,在局域网内,无需考虑TCP丢包问题,为实现系统功能提供了可靠的保障。
3 软件设计
软件分为用户界面设计和数据处理、传输等模块的设计。
3.1 基于多线程的软件总体设计
系统软件架构如图1所示,它是音视频单向采集、压缩、传输、接收、解压缩、处理回放音视频流控制过程,各个模块采用线程处理,由信号量处理线程间优先级构成循环的线程,有效地处理了音视频数据流。系统各功能模块化,便于修改和移植,代码简短精悍。
图1 软件架构
3.2 回音消除
系统开始时出现回音和延时问题,延时是由于采集传输过程中造成的,所以只能尽量缩短延时,而无法做到即时播放,这也是此系统的缺陷之一。回音是由于延时造成的,文中最后采用开源的Speex算法消除了回音。具体做法:将该算法编译成库文件,加入到Linux内核,即可以使用Speex 的API函数,实现音频的回音消除。
3.3 嵌入式音视频的同步
本文的基本思想是以视频流为主媒体流,音频流为从媒体流,视频的播放速率保持不变,根据本地系统时钟确定实际时间,通过调整音频播放速度来达到音视频同步。
首先选择一个本地系统时钟参考(LSCR),然后将LSCR发送到视频解码器和音频解码器,由这两个解码器根据各帧的PTS值对照本地系统时钟,参考产生各帧准确的显示或回放的时间。也就是说,生成输出数据流时依据本地参考时钟上的时间给每个数据块都打上时间戳(一般包括开始时间和结束时间)。在播放时,读取数据块上的时间戳,同时根据本地系统时钟参考上的时间来安排播放。
整个系统的音视频同步数据流程如图2所示。
图2 音视频同步数据流程
4 音视频通道管理
为了节约内存资源,便于通道的管理,本设计采用分通道的线程池管理,音、视频分别由自己的通道完成任务。
音视频采集使用同一个线程处理,采用select系统调用,每执行到此线程,就判断音视频设备是否就绪,若就绪即采集音频或视频到音视频缓冲区,再交给音视频采集压缩线程,最后再交给发送线程打包后采用TCP发送。需要说明的是本设计线程之间均采用信号量完成线程间基于TCP的音视频软件架构的同步管理。发送完以后进入接收线程等待对方发音视频数据。在接受端由接收线程接收到数据以后,判断数据的包头,再交由解压缩处理线程处理,然后播放音视频,再等待对方发数据到本机。
由于处理器的高速处理和高效率视频硬件H.264解压缩,使得整个系统实时性基本达到要求。嵌入式音视频管理模块实现了整个系统的统筹控制和实时处理,为音视频数据管理提供可靠的保证。
5 结 语
目前基于嵌入式无线终端的视频监控产品由于无需布线、传输距离远、环境适应能力强,性能稳定及通信便利等优势而倍受青睐,在安全监察、巡查通信、施工联络、人员调配等场合发挥着不可替代的作用。本系统是基于嵌入式Linux的无线音视频通信手持式终端,其体积较小、携带方便,采用锂电池经过开关电源芯片降压的方式给整个系统供电,其效率较传统直流稳压大大提高。在户外可视化娱乐、施工现场监控、大型安保联络等场合均可使用,具有广泛的应用前景。
注:本文指导老师为吴延海。
参考文献
[1] 毕厚杰.新一代视频压缩编码标准H.264/AVC[M].北京:人民邮电出版社,2009.
[2] 陈爽.Linux与Qt程序设计[M].北京:清华大学出版社,2011.
[3] 冯国进.Linux驱动程序开发实例[M].北京:机械工业出版社,2011.
[4] 孙琼.嵌入式Linux应用程序开发详解[M].北京:人民邮电出版社,2006.
[5] 冯进国.嵌入式Linux驱动程序设计从入门到精通[M].北京:清华大学出版社,2008.
[6] LOVE Robert.Linux内核设计与实现[M].北京:机械工业出版社,2011.
[7] 孙更新.Linux内核注释[M].北京:中国铁道出版社,2011.
[8] 刘学勇.Linux C编程从入门到精通[M].北京:电子工业出版社,2012.
[9] 宁方明.Linux系统管理[M].北京:人民邮电出版社,2012.
[10] 熊茂华.嵌入式Linux实时操作系统及应用编程[M].北京:清华大学出版社,2011.