这应该是很简单的事情,但我想不出来。如何获得加载到QVideoWidget/QMediaPlayer中的文件的视频尺寸。因此,我的代码如下:
QMediaPlayer m_MediaPLayer(0, QMediaPlayer::VideoSurface);
m_VideoWidget = new QVideoWidget;
m_MediaPLayer.setVideoOutput(m_VideoWidget);
m_MediaPLayer.setMedia(QUrl::fromLocalFile("file.avi"));
m_MediaPLayer.play();
// I am here checking for media status changed event
connect(&m_MediaPLayer, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),
this, SLOT(mediaStatusChanged(QMediaPlayer::MediaStatus)));
void MyClass::mediaStatusChanged(QMediaPlayer::MediaStatus status)
{
// Here I get notification for media status change but no idea how to
// get the video size. I could not figure out a way.
}发布于 2016-01-20 10:48:40
理论上,有两种方法可以获得这些信息:
QMediaPlayer::metaData,使用键Resolution,您应该以QSize的形式获得分辨率:
如果(m_MediaPLayer->isMetaDataAvailable()) { qDebug() <<“解析:<元数据(”Resolution“);}QMediaResource.resolution(),它还返回一个QSize:
qDebug() <<“决议:”<< <<“但是,在这两种情况下,它都会为我返回两个我尝试过的视频的-1,-1 (一个avi和一个mp4)。
关于这个问题,有一些老的Qt线程:获取视频文件的分辨率和QMediaPlayer分辨率返回(-1x-1)。虽然给出了一些解决方案,但没有一个对我有用,实际上存在这样一个错误报告:
28850- QMediaResource不返回任何媒体信息
还开着呢。
一些相关问题:
最后一个问题的答案建议使用MediaInfo,其中包含可以提取视频元数据的库。
我希望OpenCV能够做到这一点,但是这个不是这样的。
发布于 2017-07-25 15:26:07
我用QGraphicsView + QGraphicsVideoItem代替QGraphicsView+QGraphicsVideoItem解决了这个问题。QGraphicsVideoItem具有nativeSize属性。但棘手的是,nativeSize只有在你开始播放视频一段时间后才会生效。诀窍是连接到特殊的QGraphicsVideoItem::nativeSizeChanged(const QSizeF &size)信号,发出的情况下,真正的nativeSize获取。
代码示例:
m_player.setVideoOutput(&m_graphicsItem); // m_player is QMediaPlayer
ui->videoView->setScene(new QGraphicsScene); // videoView is QGraphicsView
ui->videoView->scene()->addItem(&m_graphicsItem);
connect(&m_graphicsItem, &QGraphicsVideoItem::nativeSizeChanged, this, &MainWindow::calcVideoFactor);https://stackoverflow.com/questions/34895328
复制相似问题