2012-03-03 30 views
2

我想獲得視頻的比特率。我使用Qt Phonon來實現這個目標。 由於存在一個名爲Phonon :: MediaObject的類並提供了一個名爲metaData()的方法,我使用該方法,但結果顯示爲零。這裏是我的代碼,我不知道爲什麼,我怎麼能得到元數據,如比特率在QT與聲子如何使用Qt聲子獲得視頻元數據?

QString source="E:\\sh.mp4"; 
    Phonon::MediaObject media; 
    media.setCurrentSource(Phonon::MediaSource(source)); 
    QMap <QString, QString> metaData = media.metaData(); 
    int trackBitrate = metaData.value("bitrate").toInt(); 
    qDebug()<<trackBitrate; 

結果是0所有的時間

+0

你嘗試傾倒所有鍵/值從地圖上看到它實際上包含了? – Mat 2012-03-03 08:48:37

+0

地圖的大小是0 ...我不知道爲什麼。 – Himiko 2012-03-03 08:59:15

回答

2

我只是想出了自己。

  1. 視頻文件中的元數據不包含比特率。它只包含有關媒體的額外信息,對播放沒有任何影響。因此,即使Phonon :: MediaObject :: metaData()在未加載視頻的情況下工作,它也不會對您有所幫助。

  2. 我結束了使用libformat,ffmpeg庫的一部分來獲得比特率。這是代碼。

如果您複製並粘貼,它應該工作。

下載FFmpeg的位置:http://dranger.com/ffmpeg/tutorial01.html 這第一個教程將告訴你如何鏈接:http://dranger.com/ffmpeg/tutorial01.html

#include <QString> 
#include <QMultiMap> 

#include <stdio.h> 

#include <libavformat/avformat.h> 
#include <libavutil/dict.h> 

void processMedia(const char* mediaFile) 
{ 
    AVFormatContext *pFormatCtx = NULL; 
    AVDictionaryEntry *tag = NULL; 

    // Register all formats and codecs 
    av_register_all(); 

    // Open video file 
    if(avformat_open_input(&pFormatCtx, mediaFile, NULL, NULL)!=0) 
    return; 

    // Retrieve stream information 
    if(av_find_stream_info(pFormatCtx)<0) 
    return; 

    //Get Bitrate 
    float bitRate = pFormatCtx->bit_rate; 

    //Get Meta 
    QMultiMap<QString, QString> metaData; 
    while ((tag = av_dict_get(pFormatCtx->metadata, "", tag, 
      AV_DICT_IGNORE_SUFFIX))) 
    { 
    QString keyString(tag->key); 
    QString valueString(tag->value); 
    metaData.insert(keyString, valueString); 
    printf("%s=%s\n", tag->key, tag->value); 
    } 

    // Close the video file 
    av_close_input_file(pFormatCtx); 
} 
1

當您設置數據源時,MediaObject進入LoadingState。那時候,元數據可能還沒有可用。

元數據準備就緒時,該對象發出metaDataChanged信號。您應該對該信號作出反應,並且只有在元數據發出後才嘗試訪問。

+0

謝謝你,首先,這是我想的問題。如果我想在不播放視頻的情況下獲取元數據,我的意思是沒有讓它顯示在小部件上,我該怎麼辦?或者我如何使用Qt獲取元數據?十分感謝。 – Himiko 2012-03-04 02:54:27