在RPi3下的我的Qt5.9.2中,我按以下方式启动了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并退出状态=正常退出。
我不确定这些其他信息是否有用或完全是另一个问题,但无论如何我都在这里报告。 要暂停视频,我在管道上发送字母'p':
void MyPlayer::pause()
{
qDebug() << "toggle pause";
if (_omx->state() == QProcess::Running)
{
_omx->write("p");
}
}
调试打印告诉我每次调用函数时实际调用该函数,但我经常需要多次调用它来实际暂停或恢复视频执行。
这不应该是缓冲问题,因为我的命令行应该避免这种情况。