- 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版本看过球.
- mkfifo /tmp/cmd
- mplayer -slave -quiet -input file=/tmp/cmd xxx.mpeg &
- 使用/tmp/cmd做为命令管道
- echo "pause" > /tmp/cmd
- 暂停播放
- seek Float [Integer] 跳到指定时间播放
- speed_incr Float 快进
- speed_set Float 设置指定时间
- quit [Integer] 退出
- pause 暂停,再一次表示重新播放
- get_percent_pos 取得百分比表示的进度
- get_time_pos 取得时间进度
这是在我机器上运行结果
[root@sowhy hxy]# xwininfo xwininfo: Please select the window about which you xwininfo: Window id: 0x320001f Absolute upper-left X: 177 |
QT是用QProcess(进程类)来执行。创建一个进程后。用start方法来执行.
//执行不带参数的外部命令。
void start ( const QString & program, OpenMode mode = ReadWrite )
//执行带参数
void start ( const QString & program, const QStringList & arguments, OpenMode mode = ReadWrite )
其中arguments就是参数列表。QStringList重定向了 <<,增加参数用这个重载的操作符。
arg << "-wid"<< "0x320001f" <<" -queit" ;
readLine/read来读取信息用于分析。
IO重定向使用signal readyReadStandardOutput。
connect(mplayerProcess, SIGNAL(readyReadStandardOutput()),
this, SLOT(catchOutput()));
0.2 增加暂停,全屏切换功能
0.2.1 用QProcess::write()发送 "pause/n"给mplayer实现暂停功能
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://hi.baidu.com/icwolf/blog/item/b643b12e99a3ec341f308992.html