首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ffdshow播放AAC RTP流

使用ffdshow播放AAC RTP流
EN

Stack Overflow用户
提问于 2013-07-19 23:08:08
回答 1查看 717关注 0票数 0

我正在尝试使用自定义的网络源过滤器和ffdshow音频解码器播放RTP流(ffdshow- to稳定)。我在源输出流上设置的媒体类型是MEDIASUBTYPE_RAW_AAC1。下面是我正在设置的内容:

代码语言:javascript
复制
            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过滤器的内容:

代码语言:javascript
复制
DeliverRTPAAC(pRaw + 12 + 2 + 2, nBufSize - 12 - 2 - 2, pack.timestamp);

其中pRaw是指向rtp分组的指针。我收到的每个rtp数据包都包含一个AU。

过滤器可以连接,但不能播放音频。AAC解码器也没有错误输出。

来自轴摄像头的SDP参数包括:

代码语言:javascript
复制
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; 

有谁能帮帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2013-07-24 04:09:27

可能您正在接收的数据被包装在ADTS报头中,您需要剥离ADTS报头以向解码器提供原始AAC。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17749486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档