2011-04-19 2 views

답변

1

파블로, 당신이 시도 할 수 있습니다 :

QMediaContent media("myMovie.mov"); 
QSize resolution = media.canonicalResource().resolution(); 

코드는 Qt Mobility 프로젝트에서 QMediaResource 클래스를 사용합니다. 나는 아직 그것을 시도하지 않았고 적어도 올바른 백엔드 (MOV 형식을 읽을 수있는 플러그인)가 필요하다고 가정합니다. 이 개요는 API 개요에서만 제공합니다.

희망이 도움이됩니다.

+0

답장을 보내 주셔서 감사합니다. 나는 그것을 구현하고 작동하는지 알려주지. –

+0

Qt Modility를 사용하지 않았습니다. 왜냐하면 저와 제 코드를 프로그래밍하는 다른 모든 사람들을 위해 추가 다운로드가 필요할 것이기 때문입니다. 나는 기본 Qt 설치를 고수하고 다른 솔루션을 발견했다. 관심이 있다면 아래에서 찾을 수있다. 어쨌든 도와 주셔서 감사합니다! –

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 라이브러리는 내 프로그램에서 한 곳에서만 사용됩니다.이 라이브러리는 사용자가 포함 할 비디오 클립을 선택할 수있는 대화 상자 창에 있으며 여기에서 파일에서 비디오 크기를 읽을 수 있습니다. 이 대화 상자 창이 열릴 때까지 약간의 시간이 걸리므로,이 솔루션은 제 문제에 너무 가혹합니다. 그러나 다른 솔루션을 찾을 수 없었습니다. 이 게시물의 주제와 관련하여 의견이 다를 경우이를 듣게되어 기쁩니다.