2013-07-19 111 views
0

我嘗試使用自定義網絡源過濾器和ffdshow音頻解碼器(ffdshow-tryout stable)播放RTP流。 我在源輸出流上設置的媒體類型是MEDIASUBTYPE_RAW_AAC1。以下是我設置:使用ffdshow播放AAC RTP流

  pmt->SetType(&MEDIATYPE_Audio); 
      pmt->SetSubtype(&MEDIASUBTYPE_RAW_AAC1); 
      pmt->SetFormatType(&FORMAT_WaveFormatEx); 


      BYTE *AACRAW; 
      DWORD dwLen = sizeof(WAVEFORMATEX) + 2; //2 bytes of audio config 
      AACRAW = (BYTE *)::CoTaskMemAlloc(dwLen); 
      memset(AACRAW, 0, dwLen); 


      WAVEFORMATEX wfx; 
      wfx.wFormatTag = WAVE_FORMAT_RAW_AAC1; 
      wfx.nChannels = 1; 
      wfx.nSamplesPerSec = 16000; 
      wfx.nAvgBytesPerSec = 8000; 
      wfx.nBlockAlign = 1; 
      wfx.wBitsPerSample= 0; 
      wfx.cbSize = 2; 

      memcpy(AACRAW, (void *)&wfx, sizeof(WAVEFORMATEX)); 

      vector<unsigned char>extra; 
      extra.push_back(0x14); 
      extra.push_back(0x08); 
      memcpy(AACRAW + sizeof(WAVEFORMATEX), extra.data(), extra.size()); 

      pmt->SetFormat(AACRAW, dwLen);   

      ::CoTaskMemFree(AACRAW); 

,然後當我收到這裏的RTP包是我期待的ffdshow的過濾器:

DeliverRTPAAC(pRaw + 12 + 2 + 2, nBufSize - 12 - 2 - 2, pack.timestamp); 

其中pRaw是指針的RTP包。我收到的每個rtp數據包都包含一個AU。

過濾器連接但不播放音頻。 AAC解碼器也沒有錯誤輸出。

從軸相機的SDP參數是:

a=rtpmap:97 mpeg4-generic/16000/1 
a=fmtp:97 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=1408; sizeLength=13; indexLength=3; indexDeltaLength=3; profile=1; bitrate=64000; 

有人能幫助我嗎?

回答

0

您接收的數據可能包含在ADTS標頭中,您需要剝去ADTS標頭以向解碼器提供原始AAC。

+0

謝謝...我不確定是否是這種情況..我最終使用faad庫來解碼源內部的AAC。 – Saibal