Есть ли команда для остановки и приостановки mplayer с помощью PId? - PullRequest
5 голосов
/ 02 марта 2011

Я играю в mplayer из моего приложения qt, используя кнопку воспроизведения.У меня есть две кнопки, которые называются пауза и стоп.Для кнопки воспроизведения я использовал system ("mplayer "+s.toAscii()+"&");, где s - список воспроизведения.

Для кнопки паузы я использовал system("p");, но она не работает.Я могу сохранить идентификатор процесса mplayer в текстовом файле, используя system("ps -A |grep mplayer > PID.txt");.

Есть ли какая-нибудь команда для остановки и приостановки mplayer с помощью PId?

Ответы [ 4 ]

7 голосов
/ 02 марта 2011

То, что вам, вероятно, нужно, это подчиненный режим MPlayer ввода, который позволяет легко давать ему команды из другой программы. Вы можете запустить MPlayer в этом режиме, задав ему параметр командной строки -slave при запуске.

В этом режиме 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;
}
0 голосов
/ 25 февраля 2013

Я написал аналогичную программу на QT, которая использует mplayer.Я использовал 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
0 голосов
/ 23 ноября 2012

Да, используйте mplayer в режиме slave.Таким образом, вы можете передавать ему команды из вашей программы.Посмотрите на qmpwidget.Его открытый исходный код и должен решить все ваши проблемы.Для команд проверьте сайт mplayer или найдите команды режима mplayer slave.

0 голосов
/ 02 марта 2011

Не с PID, насколько я знаю.Проверьте ведомый режим (-slave), хотя.От man mplayer:

Включает ведомый режим, в котором MPlayer работает как бэкэнд для других программ.Вместо того, чтобы перехватывать события клавиатуры, MPlayer будет читать команды, разделенные символом новой строки (\ n) из стандартного ввода.

Вы можете отлично управлять этим способом.

...