我需要阅读给定视频文件的尺寸(宽度和高度),而不需要像Phonon那样构建视频播放器,例如:我的问题是我应该使用哪个类来访问这些数据。我已经尝试过使用QPixmap和QMovie,但是其中没有一个支持* .mov。
谢谢!
答案 0 :(得分:2)
QMediaContent media("myMovie.mov");
QSize resolution = media.canonicalResource().resolution();
代码使用QMediaResource项目中的Qt Mobility类。我还没有尝试过,我想你至少需要一个正确的后端(能够读取MOV格式的插件)。我只是从API概述中给出了这个答案。
希望这有帮助。
答案 1 :(得分:0)
我终于解决了我的问题,我想我会与其他人分享我的解决方案。 在类构造函数中,我初始化以下两个变量:
media = new Phonon::MediaObject(this);
videoWidget = new Phonon::VideoWidget;
我将media
的信号连接到班级的一个插槽:
connect(media,SIGNAL(stateChanged(Phonon::State,Phonon::State)),
this,SLOT(videoState(Phonon::State,Phonon::State)));
我让用户选择一个视频文件:
QString filename = QFileDialog::getOpenFileName(this,tr("Choose video file"),QDir().homePath(),tr("Video files (*.mov *.mpg *.avi)"));
将此文件应用于media
对象:
media->setCurrentSource(filename);
Phonon::createPath(media,videoWidget);
由于media
对象已连接到广告位,因此media
中的每次更改都可以在其帮助下进行监控。
void VideoModuleDialog::videoState(Phonon::State newState, Phonon::State oldState)
{
if(newState == Phonon::PlayingState || newState == Phonon::StoppedState)
{
width->setText(QString().number(videoWidget->sizeHint().width()));
height->setText(QString().number(videoWidget->sizeHint().height()));
}
if(newState == Phonon::ErrorState)
{
QMessageBox::critical(this,tr("Video file error!"),
tr("Video file error: ") + media->errorString(),QMessageBox::Ok);
}
}
但是,我必须承认,这段代码对我来说似乎很慢。 Phonon库只在一个地方用于我的程序,就在这里,在一个对话窗口中,用户可以选择要嵌入的视频片段,我希望从文件中读取视频尺寸。这个对话框窗口打开需要一些时间,所以我想,这个解决方案对我的问题来说有点过于苛刻了。但是,我无法找到其他解决方案。如果对这篇文章的主题有不同的看法,我很高兴听到它们。