`
yidongkaifa
  • 浏览: 4063584 次
文章分类
社区版块
存档分类
最新评论

QT控制mplayer .

 
阅读更多

转载来自:http://blog.csdn.net/songjinshi/article/details/6521319

1.MPlayer 的特殊控制模式
MPlayer 本身是一个命令行的程序,但是他提供了有后台模式(Slave),可以把自己输出重定向到一个指定的X Windows窗口中,并且可以通过管道向其发送命令来控制,这样就为GUI程序提供一个简单的编程接口.让其用图形界面来控制.Gnome下的 gmplayer其实就是通过这个方法来在图形界面调用MPlayer.
关于gtk下如何编程控制Mplayer可以参考
http://blog.csdn.net/zhangbinka/archive/2009/07/01/4313057.aspx
关于MPlayer在X86和ARM下如何安装请参考,我的博文
http://blog.chinaunix.net/u3/105675/showart_2101453.html
http://blog.chinaunix.net/u3/105675/showart_2148571.html
本文的重点如何在QT来在GUI控制MPlayer
MPlayer 的特殊用法
1.1 通过管道播放视频
•mkfifo /tmp/media // 建立管道文件
•cat xxx.mpeg > /tmp/media & // 把媒体文件数据写入管道一端
•mplayer /tmp/media –cache 3000 // mplayer在缓充3M数据后开始播放
注意必须建立缓充,以支持读取数据时的小范围索引
本例里没有用这个功能,但是很多LINUX的网络播放器也是用这个方法来这现的.有兴趣可以参考一下gtk-sopcast(http://code.google.com/p/gsopcast/ )这个开源项目,这个软件相信很多人用它的WINDOWS版本看过球.

1.2 slave模式.
slave 播放模式,可以MPlayer在后台执行,并可以通专用的命令管道发送命令来控制MPlayer.
•mkfifo /tmp/cmd
•mplayer -slave -quiet -input file=/tmp/cmd xxx.mpeg &
•使用/tmp/cmd做为命令管道
•echo "pause" > /tmp/cmd
•暂停播放
常用的控制命令可以用如下命令来查看
mplayer –input cmdlist
编程常用到几个命令
•seek Float [Integer] 跳到指定时间播放
•speed_incr Float 快进
•speed_set Float 设置指定时间
•quit [Integer] 退出
•pause 暂停,再一次表示重新播放
•get_percent_pos 取得百分比表示的进度
•get_time_pos 取得时间进度
1.3 在指定的窗口播放Mplayer
MPlayer是默认全屏播放,但在GUI中一般都是指定区域或者控制来播放.这样显得美观,MPlayer支持在指定的X窗口播放的功能.用-wid参数告诉窗口ID即可.
mplayer test.mpg -wid 0x00029 #0x0029是X ID
在对于正在运行图形界面窗口,可以用Linux 命令xwininfo来取到其ID,方法是运行这个程序后.屏幕鼠标变成+,将其拖到指定窗口即可看到其结果。
xwininfo 是X-Windows工具,用来查看已经打开窗口的X-Windows信息。
这是在我机器上运行结果
[root@sowhy hxy]# xwininfo

xwininfo: Please select the window about which you
would like information by clicking the
mouse in that window.

xwininfo: Window id: 0x320001f

Absolute upper-left X: 177
Absolute upper-left Y: 49
Relative upper-left X: 5
Relative upper-left Y: 24
Width: 784
Height: 469
Depth: 24
Visual Class: TrueColor
Border width: 0
Class: InputOutput
Colormap: 0x20 (installed)
Bit Gravity State: NorthWestGravity
Window Gravity State: NorthWestGravity
Backing Store State: NotUseful
Save Under State: no
Map State: IsViewable
Override Redirect State: no
Corners: +177+49 --161+49 --161-82 +177-82
-geometry 59x17+172+25

QT的控件都是从QWidget继承下来,因此它本身也有wid,这样只要用 QWidget::winID() 取出WID,即可实现在指定窗口播放视频的功能。
2.QT控制MPlayer分析
网上一个直接用 QT3的例子控制MPlayer文档.
http://doc.qtfr.org/post/2007/03/21/Un-conteneur-pour-MPlayer-utilisation-de-QProcess
下载
http://doc.qtfr.org/public/2007/qt_mplayer.tar.gz
其原理是建立一个Qt GUI程序。然后用一个frame 控件来播放视屏,用一个进度条显示播放的进度,用按键显播放,暂停。
然后用一个QProcess在后台执行MPlayer,并把Framer的WID传给它。 然后把MPlayer的输入输出重定向,把原本从标准输入接收命令变成从GUI的接收命令。
2.1 QProcess 简要说明
LINUX C用system 执行外部程序
QT是用QProcess(进程类)来执行。创建一个进程后。用start方法来执行.

//执行不带参数的外部命令。
void start ( const QString & program, OpenMode mode = ReadWrite )
//执行带参数
void start ( const QString & program, const QStringList & arguments, OpenMode mode = ReadWrite )

其中arguments就是参数列表。QStringList重定向了 <<,增加参数用这个重载的操作符。
QStringList arg ;
arg << "-wid"<< "0x320001f" <<" -queit" ;
QProcess 用write来实现向标准输入发送信息
readLine/read来读取信息用于分析。
IO重定向使用signal readyReadStandardOutput。
connect(mplayerProcess, SIGNAL(readyReadStandardOutput()),
this, SLOT(catchOutput()));

3.QT4下的实现
0.1 第一个版本。设计基本双窗口框架,能播放视频
0.1.1 参考gmplayer,采用播放窗口与工具栏窗口双窗口机制
0.1.2 播放Mplayer ,使QProcess 执行mplayer,并用-wid参数将其播放到指定窗口
0.1.3 用QFileDialog 来选择打开文件

0.2 增加暂停,全屏切换功能
0.2.1 用QProcess::write()发送 "pause/n"给mplayer实现暂停功能
0.2.2 用一个QCheckbox决定是否全屏播放


0.3 增加视频窗口自动调整大小,时间进度生效
0.3.1 用QProcess::write()发送 "get_video_resolution/n",取视频大小
0.3.2 用QProcess::write()发送 "get_time_length/n",取视频时间长度.

0.3.3 捕获 QProcess::readyReadStandardOutput()信号,把MPlayer标准输出重定向到catchOutput()分析并更新到界面上。

0.3.4 进度条的更新,采用一个定时器,定时发送"get_time_pos/n",取得结果后更新到进度条

0.3.5 拖动进度条,触发sliderMoved信号,将反过来向Mplayer发送 "seek/n"通知其重新定位播放

转载来自:http://blog.csdn.net/songjinshi/article/details/6521319

1.MPlayer 的特殊控制模式
MPlayer 本身是一个命令行的程序,但是他提供了有后台模式(Slave),可以把自己输出重定向到一个指定的X Windows窗口中,并且可以通过管道向其发送命令来控制,这样就为GUI程序提供一个简单的编程接口.让其用图形界面来控制.Gnome下的 gmplayer其实就是通过这个方法来在图形界面调用MPlayer.
关于gtk下如何编程控制Mplayer可以参考
http://blog.csdn.net/zhangbinka/archive/2009/07/01/4313057.aspx
关于MPlayer在X86和ARM下如何安装请参考,我的博文
http://blog.chinaunix.net/u3/105675/showart_2101453.html
http://blog.chinaunix.net/u3/105675/showart_2148571.html
本文的重点如何在QT来在GUI控制MPlayer
MPlayer 的特殊用法
1.1 通过管道播放视频
•mkfifo /tmp/media // 建立管道文件
•cat xxx.mpeg > /tmp/media & // 把媒体文件数据写入管道一端
•mplayer /tmp/media –cache 3000 // mplayer在缓充3M数据后开始播放
注意必须建立缓充,以支持读取数据时的小范围索引
本例里没有用这个功能,但是很多LINUX的网络播放器也是用这个方法来这现的.有兴趣可以参考一下gtk-sopcast(http://code.google.com/p/gsopcast/ )这个开源项目,这个软件相信很多人用它的WINDOWS版本看过球.

1.2 slave模式.
slave 播放模式,可以MPlayer在后台执行,并可以通专用的命令管道发送命令来控制MPlayer.
•mkfifo /tmp/cmd
•mplayer -slave -quiet -input file=/tmp/cmd xxx.mpeg &
•使用/tmp/cmd做为命令管道
•echo "pause" > /tmp/cmd
•暂停播放
常用的控制命令可以用如下命令来查看
mplayer –input cmdlist
编程常用到几个命令
•seek Float [Integer] 跳到指定时间播放
•speed_incr Float 快进
•speed_set Float 设置指定时间
•quit [Integer] 退出
•pause 暂停,再一次表示重新播放
•get_percent_pos 取得百分比表示的进度
•get_time_pos 取得时间进度
1.3 在指定的窗口播放Mplayer
MPlayer是默认全屏播放,但在GUI中一般都是指定区域或者控制来播放.这样显得美观,MPlayer支持在指定的X窗口播放的功能.用-wid参数告诉窗口ID即可.
mplayer test.mpg -wid 0x00029 #0x0029是X ID
在对于正在运行图形界面窗口,可以用Linux 命令xwininfo来取到其ID,方法是运行这个程序后.屏幕鼠标变成+,将其拖到指定窗口即可看到其结果。
xwininfo 是X-Windows工具,用来查看已经打开窗口的X-Windows信息。
这是在我机器上运行结果
[root@sowhy hxy]# xwininfo

xwininfo: Please select the window about which you
would like information by clicking the
mouse in that window.

xwininfo: Window id: 0x320001f

Absolute upper-left X: 177
Absolute upper-left Y: 49
Relative upper-left X: 5
Relative upper-left Y: 24
Width: 784
Height: 469
Depth: 24
Visual Class: TrueColor
Border width: 0
Class: InputOutput
Colormap: 0x20 (installed)
Bit Gravity State: NorthWestGravity
Window Gravity State: NorthWestGravity
Backing Store State: NotUseful
Save Under State: no
Map State: IsViewable
Override Redirect State: no
Corners: +177+49 --161+49 --161-82 +177-82
-geometry 59x17+172+25

QT的控件都是从QWidget继承下来,因此它本身也有wid,这样只要用 QWidget::winID() 取出WID,即可实现在指定窗口播放视频的功能。
2.QT控制MPlayer分析
网上一个直接用 QT3的例子控制MPlayer文档.
http://doc.qtfr.org/post/2007/03/21/Un-conteneur-pour-MPlayer-utilisation-de-QProcess
下载
http://doc.qtfr.org/public/2007/qt_mplayer.tar.gz
其原理是建立一个Qt GUI程序。然后用一个frame 控件来播放视屏,用一个进度条显示播放的进度,用按键显播放,暂停。
然后用一个QProcess在后台执行MPlayer,并把Framer的WID传给它。 然后把MPlayer的输入输出重定向,把原本从标准输入接收命令变成从GUI的接收命令。
2.1 QProcess 简要说明
LINUX C用system 执行外部程序
QT是用QProcess(进程类)来执行。创建一个进程后。用start方法来执行.

//执行不带参数的外部命令。
void start ( const QString & program, OpenMode mode = ReadWrite )
//执行带参数
void start ( const QString & program, const QStringList & arguments, OpenMode mode = ReadWrite )

其中arguments就是参数列表。QStringList重定向了 <<,增加参数用这个重载的操作符。
QStringList arg ;
arg << "-wid"<< "0x320001f" <<" -queit" ;
QProcess 用write来实现向标准输入发送信息
readLine/read来读取信息用于分析。
IO重定向使用signal readyReadStandardOutput。
connect(mplayerProcess, SIGNAL(readyReadStandardOutput()),
this, SLOT(catchOutput()));

3.QT4下的实现
0.1 第一个版本。设计基本双窗口框架,能播放视频
0.1.1 参考gmplayer,采用播放窗口与工具栏窗口双窗口机制
0.1.2 播放Mplayer ,使QProcess 执行mplayer,并用-wid参数将其播放到指定窗口
0.1.3 用QFileDialog 来选择打开文件

0.2 增加暂停,全屏切换功能
0.2.1 用QProcess::write()发送 "pause/n"给mplayer实现暂停功能
0.2.2 用一个QCheckbox决定是否全屏播放


0.3 增加视频窗口自动调整大小,时间进度生效
0.3.1 用QProcess::write()发送 "get_video_resolution/n",取视频大小
0.3.2 用QProcess::write()发送 "get_time_length/n",取视频时间长度.

0.3.3 捕获 QProcess::readyReadStandardOutput()信号,把MPlayer标准输出重定向到catchOutput()分析并更新到界面上。

0.3.4 进度条的更新,采用一个定时器,定时发送"get_time_pos/n",取得结果后更新到进度条

0.3.5 拖动进度条,触发sliderMoved信号,将反过来向Mplayer发送 "seek/n"通知其重新定位播放

分享到:
评论

相关推荐

    Qt资料\Qt4编程的控制MPlayer.doc

    Qt资料\Qt4编程的控制MPlayer.doc

    vo_qt.cpp.tar.gz_mplayer_mplayer vo_qt_pudn mplayer vo_qt_qt 共享内

    为mplayer写的一个新的VO,使用QT的Qimage, 使用信号量控制共享内存的传输。

    qt-mplayer前端界面

    qt编写的mplayer播放器前端界面,包括console-version的mplayer执行文件,利用qt源代码编译前端界面,可实现界面控制播放器功能,此代码按readme介绍编译,可比较容易生成界面,QT开发环境为WIN XP下。LINUX下没有...

    网络本地点播系统(linux下QT做的mplayer

    自己在linux下用QT做的mplayer,包含可执行文件和代码; 实现的功能有播放,暂停,停止,上下首,播放列表隐藏,网络播放(ftp下的资源),界面个人觉得做的还不错。由于在虚拟机下声音控制没有效果,所以没有添加...

    mplayer使用手册中文pdf

    mplayer的中文使用手册pdf 说明 mplayer 是一个LINUX下的电影播放器, (也能运行在许多其它的Unices 和 非x86 的CPU 上, 参看文档)....gmplayer 是使用图形用户界面的MPlayer. 它使用跟MPlayer相同的参数.

    Mplayer for windows

    windows平台命令行控制的mplayer,可用于Qt视频软件开发调用,内附命令使用方法

    基于MPlayer的KTV系统实现

    MPlayer是一款提供外部控制接口的播放器,解码格式全面,而且免费开源,通过进程间通信就可以进行多媒体的开发,非常好用,主要通过它的slave模式编程,但是我开发的时候似乎到了切换播放文件会崩溃

    ARM和QT的视频播放器(文档资源)

    这个系统的控制核心为ARM-linux,音视频文件通过ARM芯片控制移植到嵌入式系统的Mplayer进行软解码,图形界面通过Qt creator 进行设计,最后以Qprocess为核心编写应用程序,控制触屏多媒体播放器的各项播放功能,整个...

    Remote mPlayer-开源

    新IR支持,新主题。 “远程mPlayer”是图形控制器。 不是司机! 远程播放器打开,并在模式TNT中将“ dvb:// channel”发送到mPlayer。 您拥有一个更改频道的zapper :)使用Monkey Studio和QT4编写

    TQMp3Player

    TQMp3Player 是qt使用管道技术控制mplayer的demo,对了解如何控制mplaer播放器有一定的参考作用

    嵌入式Linux程序设计案例与实验教程-实例代码

    7.4.3 CAN控制器驱动184 实验7.4 CAN总线实验186 第8章 嵌入式系统硬件设计基础与标准189 8.1 嵌入式系统的硬件组成189 8.1.1 嵌入式微处理器189 8.1.2 存储器189 8.1.3 输入/输出设备191 8.1.4 通信...

    嵌入式Linux程序设计案例与实验教程(配套光盘)第三部分

    7.4.3 CAN控制器驱动184 实验7.4 CAN总线实验186 第8章 嵌入式系统硬件设计基础与标准189 8.1 嵌入式系统的硬件组成189 8.1.1 嵌入式微处理器189 8.1.2 存储器189 8.1.3 输入/输出设备191 8.1.4 通信与扩展...

    嵌入式Linux程序设计案例与实验教程(配套光盘)第二部分

    7.4.3 CAN控制器驱动184 实验7.4 CAN总线实验186 第8章 嵌入式系统硬件设计基础与标准189 8.1 嵌入式系统的硬件组成189 8.1.1 嵌入式微处理器189 8.1.2 存储器189 8.1.3 输入/输出设备191 8.1.4 通信与扩展...

    嵌入式Linux程序设计案例与实验教程(配套光盘)第一部分

    7.4.3 CAN控制器驱动184 实验7.4 CAN总线实验186 第8章 嵌入式系统硬件设计基础与标准189 8.1 嵌入式系统的硬件组成189 8.1.1 嵌入式微处理器189 8.1.2 存储器189 8.1.3 输入/输出设备191 8.1.4 通信与扩展...

    毕业设计-播放器开发设计

    这是一款基于ARM11的音频播放器,前台界面用QT进行开发与设计,后台利用mplayer进行控制音频文件的播放,界面美观,功能齐全,并且可以移植到开发板上进行播放调试。对于嵌入式专业的学生来说是个不错的学习资料。

Global site tag (gtag.js) - Google Analytics