基于ARM的网络可视电话设计
钟浩
【摘要】现有的网络可视电话产品大多依赖于PC(Personal Computer,个人计算机)。现有的基于PC的网络视频图像采集与显示系统存在成本高、体积大、资源得不到充分利用的缺点。而嵌入式系统所具有的功耗低、体积小、成本低等优点恰好可以弥补上述的不足,随着嵌入式技术的发展,该系统与嵌入式技术的结合成为其未来发展的趋势之一,具有广阔的应用前景和实用价值。本文设计了一种基于ARM9(Advanced RISC Machines)平台和Linux操作系统的嵌入式可视电话终端系统设计方案。
关键词:ARM;Linux;可视电话;嵌入式
[ABSTRACT]Most of the existing VOIP products are dependent on the PC(Personal Computer).The existing system of network video image capture and display based on PC has some disadvantages as follows,high cost,bulky and resource not fully utilized.Meanwhile,the embedded system with low power consumption,small size and low cost can make up for the lack of personal computer.The combination of this system with embedded technology has wide application prospect and practical value with the development of the embedded technology.It becomes one of ifs development trends. This paper mainly completed the following works: A solution to embedded video phone terminal based on ARM9 platform and Linux OS is proposed.
Key Words:ARM;Linux;videophone;Embedded System
1 引言
交流一直以来都是人类互动的最重要组成部分。随着互联网技术和微电子技术的迅速崛起,人类之间交流有了新的方式。人们使用电脑并借助网络就可以“面对面”交流。但是基于PC的网络视频图像采集与显示系统存在成本高、体积大、资源得不到充分利用的缺点。随着嵌人式技术的迅猛发展和Linux在信息行业中的广泛应用,视频采集与传输系统作为远程视频监控、可视电话会议和工业自动控制领域的一项核心技术, 近年来已经得到了飞速的发展。本文在基于ARM9微处理器的Linux系统平台上实现了一个网络可视电话的设计。
2 系统设计
本设计的网络可视电话系统初步要求能实现两个系统终端设备之间通过网络可以进行视频通话。并且在后期可以拓展多媒体播放设备、视频回放、网络监控摄像头等许多功能。
因此对系统进行分析有以下几点基本要求:
(1)支持TCP/IP等网络协议,实现网络通信;
(2)具有摄像头、麦克风可以采集图像和音频;
(3)具有显示屏、可以播放视频图像;
(4)具有喇叭或者其他音频输出设备进行音频的播放;
(5)具有图形操作界面,可以对系统进行调整、配置;
(6)系统可以同时处理视频图像捕捉编解码、音频录制编解码的任务。
2.1嵌入式系统简介
广义的说,一个嵌入式系统就是一个具有特定功能或用途的计算机软硬件集合体。而从狭义上讲,嵌入式系统仅仅指装入另一个设备并且控制该设备的专用计算机系统。嵌入式系统最大的优点就是可以根据需求进行裁剪、这种定制式的设计使得硬件资源可以得到最大的利用。嵌入式系统主要用于各种信号处理与控制,目前已经在军用、家用、工业、商用和医疗等领域得到广泛应用。在人们的日常生活中,存在着各式各样的嵌入式设备。
2.2系统硬件设计
图1 Mini2440硬件结构图
本文选用基于三星S3C2440微处理器的Mini2440开发板作为硬件平台。三星S3C2440是基于ARM920T核心设计生产。ARM920T 实现了MMU,AMBA(Advanced Microcontroller Bus Architecture)总线和哈佛结构高速缓冲体系结构。这一结构具有独立的16KB 指令高速缓存和16KB 数据高速缓存。每个都是由具有8 字长的行(line)组成。提供LCD 控制器(最大支持4K 色STN 和256K 色TFT)提供1 通道LCD 专用DMA。并提供4个外部请求的DMA通道。为手持设备和普通应用提供了低功耗和高性能的小型芯片微控制器的解决方案。在外围电路方面:Mini2440采用10M/100M自适应以太网网卡DM9000,板载的飞利浦UDA1341TS音频编解码芯片可作为系统的语音编解码芯片。Mini2440开发板拥有麦克风和音频输出接口,可以用于系统的音频的捕获和回放。[1]
系统捕获图像的摄像头采用CMOS摄像头。CMOS摄像头成本比CCD摄像头低,成像效果出色,可以满足系统的要求。本系统选用的CMOS摄像头可以支持的最高分辨率为640*480。显示屏采用SONY的3.5英寸TFT的 LCD( Liquid Crystal Display),型号为ACX502BMU。该显示屏分辨率为240*320,采用RGB565色彩模式,并带有电阻触摸屏。系统通过触摸屏进行操控。图1展示了Mini2440开发板的硬件结构。
2.3系统软件设计
网络可视电话系统的实现除了需要硬件设备外,还需要设备驱动、视频编解码协议、音频编解码协议和网络协议等多方面的支持。在软件设计方面主要包括操作系统和应用程序。操作系统主要提供系统资源管理、设备驱动和网络协议等的支持。应用程序则通过系统调用来具体实现网络可视电话的功能。图2展示了系统功能结构
图2 网络可视电话系统框图
3开发环境搭建和操作系统移植
3.1开发环境的搭建
进行软件开发需要先搭建相关开发环境。由于Mini2440开发板的资源有限(比如内存较小、CPU计算能力有限等情况),需要在拥有更多资源的主机平台上(一般是指个人计算机)编译出可以在目标平台上运行的程序代码,这个过程就是交叉编译。我们在PC机上安装Windows XP操作系统,利用VMware建立一个虚拟机安装桌面版的Linux操作系统,并在桌面版Linux中安装相应的交叉编译工具链。利用串口和网线连接开发板与PC机进行通信。通过以上几步本设计的开发环境搭建完成。
3.2Linux操作系统
我们选择Linux操作系统作为本设计的操作系统。Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX的类UNIX的多用户、多任务、支持多线程和多CPU的开源操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。并且Linux操作系统可以按照需求进行裁剪,系统内核体积小,性能强悍,非常适合作为嵌入式产品的操作系统。
3.3系统移植
移植一个Linux操作系统主要工作有制作系统引导程序、制作系统内核、制作文件系统。选用U-Boot作为系统的引导程序。U-Boot支持多种平台,并且有丰富的设备驱动源码支持,对网络有良好的支持,有较高的可靠性和稳定性。系统内核选择Linux-2.6.32.2版本,并进行适当裁剪。Linux-2.6.32.2版本官方支持Mini2440开发板,可以减少设备驱动编写等方面的精力。文件系统制作方面,利用busybox制作并安装Linux的系统命令,拷贝系统运行所需库文件到指定位置,最终将文件系统制作成可读可写的yaffs2格式。
4系统功能的实现
Linux系统有一个“一切皆是文件”的设计思想。在Linux系统中目录、普通文件、设备、网络套接字等都作为一种文件。并且Linux对所有文件,不论是普通文件还是设备文件都有着类似的打开、关闭、读写、控制等方法来进行操作。这样Linux操作系统就屏蔽了硬件的区别,所有设备都抽象成文件,提供统一的接口给用户。这样我们很方便的就可以控制系统的摄像头、显示屏和麦克风等设备。
4.1摄像头V4L2驱动框架和图像的采集
V4L2(Video4Linux2的简称)是Linux系统下的一个视频驱动程序框架。有发现设备和操作设备的能力。它主要是用一系列的回调函数来实现这些功能。像设置摄像头的频率、帧频、视频压缩格式和图像参数等。以统一并替换与各种视频和音频等设备相关的接口。V4L2为外围的视频设备提供了视频应用接口函数,使得应用程序可以使用统一的API操作视频设备,结合视频采集设备(如:USB摄像头、视频捕捉卡等)和相应的驱动程序实现图像采集,在可视电话、视频监控等系统中有着广泛的应用。V4L2编程主要包括以下几个步骤:
(1)打开视频采集设备;
(2)设置视频采集设备属性;
(3)设置采集图像数据格式和采集方式;
(4)实现循环采集;
(5)处理采集到的数据;
(6)关闭视频设备;[2]
图像采集的具体流程如下:
(1)利用open()函数打开摄像头文件;
(2)对摄像头参数进行设置一般是先通过read()函数读取设备信息,再用ioctl()函数对摄像头进行配置;
(3)通过read()函数读取摄像头拍摄的图片数据;
(4)调用图片编码库对图像进行编码压缩。
4.2音频的录制和播放
本系统使用OSS标准音频驱动框架,在OSS标准中有两个最基本的音频设备:mixer(混音器)和DSP(数字信号处理器)。文件分别为/dev/mixer和/dev/dsp。
混音器的作用是将多个音频文件、线路输入音频信号混音后,合成单独的音频文件。混音器分为输入混音器和输出混音器,可以用来调节麦克风灵敏度和输出音量大小。一般使用ioctl()函数控制。本系统通过对/dev/mixer节点操作来控制录音和回放时声音的大小。
DSP称为编解码器,实现录音和放音。调用write()函数向该设备写数据即意味着激活声卡上的DAC进行放音,而调用read()函数向该设备读数据则意味着激活声卡上的ADC进行录音。[3]
4.3数据网络传输
数据在网络传输需要遵守相关的网络协议。目前主要的传输协议是TCP/UDP协议族。TCP协议虽然可以提供安全可靠的网络传输但是开销较大,不适合实时视频通信。UDP协议报文开销小,比较适合大量实时数据的传输。虽然UDP协议不能保证所以数据帧都能正确发送到达,但是网络视频通信方面丢失一些数据也是可以接受的。
现在的网络编程基本使用socket套接字来实现。利用套接字传输数据的步骤主要有:创建套接字,绑定地址和端口,发送或接收数据,关闭套接字。本文篇幅有限,具体传输过程就不详述。
4.4可视电话的多线程实现
可视电话要同时实现视频、音频通信等功能,需要利用多线程来实现。本系统的主要有以下五个线程:
(1)视频数据的采集、压缩编码和发送;
(2)视频数据的接收和显示;
(3)音频数据的采集、编码和发送;
(4)音频数据的接收后回放;
(5)用户控制界面;
5小结
本文基于Mini2440的硬件平台和Linux 的软件平台, 实现了视频、音频信号的采集和网络传输。终端设备体积小,功耗低,安装方便。在网络状况较为理想的情况下, 可以实现图像分辨率为240*320 ,帧数为15fps的视频通信。整个系统具有稳定可靠,安装简便,成本低廉等特点。除了应用在网络可视电话方面,还可扩展应用在工业控制、视频会议系统、和远程监控系统等诸多领域。
参考文献
[1] samsung electronics.S3C2440A datasheet.Revision 0.13.2004
[2] Bill Dirks,Michael H Schimek,Hans Verkuil,Video for Linux Two API Specificat ion.http://V412spec.bytesex.Org/V412spec/V412.pdf,2008-03-04
[3] 宋宝华.Linux设备驱动开发详解.北京:人民邮电出版社 ,2010