这应该是简单的,但我无法弄清楚这一点.如何获取加载到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.
}
Run Code Online (Sandbox Code Playgroud)
从理论上讲,有两种方法可以获得这些信息:
通过QMediaPlayer::metaData
使用密钥,Resolution
您应该得到如下解决方案QSize
:
if (m_MediaPLayer->isMetaDataAvailable()) {
qDebug() <<"resolution:" <<m_MediaPLayer->metaData("Resolution");
}
Run Code Online (Sandbox Code Playgroud)使用QMediaResource.resolution()
哪个也返回QSize
:
qDebug() << "resolution:" << m_MediaPLayer->media().canonicalResource().resolution();
Run Code Online (Sandbox Code Playgroud)但是,在这两种情况下,它都会-1,-1
为我返回我尝试的两个视频(一个avi和一个mp4).
关于这个问题有一些旧的Qt线程:获得视频文件的分辨率,并且QMediaPlayer分辨率返回(-1x-1).虽然给出了一些解决方案,但没有一个对我有用,事实上有一个错误报告:
QTBUG-28850 - QMediaResource不返回媒体信息
这仍然是开放的.
一些相关问题:
最后一个问题的答案建议使用MediaInfo,其中包含可以提取视频元数据的库.
归档时间: |
|
查看次数: |
1431 次 |
最近记录: |