这似乎太简单了,我一定是在忽视什么?
如何从QMediaPlayer
显示的视频文件中找到原始视频大小或宽高比?
视频分辨率,PixelAspectRatio等应该在MetaData中,但我等待MetaData更新信号,并在视频.play()
之后等待几秒钟,但isMetaDataAvailable()
总是返回false, .availableMetaData()
和.metaData(QMediaMetaData::Resolution).toSize()
始终为空。
似乎没有其他地方可以获取视频分辨率信息,或者我错过了什么?
我可以打开视频,全屏播放视频等。
答案 0 :(得分:1)
您可以使用QVideoWidget实例作为QMediaPlayer
的视频输出,并从QVideoWidget :: sizeHint检索本机视频大小。
QSize MyVideoPlayer::getVideoNativeSize(const QString& videoFilePath)
{
m_mediaPlayer = new QMediaPlayer(0, QMediaPlayer::VideoSurface);
m_mediaPlayer->setVideoOutput(m_videoWidget);
m_mediaPlayer->setMedia(QUrl::fromLocalFile(videoFilePath));
connect(m_mediaPlayer, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),
this, SLOT(OnMediaStatusChanged(QMediaPlayer::MediaStatus)));
m_isStoppingVideo = false;
QEventLoop loop;
m_mediaPlayer->play();
while (!m_isStoppingVideo)
{
loop.processEvents();
}
disconnect(m_mediaPlayer, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),
this, SLOT(OnMediaStatusChanged(QMediaPlayer::MediaStatus)));
m_mediaPlayer->stop();
return m_videoWidget->sizeHint();
}
void MyVideoPlayer::OnMediaStatusChanged(QMediaPlayer::MediaStatus mediaStatus)
{
if (mediaStatus == QMediaPlayer::BufferedMedia)
{
m_isStoppingVideo = true;
}
}
答案 1 :(得分:0)
要查找没有元数据的分辨率,您可以从Qt论坛查看这个问题,寻找可能的解决方案:
http://forum.qt.io/topic/31278/solved-get-resolution-of-a-video-file-40-qmediaplayer-41/2
我通过等待用户播放视频来解决我的问题 他们这样做我得到QGraphicsVideoItems类属性: nativeSize。
答案 2 :(得分:0)
我还使用QGraphicsVideoItem
s nativeSize
属性解决了这个问题。但棘手的是,nativeSize
仅在您开始播放视频一段时间后才会生效。诀窍是连接到获得真正QGraphicsVideoItem::nativeSizeChanged(const QSizeF &size)
时发出的特殊nativeSize
信号。