2024年5月10日发(作者:)

龙源期刊网

基于嵌入式Linux的车载多媒体广告机设计

作者:郑继亭 王润民 张楠

来源:《物联网技术》2014年第03期

摘 要:针对传统车载多媒体广告机的局限性,提出了一种基于嵌入式Liunx与

Qt/Embedded的车载多媒体广告机的设计方案。该方案采用以ARM处理器S3C6410为核心的

硬件平台和以嵌入式Linux系统为核心的软件平台,并在此基础上采用开放源代码的图形界面

库Qt开发广告机界面,同时利用开源播放软件MPlayer作为播放器。经实验验证,该多媒体

广告机具有成本较低、界面友好、反应灵敏等特点,并在跨平台性、可扩展性等方面比传统方

案有显著改善。

关键词:多媒体广告机;嵌入式Linux;Qt/Embedded;MPlayer

中图法分类号:TP311.52 文献标识码:A 文章编号:2095-1302(2014)03-0063-03

0 引 言

随着科学技术的发展,越来越多的多媒体广告机出现在出租车中。现有的出租车广告机大

多采用移动数字电视和数字存储播放两种方式。移动数字电视只能应用在存在数字电视信号的

地区,在无信号或信号较弱的地区则无法播放,对于广告的播出时段、播出内容需要和广电系

统合作协商,导致效率低、成本高,而且播出的节目不能点播;数字存储播放的方式需要将节

目内容先期进行制作,然后将节目内容刻录成光盘或者存储于播放设备的存储器中,这种方式

目前存在的缺点是节目更新较为困难、时效性较差,而且存在软硬件成本较高的问题[1]。

针对现有的车载广告机存在的不足,本文提出了一种新型的车载多媒体广告机的设计方

案。采用嵌入式Linux系统和ARM处理器S3C6410分别构建多媒体广告机的软硬件平台,在

此基础上采用开放源代码的图形界面库Qt/E设计广告机的程序界面,在Qt设计的界面上显示

多媒体播放器MPlayer播放的视频,结合FrameBuffer在视频的上方和下方分别显示Logo和字

幕,最终完成应用程序的开发。

1 系统总体设计

车载广告机的基本设计思想是在基于ARM的嵌入式平台上完成多媒体文件的存储、解析

和处理,控制LCD模块和音频模块完成多媒体广告的播放,并采用Wi-Fi无线网络完成多媒

体广告机系统中视频文件的智能下载更新。基于嵌入式软、硬件环境,车载广告机系统的整体

结构如图1所示:

图1 车载广告机系统整体结构

2 系统硬件设计

龙源期刊网

车载广告机系统的硬件结构图如图2所示。系统的核心处理器采用基于ARM1176JZF-S核

的S3C6410芯片,其主频最高可达到667 MHz,内部集成了强大的多媒体处理单元,带有3D

图形硬件加速器,并支持2D图形图像的平滑缩放等操作,有利于为用户提供高灵敏度的汽车

状态动态显示[2];外接16 GB的SD卡和2 GB NAND FLASH,为多媒体文件的本地存储提供

了充足的硬件环境;显示接口采用8寸TFT液晶显示屏,处理器内部集成的LCD控制器信号

线经过驱动电路后即可连接LCD模块,为多媒体广告的显示提供了硬件平台;外接触摸屏,

用户可根据需要自主选择喜爱的节目;外接音频编解码芯片CS42L50,为多媒体播放提供音频

支持;外接基于Marvell 8686芯片的SD Wi-Fi模块,使广告机终端能够接入无线网络,连接

到远端服务器,完成系统所需多媒体文件的智能下载更新。

图2 车载广告机系统硬件结构图

3 系统软件设计

车载广告机的软件设计主要是开发基于嵌入式Linux系统的客户端应用程序。本系统采用

嵌入式Linux作为操作系统,在Linux平台下编写广告机的驱动程序;利用Qt/Embedded作为

图形界面解决方案实现广告机的图形界面,在此界面上显示Mplayer播放器播放的视频。

该系统软件的开发主要有4个内容:开发平台的搭建、编译Qt/Embedded库、视频播放器

MPlayer的移植和广告机应用程序的实现[3]。

3.1 嵌入式Linux系统开发平台的搭建

为了开发满足要求的应用程序,本文采用的软件开发环境是Vmware WorkStation 7虚拟机

和Fedora 9 操作系统,在此环境中安装交叉编译器ARM-linux-gcc 4.3.2,用来完成包含相关驱

动程序的虚拟仪表系统内核、QT库和应用程序的编译;在Fedora 9系统中安装Qt Creator软

件,用于完成虚拟仪表系统应用程序的开发;移植嵌入式设备的系统引导程序U-boot;编写硬

件平台中音频模块、Wi-Fi模块和SD卡等设备的驱动[4],然后裁剪编译Linux 2.6.29内核并在

其中加载已编译的相关驱动[5],制作硬件平台需要的根文件系统。

3.2 编译Qt/Embedded库

Qt是一个跨平台的C++图形用户界面应用程序框架,其对象容易扩展,可移植性较好,

支持多个GUI平台的交互开发。Qt/Embedded Linux是为嵌入式Linux优化过的Qt版本,被广

泛应用于各种嵌入式产品和设备当中,其实现结构如图3所示。为了减少系统内存占用量、提

高系统性能,可以对Qt/Embedded Linux进行重新裁剪编译,去掉不需要的特性。

下载,在搭建好的开发平台内解压后执行配置、编译和安装命令,编译安装

Tslib库,添加触摸屏支持。然后通过./configure裁剪、配置Qt/Embedded库。配置完成后采用

make命令编译,用make install命令安装Qt/Embedded Linux到指定的位置。

龙源期刊网

图3 Qt/E的实现结构

3.3 移植视频播放器MPlayer

MPlayer是一款开源的多媒体播放器,遵循GPL规范。该播放器可以在多种操作系统上运

行。MPlayer自带的音频、视频解码器可以支持许多流行的音频和视频格式。相对于其他播放

器,MPlayer运行过程中资源占用非常少,对系统硬件的配置要求比较低,故本系统采用

MPlayer作为多媒体播放器。直接使用MPlayer作为播放器还可以节约开发成本,同时也增加

了系统的可靠性[6]。

下载libmad后解压,使用./configure配置libmad,然后分别使用make命令和make install

命令安装libmad。下载解压MPlayer源文件,使用./configure命令进行配置,注意一定要添加

—target=arm-linux,标明为ARM平台配置,然后使用make命令进行编译,使用make install

命令安装至当前目录。生成的可执行文件Mplayer即为MPlayer播放器,将其拷贝至开发板

/bin目录下,完成MPlayer的移植。

3.4 设计广告机应用程序

3.4.1 广告机界面的实现

广告机界面的实现较为简单,只需要在屏幕的右侧显示一排可以点击的图形按钮,左侧用

于广告视频的显示。对于图形按钮的设计,需要首先准备好每一个按钮未点击和点击后的图片

素材并将他们添加到程序的资源文件中,程序运行时会加载这些图片到内存中,

然后在窗口的paintEvent()函数中进行按钮的绘制,在用户点击图形按钮时,在

mousePressEvent()函数中处理按钮的点击事件;视频采用全屏显示,需要在main函数中,

用showFullScreen()函数显示窗口即可实现全屏;为了在视频播放的同时显示Logo和字

幕,应用程序使用了4个FrameBuffer,分别用于显示Qt程序界面、MPlayer视频图像、Logo

和字幕,实现四者的叠加显示。

3.4.2 实现视频的播放

要实现广告视频文件在Qt窗口上播放,需要使用户界面通过QProcess类启动一个新程序

来实现对MPlayer的控制,如图4所示。QProcess类使应用程序在Qt程序中调用另外一个进

程。其实现代码如下:

mplayerProcess = new QProcess(this); //创建一个QProcess对象

connect(mplayerProcess, SIGNAL(finished(int, QProcess::ExitStatus)), this,

SLOT(mplayerEnded(int, QProcess::ExitStatus))); //finished信号在MPlayer程序结

束时发射,标志着一个视频已播放完成,用此信号可通知程序自动播放下一个视频,实现视频

的循环播放

龙源期刊网

图4 在图形界面程序中使用MPlayer

3.4.3 界面与MPlayer的交互

MPlayer与Qt4程序之间使用管道方式进行通信,QProcess类隐藏了具体的通信细节,将

新建立的进程当做主程序的一个I/O设备,因此需要使用QProcess类提供的read()/write

()函数来调用这个进程的标准输入/输出[7],如下所示:

mplayerProcess->write(“quit\n”);//通知MPlayer退出

当QProcess启动MPlayer后,应用程序可以将控制命令写入MPlayer的标准输入,

MPlayer从标准输入读到数据后会执行相应的功能。其实现代码如下:

QStringList args;

args

QStringscreenRect= QString("%1,%2,%3,%4").arg(m_

()).arg(m_()).arg(m_()).arg

(m_()); //计算显示视频的区域

args

args

m_mplayerProcess->start(MPLAYER_PATH, args); //写入命令

3.4.4 视频文件的更新

应用程序通过广告机内置的无线网卡访问远程服务器即可实现广告视频文件的更新。广告

机终端在系统开机运行时通过QThread类新建一个线程,通过无线网卡定期向远程服务器查询

是否需要更新视频文件,在广告机准备好更新时,服务器通过无线网可将封装后的视频发送到

无线局域网中去。接收端系统通过驱动程序接收数据包,进行解封装得到需要更新的视频目录

和视频数据[8],终端则根据更新目录进行视频文件的删除或下载等操作。其实现代码如下:

class DownLoad :public QThread

{ Q_OBJECT

protected:

龙源期刊网

void run();//开机即开启一个QTimer定时器,定时向远程服务器查询是否需要更新视

频文件。

signals: void upDates();//在需要进行视频更新时,以信号与槽(signals/slot)的方

式,通知主程序进行视频文件的更新。

……

3.4.5 画面闪烁问题的解决

画面的动态刷新显示,会使屏幕出现闪烁。本设计采用双缓冲机制解决画面闪烁的问题,

将整个窗口部件在屏幕外的像素映射中绘制,然后把这个像素映射复制到显示窗口中[9]。其

实现代码如下:

void Mainwidow::paintEvent(QPaintEvent *event)

{……

Qsize newSize=().expandedTo(());//创建至少和所绘区域一样

大的绘图缓冲

QPainter painter (&pixmap,this);//创建操作像素映射的QPainter

ate.(-rect.x(),-rect.y());//对像素映射中绘制矩形的画笔进行坐标转

bitBlt(this,rect.x(),rect.y(),&pixmap,0,0,(),

());//利用bitBlt()把像素映射复制到显示窗口部件上}

4 运行发布程序

将裁剪、编译过的内核与制作的带QT库的文件系统烧写到开发板。在开发环境内交叉编

译编写的应用程序,得到可执行二进制文件,将此文件移植到开发板,即可实现应用程序的发

布[10]。重新开机,运行应用程序即可启动广告机,其启动后的画面如图5所示。

图5 广告机FrameBuffer 的划分及运行显示效果

5 结 语

本文提出了一种新型的车载多媒体广告机的设计方案,以ARM和嵌入式Linux为基础平

台,通过定制移植QT和MPlayer并设计应用程序实现多媒体广告机系统的设计。通过本设计

方案设计的广告机,采用开放源代码软件设计,使系统的成本降低,同时采用双缓冲技术消除

龙源期刊网

页面闪烁,使其更具有市场竞争力;采用Qt插件的方式设计系统的各个模块,增强了系统的

可扩展性和可定制性;通过Wi-Fi与服务器交互实现视频文件的更新,解决了大批量设备同时

进行大容量视频数据更新的问题,提高了更新速度。经实验测试,该系统所有功能模块都能正

常运行,达到了预期的效果,随着信息化的发展,有着广阔的前景。

参 考 文 献

[1]江雷,冯刚,香华冠,等.基于WinCE和GPRS多媒体广告系统设计[J].现代计算机,

2009(1):178-180.

[2]宋宝华.Linux设备驱动开发详解[M].北京:人民邮电出版社,2010.

[3]胡志文,张崎.基于嵌入式Linux的自助点菜终端设计[J].现代电子技术,2011,34

(4):22-24.

[4] CORBET Jonathan,RUBINI Alessandro,KROAH- HARTMAN 设备驱动程

序[M].北京:中国电力出版社,2005.

[5] BOVET P Daniel,CESATI Marco.深入理解Linux内核[M].北京:中国电力出版社,

2007.

[6]米韶华,康东,杨小峰.S3C2440嵌入式音频系统设计与实现[J].中国测试,2010,36

(2):74-77.

[7] BLANCHETTE Jasmin,SUMMERFIELD Mark.C++ GUI Programming with Qt4 [M].2nd

Edition. London:Prentice Hall,2008.

[8]马资道,张正炳.基于ARM-Linux的无线视频监控系统的设计与实现[J].长江大学学

报:自然科学版,2010,7(3):649-651.

[9]周建强,姚学军,谢立.超立方体上基于缓冲机制的无死锁路径算法[J].软件学报,1995

(4):240-247.

[10]陈卓.一种嵌入式TCP/IP协议栈的研究与实现[D].重庆:重庆大学,2006.

Design of vehicular multimedia AD player based on embedded Linux

ZHENG Ji-ting1, WANG Run-min1, Zhang Nan2

(n University, Xi’an 710064, China; ’an University of Science and

Technology, Xi’an 710054, China)

龙源期刊网

Abstract: Aiming at the limitation of traditional vehicular multimedia AD player, a design

method of vehicular multimedia AD player based on embedded Linux and Qt/Embedded is proposed.

S3C6410 is adopted as the central processor in the hardware and the software platform uses

Embedded Linux operating system. Additionally, the interface is developed by Qt, which is a type

of open source graphical user interface library. The system adopts MPlayer as its media player. After

experimental verification, the AD player has the characteristic of low cost, user-friendly, quick

reaction, and has a significant improvement in cross-platform and scalability.

Keywords: multimedia AD player; embedded Linux; Qt/Embedded; Mplayer