В моем 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");
}
}
отладочный отпечаток говорит мне, что функция на самом деле вызывается каждый раз, когда я вызываю функцию, но часто мне нужно вызывать ее несколько разчтобы фактически приостановить или возобновить выполнение видео.
Это не должно быть проблемой с буферизацией, потому что моя командная строка должна избежать этого.