我想做的是在某个时间(例如20秒)获取视频帧。我知道我可以做这样的事情-倒带视频并暂停它:
QMediaPlayer* player = new QMediaPlayer;
...
player->play();
player->setPosition(20000);
player->pause();
Run Code Online (Sandbox Code Playgroud)
但是,是否有一些更优雅的解决方案(对我来说这似乎是一个hack,因为我不需要整个视频,而有时只需要一帧)?
我想保存一个帧的图像QMediaPlayer.阅读文档后,我明白我应该使用QVideoProbe.我使用以下代码:
QMediaPlayer *player = new QMediaPlayer();
QVideoProbe *probe = new QVideoProbe;
connect(probe, SIGNAL(videoFrameProbed(QVideoFrame)), this, SLOT(processFrame(QVideoFrame)));
qDebug()<<probe->setSource(player); // Returns true, hopefully.
player->setVideoOutput(myVideoSurface);
player->setMedia(QUrl::fromLocalFile("observation.mp4"));
player->play(); // Start receving frames as they get presented to myVideoSurface
Run Code Online (Sandbox Code Playgroud)
但不幸的是,probe->setSource(player)总是false为我返回,因此我的插槽processFrame不会被触发.
我究竟做错了什么 ?有没有人有一个工作的例子QVideoProbe?