我正在使用播放按钮从我的qt应用程序中播放mplayer。我有两个叫做暂停和停止的按钮。对于播放按钮,我使用了system ("mplayer "+s.toAscii()+"&");
,其中s
是播放列表。
对于暂停按钮,我使用system("p");
但它无效。我可以使用system("ps -A |grep mplayer > PID.txt");
将mplayer的进程ID存储到文本文件中。
是否有任何命令可以使用PId停止和暂停mplayer?
答案 0 :(得分:7)
您可能想要的是MPlayer的从模式输入,这使得从其他程序轻松提供命令。您可以通过在启动时为其提供-slave
命令行选项来启动MPlayer。
在此模式下,MPlayer忽略其标准输入绑定,而是接受不同的文本命令词汇表,这些命令可以一次一个地用换行符分隔。有关支持的完整命令列表,请运行mplayer -input cmdlist
。
由于您已将问题标记为Qt,因此我假设您使用的是C ++。这是C中的一个示例程序,演示了如何使用MPlayer的从属模式:
#include <stdio.h>
#include <unistd.h>
int main()
{
FILE* pipe;
int i;
/* Open mplayer as a child process, granting us write access to its input */
pipe = popen("mplayer -slave 'your_audio_file_here.mp3'", "w");
/* Play around a little */
for (i = 0; i < 6; i++)
{
sleep(1);
fputs("pause\n", pipe);
fflush(pipe);
}
/* Let mplayer finish, then close the pipe */
pclose(pipe);
return 0;
}
答案 1 :(得分:0)
据我所知,没有PID。检查奴隶模式(-slave)虽然。来自man mplayer:
打开从属模式,其中MPlayer作为其他程序的后端。 MPlayer不会拦截键盘事件,而是从stdin读取由换行符(\ n)分隔的命令。
你可以这样完美地控制它。
答案 2 :(得分:0)
是在奴隶模式下使用mplayer。这样您就可以从程序中将命令传递给它。看看qmpwidget。它的开源,应该解决你所有的麻烦。对于命令,请检查mplayer站点或搜索mplayer slave模式命令。
答案 3 :(得分:0)
我在QT中编写了一个使用mplayer的类似程序。我使用QProcess来控制mplayer。
以下是代码的某些部分。在函数playstop()中,你只需发送“q”,它就存在于mplayer中。如果你发送“p”它将暂停mplayer.I希望它对你有用。
Main.h
#ifndef MAIN_H
#define MAIN_H
#include "process.h"
class Main : public QMainWindow
{
public:
Process m_pProcess1;
Q_OBJECT
public:
Main():QMainWindow(),m_pProcess1()
{
};
~Main()
{};
public slots:
void play()
{
m_pProcess1.setProcessChannelMode(QProcess::MergedChannels);
m_pProcess1.start("mplayer -geometry 0:0 -vf scale=256:204 -noborder -af scaletempo /root/Desktop/spiderman.flv");
};
void playstop()
{
m_pProcess1.setProcessChannelMode(QProcess::MergedChannels);
m_pProcess1.writeData("q",1);
};
};
#endif