簡體   English   中英

使用ffdshow播放AAC RTP流

[英]Playing AAC RTP stream using ffdshow

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

            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解碼器也沒有錯誤輸出。

Axis攝像機的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; 

有人可以幫我嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM