2013-07-19 3 views
0

사용자 정의 네트워크 소스 필터 및 ffdshow 오디오 디코더 (ffdshow-tryout stable)를 사용하여 RTP 스트림을 재생하려고합니다. 원본 출력 스트림에서 설정 한 mediatype은 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를 필터에 I : 여기에 내가 설정하고 무엇 pRaw는 RTP 패킷에 대한 포인터입니다

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

. 내가 수신 한 각 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 헤더에 랩핑되어 있으며 원시 AAC로 디코더에 공급하려면 ADTS 헤더를 제거해야합니다.

+0

감사합니다 ... 그 경우인지 모르겠습니다 .. faade 라이브러리를 사용하여 소스 자체에서 AAC를 디코딩했습니다. – Saibal

관련 문제