嵌入式掌上娱乐系统设计方案
3.1 播放器的实现
对于音频和视频的播放,本系统使用QT 设计一个前端播放、控制界面,并使用Mplayer 作为后端程序,能播放mp3、ogg、ogm、wma、wav、asf、au、avi、mpeg、mpg、mv1、mov、wmv、pls、m3u、mp4、 m4a 等音频和视频格式。播放器模块的结构图如图3 所示,播放器使用Mplayer 作为后端程序(红色部分),使用QT4开发前端程序(绿色部分)。
图3 播放器结构图
3.1.1 后端程序简介
本系统使用Mplayer 作为其后端程序。MPlayer被评为Linux 下的最佳媒体播放工具,不需要任何系统解码器就可以播放包括视频、音频、流媒体、广播、电视等各种媒体。
Mplayer 另一个重要特点在于其开源性。
Realplayer,Windows Media Player,Quick Time 等许多播放软件都是性能优秀的播放软件,但由于它们都不开放源代码,给移植带来了麻烦。同时MPlayer 还具有良好的移植性,可以移植到许多非X86 平台上,MPlayer 软件包中含有针对ARM 架构的优化代码,这些代码利用ARM 的特性加快了对媒体的处理速度。
基于以上多个原因,本系统选择了MPlayer 作为娱乐终端的播放软件。本系统通过移植Mplayer 来实现对视频的播放功能。Mplayer 编、解码模块,是系统的音、视频处理中心,在mplayer 的编解码库中,包含的大量的音、视频格式处理程序,经过编译优化过的mplayer 可以完成对大多数音、视频格式高效的编解码工作。
3.1.2 前端程序的设计与播放器的实现
主界面窗口有一个显示屏和一些控制按钮,包括播放、暂停、下一首、上一首、音量调整以及播放进度条。文件操作窗口可以使用户选择要播放的文件。
播放列表用来播放用户加载的多媒体文件。
MPlayer 默认全屏播放,但在GUI 中一般都是指定区域或者控制来播放。这样显得美观,MPlayer 支持在指定的X 窗口播放的功能。用-wid 参数告诉窗口ID即可。例如:mplayer test.mpg -wid 0x00029 #0x0029是XID,而QT 的控件都是从QWidget 继承下来,因此它本身也有wid,这样只要用 QWidget::winID() 取出WID,即可实现在指定窗口播放视频的功能。
本模块是建立一个Qt GUI 程序。然后用一个label控件来播放视屏,用一个进度条显示播放的进度,用按键显播放,暂停,上一首,下一首,停止和添加资源文件。然后用一个Qprocess 在后台执行MPlayer,并把label 的WID 传给它。然后把MPlayer 的输入输出重定向,把原本从标准输入接收命令变成从GUI 的接收命令。
3.1.3 播放功能设计
播放器实现的软件流程图如图4 所示:
图4 播放器软件流程图。
通过定义一个QProcess 对象调用已编译好的Mplayer。
QProcess *process = new QProcess();
process->setProcessChannelMode(QProcess::MergedChannels);
Process->start("mplayer –ac –mad xxxxx");
在命令中添加 -slave 和 -quiet 就可以通过命令设置Mplayer 实现相应的功能。Process->start("mplayer–slave –quiet –ac –mad xxxxx")。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
评论