5

我正在使用播放按钮从我的 qt 应用程序播放 mplayer。我有两个按钮叫做暂停和停止。对于播放按钮,我使用了播放列表system ("mplayer "+s.toAscii()+"&");在哪里s

对于我使用的暂停按钮,system("p");但它不起作用。我可以将 mplayer 的进程 ID 存储到一个文本文件中system("ps -A |grep mplayer > PID.txt");

有没有使用 PId 停止和暂停 mplayer 的命令?

4

4 回答 4

9

你可能想要的是 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;
}
于 2011-03-02T07:14:48.697 回答
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
于 2013-02-25T12:03:29.607 回答
0

据我所知,没有PID。不过,请查看从属模式(-slave)。来自 man mplayer:

开启从模式,MPlayer 作为其他程序的后端。MPlayer 不会拦截键盘事件,而是从标准输入读取由换行符 (\n) 分隔的命令。

你可以通过这种方式完美控制它。

于 2011-03-02T06:50:09.817 回答
0

是的,在从属模式下使用 mplayer。这样你就可以从你的程序向它传递命令。看看 qmpwidget。它是开源的,应该可以解决您所有的麻烦。对于命令检查 mplayer 站点或搜索 mplayer 从模式命令。

于 2012-11-22T20:51:03.223 回答