基于qt的嵌入式多媒体播放系统内容摘要:

交流 PC 端环境的搭建 主机环境 :CentOS 交叉编译工具: 主机编译工具: 本小结主要是介绍如何在 CentOS 环境中搭建 Qt开发环境, 将 Qt_S 软件包拷贝到 CentOS 双击即可开始安装。 点击 next,选择 custom 安装如图 6所示,选择所需的开发工具,如图 7 所示,接着点击下一步即可, 直到 安装完成。 12 图 6选择 自定义 安装方 式 图 7 开发工具的选择 现在让我 们熟悉我们所要开发的开发环境 : 上面的 qtopia 编译安装完成后,会在咱们前面创建的 target 目录下生成很 多开发工具。 先看一下供主机端使用的工具 [root@localhost bin] pwd /home/linux/Qtopia/target/qtopiacore/host/bin [root@localhost bin]ls assistant linguist lupdate qmake rcc uic designer lrelease moc qvfb templates uic3 13 如果系统以前有其它 qt 开发工具,把环境变量修改一下,保证它们不要和我们这几个工具冲突。 下面可以试一下你的 designer 了。 ./designer mplayer 项目工程的建立与开发 好像其他 开发环境一样, Qt 的项目也需要建立相关的工程。 mplayer 工程的建立 打开 Qt creator,单击 File,选择 New File or Project 如图 8, 新建 工程目录为 /home /linux /mplayer, 然后 选择 相应的 模板,选择 Qt 控件项目 选项,创建一个 Qt Gui 应用,如图 9所示 图 8 Qt工程的建立 14 图 9 选择要建立的应用类型 然后选择工程的名称及所建立的工程目录如图 10 所示: 图 10 选择工程名称 15 选择下一步如图 11 所示: 图 11包含的 Qt工具版本号 这时会弹出一个让我们设置相关文件类型的对话框,将所有的文件名称改为我们所需要的文件名如 图 12所示: 图 12 工程的内容及类名 确认我们所建立的文件如图 13 所示的内容一致: 16 图 13 工程建立后所产生的文件 好了, 我们的工程已经建立,但是我们要采用界面,所以我们还所需一些必 要的资源文件,现在我们进行如下操作,将我们所需的文件拷贝到我们工程目录下,以备我们后面所需: cd /home/linux/mplayer/ mkdir images mkdir movies cd /root/Desktop cp /home/linux/mplayer/movies/ cp /home/linux/mplayer/movies/ cp *.png /home/linux/mplayer/images 进行以上操作后,我们将一些 png 格式 的图片和一部影片以及一首 mp3 拷贝到了工程目录的 images、 movies 目录下。 我们 的 工程建立 和一些所备资源文件业已准备 完毕,然而还缺一步,我们需要按钮的资源文件,右击鼠标,选择 Add New„ 如图 14 所示 17 图 14 添加资源文件 选择我们所要的文件类型 ( Qt Resource file) 如图 15 所示: 图 15 选择要添加的文件类型及资源文件 18 命名所要的资源文件名称及所要存放的路径,如图 16 所示: 图 16 资源文件名及存放的路径 确认资源文件的正确性如图 17 所示: 图 17 资源文件产生 的文件 19 添加资源文件中的内容,首先我们要点击 Add 在选择 Add Prefix 添加前缀后,选择 Add Files 添加我们所要的文件如图 18所示: 图 18添加前缀并添加文件 选择所要添加的文件路径所在,然后选择打开,添加所要的文件如图 19所示: 图 19所要添加的文件 文件添加成功后,会如图 21 所示: 20 图 21 文件添加后资源文件所包含的内容 mplayer 实现原理 先来考虑考虑如何为 mplayer 编写前端界面的问题。 有两种思路,一种是把mplayer 解剖,直接修改他里面的代码,这 样我们做得界面就能够和 mplayer 一体了(当然也能够通过 link mplayer 用到的任何的库和 .o文档,把他无缝的集成在程式里面);第二种方法就是 mplayer 所谓的 slave 模式。 mplayer/home/linux/ – quiet slave 现在来探讨一下 slave 模式:所谓的 slave 模式,就是 mplayer 在运行过程中能够接收用户的输入命令行,具体支持哪些命令行,能够通过 mplayer input cmdlist 这条命令来得到,在 Mplayer 源码的 中也 有对这些命令有详细的讲解。 Slave 模式下工作的 Mplayer 可以和系统的标准输入、输出进行信息交互。 我们可以用 linux C 编程来完成对 slave 模式工作的 Mplayer进行控制和信息获取。 如: mkfifo(“/tmp/fifo”,0777)。 可以使用 popen()来打开 Mplayer FILE* mp。 mp=popen(“mplyer /home/linux/ quiet – slave – input 21 file=/tmp/fifo” ,”r”)。 可以通过管道 /tmp/fifo 给 mplayer发送命令,通过 mp获取 mplay 的返回数据 如: system(“echo \”mute 0\” /tmp/fifo”)。 //写命令 fgets(buf,1000,mp)。 //读取 mplay 返回数据 而 Qt 给我们提供了更方便的实现方法。 通过定义一个 QProcess 对象调用已编译好的 Mplayer。 QProcess *process = new QProcess()。 processsetProcessChannelMode(QProcess::MergedChannels)。 Processstart(“mplayer – ac mad xxxxx”)。 在命令中添加 slave 和 quiet 就可以通过命令设置 Mplayer 实现相应的功能。 在 mplayer 源码中的, 中对这些命令有详细的讲解。 Processstart(“mplayer – slave – quiet – ac mad xxxxx”)。 ( 1) 暂停功能 通过如下代码可以设置 Mplayer 暂停。 processwrite(“pause\n”)。 执行这段代码的时候如果是播放状态就会暂停,暂 停状态时就会继续播放。 ( 2)获取播放文件的总时间和当前播放进度 执行下面代码时, Mplayer 将时间在标准输出显示。 processwrite(get_time_pos\n)。 processwrite(get_time_length\n)。 通过如下代码即可读出我们需要的信息: connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(back_message_slots()))。 process 有可读取的信息时,发出信号, 在槽函数 back_message_slots()中读取信息。 void MPlayer::back_message_slots() { while(processcanReadLine()) { QString message(processreadLine())。 //message 即为读取的信息,我们可以根据需要取我们要的信息如 22 //文件总时间为: ANS_LENGTH= //当前时间为: ANS_TIME_POSITION= } } (3)快进功能 seek value [type] Seek to some place in the movie. 0 is a relative seek of +/ value seconds (default). 1 is a seek to value % in the movie. 2 is a seek to an absolute position of value seconds. 下面代码即可实现快进功能: processwrite(“ seek ** 1\n” )。 ( 4) 音量调节 volume value [abs] Increase/decrease volume or set it to value if [abs] is nonzero. 下面代码即可实现快进功能: Processwrite(“ volume 1\n” )。 //音量减小 Processwrite(“ volume +1\n” )。 //音量增加 ( 5)静音功能 mute [value] Toggle sound output muting or set it to [value] when [value] = 0 (1 == on, 0 == off). 下面代码即可实现快进功能: processwrite(mute 0\n)。 //开启静音 processwrite(mute 1\n)。 //关闭静音 (6) 定位视频窗口 通过上面的代码基本功能实现了,可是播放视频的时候发现又弹出一个窗口。 并没有出现在我们的窗口里。 如下代码即可时间窗口的定位。 QString mon = mplayer slave quiet ac mad zoom movie/ + file_name + wid + QString::number(widgetwinId())。 processstart(mon)。 红色部分实现窗口的定位。 Widget 是一个 QWidget 对象。 通过 winId 可23 以获得一个数字, wid 既将视频输出定位到 widget 窗体部件中。 注意: wid 参数只在 X1 directX 和 OpenGL 中适用。 mplayer 界面 UI 搭建 利 用 前 面 安 装 的 designer 搭建 UI 界 面 , 并 将 其 保 存 在/home/linux/mplayer/ 界面搭建效果如图 22。 图 22 mplayer界面搭建效果 mplayer 代码编写 在 /home/linux/mplayer/下创建 、 、 、。 其中 为主函数; 为 mplayer 播放器的主程序代码,实现播放器的各项功能; 为 的头文 件,其中包括 中各个函数以及变量声明; 为资源文件,中间包括mplayer 界面设计的界面元素相关链接信息。 代码如下: 24 include QApplication include int main(int argc, char **argv) { QApplication app(argc, argv)。 MPlayer player。 ()。 return ()。 } 代码请查看附录 代码如下: RCC qresource prefix=images fileimages//file fileimages//file fileimages//file fileimages//file fileimages//file fileimages//file fileimages//file fileimages//file fileimages//file fileimages//file fileimages//file fileimages//file fileimages//file fileimages//file /qresource /RCC 代码如下: ifndef _MPLAYER_H define _MPLAYER_H include QIcon 25 include QProcess include QTimer include QStringList include QDir include QTime include QString include cla。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。