2016-07-05 51 views
0

(我的英語不流利,我會盡力做到最好)解碼循環邏輯音頻

我嘗試代碼(C++)一個簡單的MKV播放器。我在這個主題上很新,所以我發現我一點一點需要。首先,我使用VP8編解碼器進行視頻,並使用Vorbis進行音頻處理。 視頻方面現在看起來不錯,但我遇到了音頻問題。

我想不通的循環邏輯音頻幀我從mkvparserlibvorbis解碼。 我仰望this samplethis brief explanation,但無法設法使它在我的情況下工作。我沒有找到其他簡單的例子。

這裏是我的代碼塊:音頻

const mkvparser::Block* const pBlock = m_pMkvContext->pBlockEntry->GetBlock(); 
const mkvparser::Track* const pTrack = m_pMkvContext->pTracks->GetTrackByNumber((unsigned long)pBlock->GetTrackNumber()); 

if (pTrack != NULL) 
{ 
    const long long trackType = pTrack->GetType(); 
    const int  frameCount = pBlock->GetFrameCount(); 

    if (frameCount > 0) 
    { 
     const mkvparser::Block::Frame& oFrame = pBlock->GetFrame(0); 
     unsigned char* pData = (unsigned char*)malloc((size_t)oFrame.len); 
     oFrame.Read(&m_pMkvContext->oReader, pData); 

     if (trackType == mkvparser::Track::kVideo) 
     { 
      // i'm ok here 
     } 
     else if (trackType == mkvparser::Track::kAudio) 
     { 
      // what to do here with my audio frame data ? 
     } 
     free(pData); 
    } 
} 

也許我得到幀的方式是很好的視頻,而不是......

你們是否知道一些好的資源共享關於它?或者一些建議?

感謝您的幫助!

[編輯]:我忘了補充我的嘗試之一:

bool MoviePlayer::DecodeAudioData(unsigned char* pData, uint32 iSize) 
{ 
    int ret; 
    char* pBuffer = NULL; 
    pBuffer = ogg_sync_buffer(&m_pOVContext->oOggSyncState, iSize); 
    memcpy(pBuffer, pData, iSize); 
    ogg_sync_wrote(&m_pOVContext->oOggSyncState, iSize); 

    ret = ogg_sync_pageout(&m_pOVContext->oOggSyncState, &m_pOVContext->oOggPage); 
    ret = ogg_stream_init(&m_pOVContext->oOggStreamState, ogg_page_serialno(&m_pOVContext->oOggPage)); 
    ret = ogg_stream_pagein(&m_pOVContext->oOggStreamState, &m_pOVContext->oOggPage); 
    int iPacketsCount = ogg_page_packets(&m_pOVContext->oOggPage); 
    for (int i = 0; i < iPacketsCount; ++i) 
    { 
     ret = ogg_stream_packetout(&m_pOVContext->oOggStreamState, &m_pOVContext->oOggPacket); 
     // do something with the packet... 
    } 

    return true; 
} 

它崩潰的ogg_sync_pageout,因爲我ogg_page不正確初始化。 但是,不是來自正確的.ogg文件,如我發現的例子,我不知道如何正確初始化vorbis結構。

回答