没有合适的资源?快使用搜索试试~ 我知道了~
基于QT前端的mplayer播放器项目文档
5星 · 超过95%的资源 需积分: 41 60 下载量 99 浏览量
2011-07-05
10:40:06
上传
评论 1
收藏 127KB DOC 举报
温馨提示
试读
20页
Mplayer。它支持大量的多媒体文件格式,像常见的音频文件如mp3/wav/mid,常见的视频文件如avi/vcd/dvd/rm等等,各种视频编/解码方式也是应有尽有。 我们项目的目标是在liunx下,用QT做一个MPlayer皮肤,能够实现播放器的常见 功能,如:播放、停止、快进、快退、上/下一曲等。并把程序移植到ARM平台上。
资源推荐
资源详情
资源评论
基于 QT 前端的 mplayer 播放器项目文档 V1.0
一、项目概述
Mplayer。它支持大量的多媒体文件格式,像常见的音频文件如 mp3/wav/mid,常见的视频
文件如 avi/vcd/dvd/rm 等等,各种视频编/解码方式也是应有尽有。
我们项目的目标是在 liunx 下,用 QT 做一个 MPlayer 皮肤,能够实现播放器的常见
功能,如:播放、停止、快进、快退、上/下一曲等。并把程序移植到 ARM 平台上。
二、功能体验
本节主要目的是让大家在学习具体实现过程前,先体验下播放器的功能。
1、PC 端功能体验
将“项目代码\工程代码”目录下的 mplayer.tar.gz 拷贝 linux 系统中(主机环境配置好以后,参
照第四节的实现过程)。
#tar xvfz mplayer.tar.gz
#./mplayer
2、目标平台功能体验
l 将“项目代码\工程镜像”文件夹中的 zImage、rootfs.cramfs 烧写到目标板(或者采用 nfs
方式)。分区情况为:
Boot: 0 - 40000 size=0x40000
Kernel:40000 – 240000 size=0x200000
Rootfs: 240000 -3740000 size=0x3500000
启动参数为:
setenv root=1f02 init=/linuxrc rootfstype=cramfs console=ttySAC0,115200 display=sam240
setenv bootcmd setenv bootcmd nand read 30008000 40000 200000 \; go 30008000
l 启动系统后运行:
#. ./Qtopia.sh
#cd mymplayer
#./mymplayer -qws
三、实现原理
先来考虑考虑如何为 mplayer 编写前端界面的问题。有两种思路,一种是把 mplayer 解剖,
直接修改他里面的代码,这样我们做得界面就能够和 mplayer 一体了(当然也能够通过 link
mplayer 用到的任何的库和 .o 文档,把他无缝的集成在程式里面);第二种方法就是
mplayer 所谓的 slave 模式。
mplayer '/home/linux/1.mp3' -quiet -slave
现在来探讨一下 slave 模式:所谓的 slave 模式,就是 mplayer 在运行过程中能够接收用户
的输入命令行,具体支持哪些命令行,能够通过 mplayer -input cmdlist 这条命令来得到,在
Mplayer 源码的 slave.txt 中也有对这些命令有详细的讲解。Slave 模式下工作的 Mplayer 可
以和系统的标准输入、输出进行信息交互。我们可以用 linux C 编程来完成对 slave 模式工
作的 Mplayer 进行控制和信息获取。
如:
mkfifo(“/tmp/fifo”,0777);
可以使用 popen()来打开 Mplayer
FILE* mp;
mp=popen(“mplyer /home/linux/1.mp3 -quiet –slave –input 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();
process->setProcessChannelMode(QProcess::MergedChannels);
Process->start(“mplayer –ac mad xxxxx”);
在命令中添加 -slave 和 -quiet 就可以通过命令设置 Mplayer 实现相应的功能。在 mplayer 源
码中的,slave.txt 中对这些命令有详细的讲解。
Process->start(“mplayer –slave –quiet –ac mad xxxxx”);
1、暂停功能
通过如下代码可以设置 Mplayer 暂停。
process->write(“pause ”);
执行这段代码的时候如果是播放状态就会暂停,暂停状态时就会继续播放。
2、获取播放文件的总时间和当前播放进度
执行下面代码时,Mplayer 将时间在标准输出显示。
process->write("get_time_pos ");
process->write("get_time_length ");
通过如下代码即可读出我们需要的信息:
connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(back_message_slots()));
process 有可读取的信息时,发出信号,在槽函数 back_message_slots()中读取信息。
void MPlayer::back_message_slots()
{
while(process->canReadLine())
{
QString message(process->readLine());
//message 即为读取的信息我们可以根据需要取我们要的信息如
//文件总时间为:ANS_LENGTH=23.00
//当前时间为:ANS_TIME_POSITION=23.00
}
}
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.
下面代码即可实现快进功能:
process->write(“seek ** 1 ”);
4、音量调节
volume <value> [abs]
Increase/decrease volume or set it to <value> if [abs] is nonzero.
下面代码即可实现快进功能:
Process->write(“volume -1 ”); //音量减小
Process->write(“volume +1 ”); //音量增加
5、静音功能
mute [value]
Toggle sound output muting or set it to [value] when [value] >= 0
(1 == on, 0 == off).
下面代码即可实现快进功能:
process->write("mute 0 "); //开启静音
process->write("mute 1 "); //关闭静音
6、定位视频窗口
通过上面的代码基本功能实现了,可是播放视频的时候发现又弹出一个窗口。并没有出现
在我们的窗口里。
如下代码即可时间窗口的定位。
QString common = "mplayer -slave -quiet -ac mad -zoom movie/" + file_name + " -wid " +
QString::number(widget->winId());
process->start(common);
红色部分实现窗口的定位。Widget 是一个 QWidget 对象。通过 winId 可以获得一个数字,-
wid 既将视频输出定位到 widget 窗体部件中。
注意:-wid 参数只在 X11、directX 和 OpenGL 中适用。
四、PC 环境下的实现过程
1、PC 环境搭建
主机环境:Red Hat Enterprise Linux 5.0
交叉编译工具:gcc-3.4.5-glibc-2.3.6
主机编译工具:gcc-4.1.2
(1)主机端安装 mplayer
l 将“项目代码/mplay 源码”目录下的 MPlayer-1.0rc2.tar.bz2、libmad-0.15.1b.tar.gz(1 个
mp3 解码库)拷贝到 linux 系统中,如:/home/linux/mplayer 目录下
l 安装 libmad-0.15.1b.tar.gz
#tar xvfz libmad-0.15.1b.tar.gz
#cd libmad-0.15.1b
#./configure
#make
#mkdir /lib/lib
#mkdir /lib/include
#cp mad.h /lib/include
#cp .libs/libmad.a /lib/lib
l 安装 mplayer
#tar xvfj MPlayer-1.0.rc2.tar.bz2
#cd MPlayer-1.0rc2
#./configure --with-extraincdir=/lib/include --with-extralibdir=/lib/lib
#make
#make install
此时可以试着播放一下 mp3、avi 等文件了
# mplayer -ac mad 1.mp3
# mplayer -ac mad 2.avi
(2)安装、移植 qtopia-4.2.0
注:需要先按照 5.2 节将 tslib 按照好
l 将“项目代码/qtopia 源码”目录下的 qtopia-opensource-src-4.2.0.tar.gz 拷贝到 linux 系统
中,如:/home/linux/Qtopia 目录下
# tar zxvf qtopia-opensource-src-4.2.0.tar.gz
# mv qtopia-opensource-4.2.0 source
# mkdir target //创建在 source 同级目录下创建目录 target
修改源码包
# cd source
# cd src/libraries/qtopiabase/
# cp custom-linux-cassiopeia-g++.h custom-linux-arm-g++.h
# cp custom-linux-cassiopeia-g++.cpp custom-linux-arm-g++.cpp
修改时区信息
# vi src/libraries/qtopia/qtimezone.cpp
将 114 行的 /usr/share/zoneinfo/ 改为/Qtipia/zoneinfo/ ,保存退出。
# vi src/settings/systemtime/settime.cpp
将 318 行的 /usr/share/zoneinfo/ 改为/Qtipia/zoneinfo/ ,保存退出。
l 裁减 Qtopia core 的库(下列操作后在屏幕上会出现一个光标,否则没有光标。根据需
求配置)
# vi qtopiacore/qconfig-qpe.h
首先注释掉关于鼠标光标的宏定义,让程序运行时,触摸屏中央有光标出现:
// Qtopia Core
/*
#ifndef QT_NO_QWS_CURSOR
# define QT_NO_QWS_CURSOR
#endif
*/
/*
#ifndef QT_NO_QWS_MOUSE
# define QT_NO_QWS_MOUSE
#endif
#ifndef QT_NO_QWS_MOUSE_AUTO
# define QT_NO_QWS_MOUSE_AUTO
#endif
*/
其它宏定义根据需要进行注释。
保存后将 qconfig-qpe.h 拷贝到 global 目录。
# cp qtopiacore/qconfig-qpe.h qtopiacore/qt/src/corelib/global/qconfig-qpe.h (必须进行的操作)
注释掉其他文件里的 QT_NO_QWS_CURSOR 的定义
# vi qtopiacore/qt/src/corelib/global/qfeatures.h
注释掉如下内容:
/*
#if !defined(QT_NO_QWS_CURSOR) && (defined(QT_NO_CURSOR))
#define QT_NO_QWS_CURSOR
#endif
剩余19页未读,继续阅读
资源评论
- shuangchongsinian2013-04-11对我写论文有些帮助
- 奔跑的蜗牛20182012-07-12正在测试 应该会不会错吧
a1161310411
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- pta题库答案c语言之排序4统计工龄.zip
- pta题库答案c语言之树结构7堆中的路径.zip
- pta题库答案c语言之树结构3TreeTraversalsAgain.zip
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功