当使用QProcess启动时,omxplayer以15秒的延迟退出

时间:2018-06-12 13:54:20

标签: c++ qt qt5 qprocess omxplayer

在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");
    }
}

调试打印告诉我每次调用函数时实际调用该函数,但我经常需要多次调用它来实际暂停或恢复视频执行。

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

0 个答案:

没有答案