5

再生ボタンを使用して、qt アプリケーションから mplayer を再生しています。一時停止と停止という 2 つのボタンがあります。再生ボタンには、プレイリストの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 は標準の入力バインドを無視し、代わりに改行で区切って一度に 1 つずつ送信できるテキスト コマンドの異なる語彙を受け入れます。サポートされているコマンドの完全なリストについては、 を実行してmplayer -input cmdlistください。

質問に Qt のタグを付けたので、C++ を使用していると仮定します。MPlayer のスレーブ モードの使用方法を示す C のサンプル プログラムを次に示します。

#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

私の知る限り、PIDはありません。ただし、スレーブモード(-slave)を確認してください。man mplayerから:

MPlayerが他のプログラムのバックエンドとして機能するスレーブモードをオンにします。MPlayerは、キーボードイベントをインターセプトする代わりに、改行(\ n)で区切られたコマンドをstdinから読み取ります。

あなたはそれをそのように完全に制御することができます。

于 2011-03-02T06:50:09.817 に答える
0

mplayer を使用する同様のプログラムを QT で作成しました。QProcess を使用して mplayer を制御しました。

これがコードの一部です。関数 playstop() では、「q」を送信するだけで mplayer が存在します。"p" を送信すると mplayer が一時停止します。

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
于 2013-02-25T12:03:29.607 に答える
0

はい、スレーブモードで mplayer を使用します。そうすれば、プログラムからコマンドを渡すことができます。qmpwidget を見てください。オープンソースであり、すべての問題を解決するはずです。コマンドについては、mplayer サイトを確認するか、mplayer スレーブ モード コマンドを検索してください。

于 2012-11-22T20:51:03.223 に答える