李攀,杨艳
(济源职业技术学院,河南济源459000)
嵌入式车载播放系统软件设计与实现
李攀,杨艳
(济源职业技术学院,河南济源459000)
系统使用Q t Creator作为开发工具,综合嵌入式数据库SQLite、开源多媒体播放器MPlayer技术,设计并实现了一款嵌入式车载播放系统,人机交互界面友好易操作,支持主流音视频文件的播放,且系统易于移植和扩展.
车载播放系统;Qt Creator;SQLite;MPlayer
Qt是Trolltech公司的标志性产品(现Trolltech公司已被手机巨头NOKIA公司收购),是一个跨平台的C++图形用户界面(GUI)工具包.它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工具和服务器.Qt是面向对象语言,易于扩展,并且允许组件编程.Qt应用程序接口与工具兼容于所有支持平台,例如Linux和其他类Unix系统、微软的视窗系统及苹果电脑的Mac OS X系统,并对不同平台的专门API进行了专门的封装(文件处理、网络等)[1],让开发员们掌握一个应用程序接口便可执行与平台无关的应用开发与配置.
Qt被Nokia收购后推出了一款新的轻量级集成开发环境(IDE)Qt Creator.Qt Creator是专为支持跨平台开发而设计的集成开发环境,包含一套用于创建和测试Qt应用程序的高效工具:高级C++代码编辑器、Qt Designer可视化调试器、源代码管理、项目和构建管理工具等.开发人员可使用代码编辑器直接进行高效的代码开发,也可使用Qt Designer进行可视化的设计,非常易于上手和操作.
Qt/Embedded(简称QT/E)是一个专门为嵌入式系统设计图形用户界面的工具包,是NOKIA公司的图形化界面开发工具Qt的嵌入式版本,它通过QtAPI与Linux I/O以及Framebuffer直接交互,拥有较高的运行效率.Qt/Embedded和Qt一样,在4.5版本之后提供了三种不同的授权协议GPL,LGPL和Commercial.开发者使用QT/E开发的应用程序要移植到不同平台时,只需要重新编译代码,而不需要对代码进行修改.并可以随意设置程序界面的外观、方便地为程序连接数据库、使程序本地化、将程序与Java集成等.
在Qt Creator中完成车载播放器工程的创建后首先是设计界面.界面可用代码生成,也可用Qt Designer辅助设计.使用Qt Designer设计界面只需将界面中所需的窗口部件拖入ui界面文件中,然后设置属性修改其显示效果,最后使用布局控件设置布局效果.通过拖放窗口部件完成的界面在布局上不够精确,因此本系统采用纯代码来完成界面开发.
本系统的界面主要包括的窗口部件有Table View、Push Button等.在界面的布局上,系统采用了手工布局方式.手工布局方式通过基类QWidget提供的setGeometry()函数来设置子窗口部件的位置和大小,当窗口大小改变的时候,重新计算窗口的大小或者变化比例,然后重载QWidget::resizeEvent (QResizeEvent*)函数,能够使得子窗口部件的大小和位置作出适应性的改变.
图1 .1系统主界面
如图1所示为本系统的主界面.
界面设计的主要开发过程如下:
①使基础窗口QWidget继承于主窗口QMain-Window,窗体构造函数负责模板的初始化;
②创建MyButton类构造窗体按钮部件,并对窗口部件中使用的对象以及函数进行声明,包括图标、名称、字体、文本、坐标、画笔、按钮是否有效、重绘时间、鼠标按下事件等;
③添加按钮的信号与槽.
系统界面中每个功能按钮都对应一个信号和槽,信号和槽式Qt编程的核心技术,通过信号可以将界面上的空间所发生的事件进行发射,槽函数负责接受相应信号并作出响应处理.如播放暂停按钮,与其对应的信号是单击,它的单击信号连接一个槽处理函数,在这个函数中通过QProcess来向slave模式下的MPlayer发送命令,达到控制播放的目的.其他的控件在处理方式上都与播放暂停按钮类似,都有自己得信号和槽.
车载播放系统的主要功能是实现音频和视频文件的播放,此外,本文所设计的车载播放系统可按照多种方式对数据库中的歌曲进行查找;可实现歌曲的播放暂停,以及上一首和下一首歌曲的切换;所选歌曲可生成播放列表,列表可以循环播放,列表信息可修改,在列表中双击歌曲名称可播放该歌曲;可对设备中存储的歌曲进行删除;可播放外接存储器中的歌曲.
具体功能模块设计方式如下[2]:
3.1 搜索歌曲
点击搜索歌曲按钮时,跳出一个对话框,当用户输入了歌曲名或名称中的部分内容并确定后,发送消息到服务器端,服务器端对表song进行模糊查询,得到符合的歌曲列表,将这些信息返回给客户端,在客户端形成一个QwidgetTable控件,用来显示搜索的结果.当用户点击其中的一行时,将相应行的歌曲信息赋值给current并播放.
3.2 上一首
上一首按钮连接了prev()函数,它的功能是通过prev()函数来实现的.在此函数中,实现读取usersong.xml文件中位置为songpos-1的歌曲信息,赋值给current,然后进行播放,实现上一首功能.
3.3 播放
当点击播放按钮时,隐藏播放按钮,显示暂停按钮,并读取current中的信息,通过Phonon的函数play()实现播放.
3.4 暂停
当点击暂停按钮时,隐藏暂停按钮,显示播放按钮,调用Phonon中的pause()函数,将播放暂停.
当点击下一首按钮时,调用nextFile()函数,并且当歌曲播放完之后会产生一个aboutToFinish()信号,这个时候也会调用nextFile()函数.在此函数中调用readinformation()函数,得到下一首的信息,并播放.
3.6 打开本地文件
文件对话框QFileDialog是Qt中用于实现文件打开和保存操作的基本对话框.QFileDialog提供了很多静态函数,用于获取用户选择的文件.其中getOpenFileName()用于获取用户所选文件的文件名.getOpenFileName()中有六个参数,分别用于设定父组件、对话框的标题、默认打开的目录、可选文件类型等.当用户选择文件后,因为它是本地文件,会直接把所选文件的路径赋给播放的对象.当播放完后继续播放usersong.xml中的下一首.
3.7 静音
音量的控制是通过Phonon::VolumSlider控件实现的,通过执行语句:ui->volumeSlider->setAudioOutput(audiooutput)将音量的控件连接到了音频输出的设备上,通过语句Phonon::createPath(mediaobject,audiooutput)音频输出的设备和播放的对象mediaobject连接,因此实现静音功能.
3.8 显示歌曲名称
void Player::setLabel(QString track)
{
内部控制主要是指企业通过制定一系列规章制度来对自身经营管理活动进行控制。从实践情况来看,这种控制性的行为很难得到人们的认可,由此使得企业内部控制管理缺乏必要的动力支持。另外,企业实施内部控制也需要一定的成本费用,在开展内部控制的过程中会影响企业经济效益的获得。
QString filename=mediaObject->currentSource().fileName();
filename=filename.right(filename.length()-filename.lastIndexOf('/')-1);
this->setWindowTitle("Player~"+filename);
}
3.9 关闭窗口
双击窗体空白处可关闭播放器.需重定义鼠标双击事件调用close()函数加以实现.
3.10 数据库操作
本文所设计的车载播放系统使用SQLite数据库对歌曲及用户信息进行管理.
SQLite是D.Richard Hipp使用C语言编写的开源嵌入式数据库引擎.它是完全独立的,不具有外部依赖性,非常健壮.SQLite大约250KB大小,相比Mysql、PostgreSQL这两款著名的开源数据库,SQLite占用资源更少,处理速度更快,非常适合用于嵌入式系统开发中.
在本系统中使用SQLite数据库对歌曲信息结构进行组织、存储以及管理.通过使用SQLite建立歌曲信息数据库表,然后在程序中通过相关接口函数对歌曲信息进行操作,如插入、删除、更新、查询等.采用SQLite数据库进行歌曲信息的管理大大降低了编程的复杂性.
在具体的系统数据库模块中,采用了Qt框架中的QtSql模块连接SQLite数据库的方式来操作数据库.QtSql模块提供了一个平台无关且数据库无关的访问SQL数据库的接口,Qt中的每个数据库连接用一个QSqlDatabase对象来表示,同时Qt也使用不同driver来和各种不同数据库的API进行通讯.对于SQLite数据库Qt提供了很好的支持和封装,通过Qt的相关类可以很容易的进行数据库操作[3].
要实现对SQLite数据库进行操作首先需要创建一个关于数据库的创建和链接的头文件,然后在头文件中通过创建QSqlDatabase数据库连接对象来调用addDatabase()并设置相关函数的属性,然后在工程文件的最后添加关于使用数据库的声明“QT+=sql”.
系统的主要功能是响应客户端发送来的各种请求,并作出正确处理,包括歌曲选择、播放控制等.在本文的系统设计中,选用了MPlayer作为系统的媒体播放器来进行媒体文件的播放以及控制.
MPlayer是一款开源多媒体播放器,以GNU通用公共许可证发布.MPlayer能够播放MPEG、VOB、AVI、OGG、VIVO、ASF/WMV、Qt/MOV、FLV、RM等大多数媒体文件,且不需要任何系统解码器. MPlayer资源占用非常少,并可运行于各种主流操作系统,在低配置的机器上使用有突出优势.所以对于运算速度相对较弱的嵌入式系统来说,MPlayer是一个很好的选择[4].
MPlayer本身是一个命令行的程序,默认情况下MPlayer是从键盘上获得控制信息.但MPlayer也另外提供了一种更为灵活的控制方式——slave模式.在slave模式下,MPlayer会在后台运行并不再截获键盘事件,它只会从标准输入读取以换行符( )分隔开的命令,这样就为GUI程序提供一个简单的编程接口,本系统中就是采用MPlayer的slave模式进行播放控制的.
具体实现方式是,在系统的播放模块中,使用Qt的QProcess(进程类)通过start方法调用slave模式下的MPlayer产生一个进程,然后通过QProcess类的write方法向MPlayer发送控制命令,实现控制播放的目的.
本论文详细介绍了如何使用Qt Creator完成车载音乐播放系统的界面设计及软件功能模块设计.此车载播放系统可实现的功能如下:
①具有美观、易于理解和操作的主界面;
②可按照多种方式对数据库中的歌曲进行查找;
③可实现歌曲的播放、暂停,以及上一首和下一首歌曲的切换;
④所选歌曲可生成播放列表,列表可以循环播放,列表信息可修改,在列表中双击歌曲名称可播放该歌曲;
⑤可对设备中存储的歌曲进行删除;
⑥可播放外接存储器中的歌曲.
同时,系统可以方便地移植到各种嵌入式设备中.
〔1〕JasMin Blanchette.C++GUI Programming With Q t 4[M].北京:电子工业出版社,2008.
〔2〕杨向文.基于ARM-LINUX的嵌入式媒体播放器的研究与实现[D].大连:大连海事大学,2009.
〔3〕雷小俊,李伟.SQLite在嵌入式Web服务器中的应用[J].信息技术,2006.
〔4〕Crealse Sheng.MPlayer研究报告[Z].2007.
TP311
A
1673-260X(2013)07-0123-03
河南省科学技术厅项目资助(豫科鉴委字[2011]第2190号)