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