这应该很简单,但我无法弄清楚。如何获取加载到 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.
}
最佳答案
理论上有两种方法可以获取这些信息:
QMediaPlayer::metaData
使用 key Resolution
你应该得到的分辨率为 QSize
:if (m_MediaPLayer->isMetaDataAvailable()) {
qDebug() <<"resolution:" <<m_MediaPLayer->metaData("Resolution");
}
QMediaResource.resolution()
它还返回一个 QSize
:qDebug() << "resolution:" << m_MediaPLayer->media().canonicalResource().resolution();
但是,在这两种情况下,它都会返回
-1,-1
对于我尝试过的两个视频(一个 avi 和一个 mp4)。有一些关于这个问题的旧 Qt 线程:get resolution of a video file , 和 QMediaPlayer resolution returns (-1x-1) .虽然给出了一些解决方案,但没有一个对我有用,实际上还有一个 bug report这个的:
QTBUG-28850 - QMediaResource returns no media info
这仍然是开放的。
一些相关问题:
安 answer in the last question建议使用 MediaInfo ,其中包含可以提取视频元数据的库。
我期待 OpenCV能够做到这一点,但是这个 is not the case .
关于QT:在 QVideoWidget 中获取视频尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34895328/