微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Qt:在不创建视频播放器的情况下读取视频尺寸

如何解决Qt:在不创建视频播放器的情况下读取视频尺寸

| 我需要读取给定视频文件的尺寸(宽度和高度),而无需构建像Phonon这样的视频播放器,例如我的问题是我应该使用哪个类来访问此数据。我已经尝试使用Qpixmap和QMovie,但是它们中的任何一个支持* .mov。 谢谢!

解决方法

Pavlo,您可以尝试以下操作:
QMediaContent media(\"myMovie.mov\");
QSize resolution = media.canonicalResource().resolution();
该代码使用Qt Mobility项目中的QMediaResource类。我还没有尝试过,我想您至少需要一个正确的后端(能够读取MOV格式的插件)。我仅从API概述中给出此答案。 希望这可以帮助。,我终于解决了我的问题,我想与所有人共享我的解决方案。 在类构造函数中,我初始化以下两个变量:
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库,而这是在对话框窗口中,用户可以在其中选择要嵌入的视频剪辑,我希望从文件中读取视频尺寸。该对话框窗口打开需要花费一些时间,所以我想这种解决方案对于我的问题来说太苛刻了。但是,我找不到其他解决方案。如果对本帖子的主题有不同的看法,我很高兴听到他们的意见。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。