我正在使用播放按钮从我的 qt 应用程序播放 mplayer。我有两个按钮叫做暂停和停止。对于播放按钮,我使用了播放列表system ("mplayer "+s.toAscii()+"&");
在哪里s
。
对于我使用的暂停按钮,system("p");
但它不起作用。我可以将 mplayer 的进程 ID 存储到一个文本文件中system("ps -A |grep mplayer > PID.txt");
。
有没有使用 PId 停止和暂停 mplayer 的命令?
你可能想要的是 MPlayer 的从属输入模式,它可以很容易地从另一个程序给它命令。您可以通过在启动 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;
}
我在 QT 中编写了一个类似的程序,它使用 mplayer。我使用 QProcess 来控制 mplayer。
这是代码的一部分。在函数 playstop() 中,您只需发送“q”,它就存在 mplayer。如果你发送“p”它将暂停mplayer。我希望它对你有用。
主文件
#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
据我所知,没有PID。不过,请查看从属模式(-slave)。来自 man mplayer:
开启从模式,MPlayer 作为其他程序的后端。MPlayer 不会拦截键盘事件,而是从标准输入读取由换行符 (\n) 分隔的命令。
你可以通过这种方式完美控制它。
是的,在从属模式下使用 mplayer。这样你就可以从你的程序向它传递命令。看看 qmpwidget。它是开源的,应该可以解决您所有的麻烦。对于命令检查 mplayer 站点或搜索 mplayer 从模式命令。