科 技 信 息
计算机与网络
基于QT 的视频媒体播放器的设计与实现
西安文理学院计算机科学与技术系 朱浩悦 张红祥
[摘 要]目前常见的视频多媒体软件各有特色,但是都存在着不如人意的地方,如占用系统资源多、支持格式少和界面臃肿等等。
本文设计并开发了一个视频媒体播放器,该播放器基于 QT 集成开发环境,利用系统的 Mplayer 命令接口来编程,具有体积小、支持的
播放格式多、系统资源占用少、支持播放列表编辑、支持各种视频格式等功能。
[关键词]视频 播放器 QT Mplayer
0.引言
视频播放器是指能播放以数字信号形式存储的视频的软件,也指
具有播放视频功能的电子器件产品。除了少数波形文件外,大多数视
频播放器携带解码器以还原经过压缩的媒体文件,视频播放器还要内
置一整套转换频率以及缓冲的算法。如今,PC 机所支持的音频、视频
播放软件越来越多,想在 PC 机上听 CD、MP3 或者欣赏 VCD、DVD 大片,
都已易如反掌。一款款五花八门的播放器软件随你挑选,有的作风精
简、有的功能强大,多数都支持所有的常见的媒体格式(.rm、.rmvb、.
mpg、.mp4、.avi)。虽然各大厂商所设计制作的播放器都有自己独特的
功能和设计理念,但是也都有着自己的弊端,如暴风影音占用系统资源
大,射手播放器的播放列表并不显示到主界面上等。本文将设计并实
现一款界面清楚明了,操作简单实效,支持多种格式媒体,在播放列表
中加载一个或者多个多媒体文件;显示播放进度条;用户能随意改变屏
幕尺寸;在多媒体文件播放完后可以选择自动关闭播放器和循环播放
功能的视频媒体播放器。
1.功能需求
对于一个播放器来说,用户最基本的要求就是播放视频文件。电
脑用户在观看视频时会根据自身需求来调整音量、播放速度、在播放列
表中添加文件等,所以播放器必须要满足用户的各种需求。视频有多
种格式,所以这款播放器最好能够支持所有的视频格式。
void pre()——播放播放列表中上一个文件功能的函数。
void pause()——播放暂停功能的函数。
void changeVolume(int)——调节音量大小功能的函数。
void setSpeed()——设置播放速度功能的函数。
void dataRecieve()——获取当前播放文件的总时间和当前播放进
度功能的函数。
void jumpByTime()——通过输入时间来设置播放进度功能的函数。
void playListItem(QListWidgetItem *)——程序按照播放列表来播放
的功能函数。
void closeEvent(QCloseEvent *)——关闭程序功能的函数。
void add()——向播放列表中添加文件功能的函数。
void del()——从播放列表中删除文件功能的函数。
视频播放最为主要的功能是可以正常播放视频格式文件,以下代
码是播放功能的函数代码和详细解释。
void MovieForm::play(QString fileName)
{
QStringList args;
p->kill();
p=new QProcess(this);// 创建一个新的进程
connect(p,SIGNAL(readyReadStandardOutput()),this,SLOT(dataRecieve
//先关闭原来的进程
从用户的角度可以得出如图 1 的系统功能结构图:
())); // readyReadStandardOutput()信号
//是用来获取新播放文件的信息。将信号与槽链接,有新进程创建
就会触发
图 1 软件功能结构图
2.开发环境介绍
QT 是诺基亚开发的一个跨平台的 C++图形用户界面应用程序框
架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用
功能。QT 是完全面向对象的,很容易扩展,并且允许真正地组件编
程。自从 1996 年,QT 进入商业领域,它已经成为全世界范围内数千种
成功的应用程序的基础。QT 也是流行的 Linux 桌面环境 KDE 的基
础。 基本上,QT 同 X Window 上的 Motif,Openwin,GTK 等图形界面库
和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西,但 QT 具
有优良的跨平台特性、面向对象、丰富的 API、大量的开发文档等优点。
信号和槽机制是 QT 的核心机制,信号和槽是一种高级接口,应用
于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的
重要地方。信号和槽是 QT 自行定义的一种通信机制,它独立于标准的
C/C++语言,因此要正确地处理信号和槽,必须借助一个称为 MOC(Me-
ta Object Compiler)的 QT 工具,该工具是一个 C++预处理程序,它为高层
次的事件处理自动生成所需要的附加代码。
3.功能实现
本播放器界面分为四部分:
1)定义 QLable 的对象制作播放窗口。
2)定义 QListWidget 的对象控件制作播放列表。
3)定义 QPushButton 的对象制作按钮。
4)定义 QSlider 的对象制作声音控制条和播放进度控制条。
本播放器定义的功能函数如下:
void play(QString fileName)——播放功能的函数。
void next()——播放播放列表中下一个文件功能的函数。
274
—
—
args<<"-slave";
args<<"-quiet";
args<<"-wid"<winId(),10);
args<<"-vo";
args<start("mplayer",args); //播放函数
playBtn->setEnabled(true);
stopBtn->setEnabled(true);
//用来获取文件名
}
获 取 播 放 文 件 的 总 时 间 和 当 前 播 放 进 度 的 方 法 :用 p->write
("get_time_length\n"); p->write("get_time_pos\n"); 和 p->write("get_per-
cent_pos\n");将时间标准输出显示。通过 connect(process,SIGNAL(ready-
ReadStandardoutput()),this,SLOT(dataRecieve())); 读 出 我 们 需 要 的 信 息 。
process 有可读取的信息时,发出信号,在槽函数 dataRecieve()中读取信
息。dataRecieve()函数是获取播放文件的总时间和当前播放进度的函
数。
void MPlayer::dataRecieve()
{
while(process->canReadLine())
{
QString message(process->readLine());
}
}
其中 message 即为读取的信息,我们可以根据需要取我们要的信
息 ,例 如 :文 件 总 时 间 为 :ANS_LENGTH=23.00,当 前 时 间 为 :
ANS_TIME_ POSITION=23.00。
我们用下面函数实现快进功能:
void MovieForm::setSpeed()
{
double speed=QInputDialog::getDouble(this,"设置播放速度");
科 技 信 息
计算机与网络
if(speed>0)
p->write(QString("speed_set "+QString::number(speed)+" 2\n").toUtf8
());
}
当 speed 的数值为 1 的时候,即为正常速度播放,当 value 的数值为
X 时,则为 X 倍的速度进行视频播放。
我们可以通过输入时间来调整播放进度:
QDialog *timeDialog=new QDialog(this);
minBox=new QSpinBox(timeDialog);
QLabel *minLabel=new QLabel("分",timeDialog);
secBox=new QSpinBox(timeDialog);
QLabel *secLabel=new QLabel("秒",timeDialog);
QPushButton *sureBtn=new QPushButton("确定",timeDialog);
connect(sureBtn,SIGNAL(clicked()),this,SLOT(sureBtnClicked()));
timeDialog->show();
前 6 行代码设置了输入时间的对话框,第 7 行将 clicked 信号和槽函
数 sureBtnClicked() 连 接 起 来 ,当 点 击 确 定 Button 时 ,将 命 令 传 递 给
Mplayer 控件实现跳转。
暂停、音量调节、静音功能的实现分别可以通过 process->write()来
实现。
4.播放器实现结果
运行视频媒体播放器,会打开初始化界面,在没有选定播放文件
时,播放、停止按钮以及播放进度条为不可点击状态,上一个和下一个
可以选定播放列表中上一个和下一个文件,add 按钮选择视频媒体文件
添加到播放列表中,del 按钮从播放列表中删除当前的视频文件。单击
add 按钮会弹出选择视频文件的对话框,如图 2 所示。
图 2 添加视频文件图
将视频文件添加到播放列表后,在播放列表中选中文件名称,点击
播放按钮或者双击文件名称进行视频播放。此时播放、停止、上一个、
下一个按钮都变为可以选择的状态。拖动声音控制条和播放进度控制
条可以随意改变音量高低和定位播放时间。点击速度设置按钮播放速
度设置对话框,用户在对话框中输入想要播放的速度可以设置视频的
播放速度。如图 3 所示。
视频播放时,点击时间跳转按钮会弹出时间跳转对话框,用户在
此对话框中输入想要跳转的时间,播放器在判断输入时间没有超过
了视频时间总长后进行跳转,播放进度条也会同步改变。如图 4 所
示。
(上接第 273 页)
学生树立克服困难、解决问题的信心[5]。
3.3 师资队伍的建设与培养
计算机学科是一门不断发展与更新的科学,这就要求任课老师需
要不断提高自身的文化修养,时刻获取相关的最新知识,完善充实知识
体系。NIIT 的榜样学习法很大程度上依赖教师,学院为了培养教师,要
求担任每一模块教学任务的教师都要参加 NIIT 的培训,并取得相关模
块的证书。如笔者曾经参加南京邮电大学的课程培训,系统学习了第
三模块的课程内容并取得了相关教学证书。另外,备课工作也是任课
教师的一项必须认真对待的工作。任课教师在准备教案时,可以通过
Internet 和多媒体技术来获得大量较新的有关计算机学科的技术资料、
信息等。结合企业具体的实际案例,从而使得教学内容更加的丰富,更
具有针对性,突出实用性。
4.总结
NIIT 在偏重于应用的计算机教育中具有突出的优势,与 NIIT 合作
的高校本科教育是一大进步,但合作也给课程设置、学生培养方式和教
师能力等方面提出了新的要求,本科计算机教育只有合理地对待这些
问题,在合作过程中不丢失传统教学优势又引入先进教学模式,才能成
图 3 播放速度设置图
图 4 时间跳转图
5.测试及结论
本播放器在开发完成后,进行了黑盒测试,具体测试内容如下:
1)重复打开关闭程序,看系统会不会产生错误。
2)在播放过程中多次点击播放、暂停和停止按钮,看每次点击是否
都可以产生相应效果。
3)在播放列表中添加各种类型的视频媒体文件,看是否能够播放
各类文件。
4)随机通过拖动播放进度条来控制播放进度。
5)通过随机输入时间来进行播放定位。
6)随机调整音量的大小。
以上 6 点测试的通过,基本保证了此播放器可以进行播放、暂停、
添加文件、控制播放进度和音量的功能。由于时间的仓促,本次设计基
本上完成了预期的目标,实现了播放、暂停、停止、快进、快退、播放列表
以及音量调节和时间显示,实现了一个小巧并支持多种格式的基于 QT
的视频媒体播放器。
参考文献
[1]W.Richard Stevenson.Stephen A.Rago.UNIX 环 境 高 级 编 程
[M].人民邮电出版社,2006.
[2]Stanley B.Lippman And JOSEE Lajoie And Barbara E.Moo.C++
Pramer Plus[M].第五版.人民邮电出版社,2006.
[3]Jasmin Blanchette And Mark Summerfield.C ++ GUI Program-
ming with QT4[M].第二版.电子工业出版社,2008.
[4]蔡志明,卢传富等.精通 Qt4 编程[M].电子工业出版社,2008.
功进行教学改革,才能真正提高学生的素质和就业率。优集学院与 NI-
IT 合作的方式是嵌入式的四学期软件教育,笔者自担任 NIIT 教学工作
以来,在教学过程中全程使用了项目教学法,给学生树立了成功的典
范。从最后的考核成绩和项目完成情况来看,NIIT 的教学取得了良好
的效果。
参考文献
[1]中国高等院校计算机基础教育改革课题研究组.中国高等院校
计算机基础教育课程体系(CFC2006)[M].北京:清华大学出版社,2006
[2]霍立红.新时代计算机教改心得[J].中国科教创新导刊,2009,25:
177
[3]覃华,苏一丹.印度 NIIT 教学法及其在高校教学中应用的研究
[J].广西大学学报,2004,9:7-9
[4]刘志成,李忠华,熊芊.全面剖析 NIIT 教学体系[J].计算机教育,
2007,9:47-50
[5]任周.基于计算机网络课程教改的研究[J].软件导刊,2009,8:
187-188
—
275
—