0

在 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 和退出状态 = NormalExits。

我不确定这些其他信息是否有用或完全是另一个问题,但我还是在这里报告。要暂停视频,我在管道上发送字母“p”:

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

调试打印告诉我每次调用该函数时都会调用该函数,但通常我需要多次调用它才能真正暂停或恢复视频执行。

缓冲应该不是问题,因为我的命令行应该避免这种情况。

4

0 回答 0