omxplayer выходит с задержкой 15 с при запуске с использованием QProcess - PullRequest
0 голосов
/ 12 июня 2018

В моем Qt5.9.2 под RPi3 я запускаю omxplayer следующим образом:

QProcess *_omx = new QProcess(this);

void MyQPlayer::play(QString uri)
{
    QStringList args;
    args << "-o" << "0" << "-i" << "0";
    args << "omxplayer";
    args << "--vol=-6000";
    args << "-I" << "-s";
    args << "-o" << "hdmi" << uri;
    _omx->start("stdbuf", args, QProcess::Unbuffered | QProcess::ReadWrite);
}

Мне нужно использовать stdbuf, чтобы избежать буферизации, иначе я не могу прочитать в режиме реального времени выводиз приложения.

Когда видео заканчивается, omxplayer должен немедленно завершиться - и это происходит, когда я запускаю его из командной строки:

$ stdbuf -o 0 -i 0 omxplayer --vol=6000 -I -s -o hdmi myfile.mp4

Вместо этого при запуске из моего приложения, как тольковидео закончилось, оно остается в исполнении около 15 секунд до выхода.Я улавливаю сигнал finished(), и он подтверждает, что он успешно завершен: код выхода = 0 и состояние выхода = NormalExits.

Я не уверен, полезна ли эта другая информация или это совсем другая проблема, но я сообщаюздесь в любом случае.Чтобы приостановить видео, я отправляю по каналу букву 'p':

void MyPlayer::pause()
{
    qDebug() << "toggle pause";
    if (_omx->state() == QProcess::Running)
    {
        _omx->write("p");
    }
}

отладочный отпечаток говорит мне, что функция на самом деле вызывается каждый раз, когда я вызываю функцию, но часто мне нужно вызывать ее несколько разчтобы фактически приостановить или возобновить выполнение видео.

Это не должно быть проблемой с буферизацией, потому что моя командная строка должна избежать этого.

...