2

有人有这个工作吗?我相信我的 CodecPrivateData 搞砸了,但我找不到任何似乎有效的 WAVEFORMTEX FormatTags。我尝试了 0xFF00、0x1016 和 0x0116。我使用 MSDN 文档来完成字符串的其余部分。

我在 MMReg.h (WAVE_FORMAT_MPEG_ADTS_AAC 0x1600) 中找到了这个,它有一个 FormatTag(0x0016)。你会认为这是我应该使用的,但这也不起作用。

使用 0xFF 时,如果我避免重复调用流 GetSampleAsync 中的 adts 标头但没有播放。我知道流很好,因为我可以在 FooBar、VLC 和 Window Media Player 中播放它。当我将原始 AAC 粘贴到 MP4 容器中时,它在 silverlight 中运行良好,所以我知道 silverlight 支持 AAC 设置。

有人可以为我提供一个对他们有用的十六进制 CodecPrivateData 字符串吗?

编辑:

这是我认为应该工作的 PrivateCodecData 十六进制字符串的示例:

0x1016010080BB0000E02E0000010000000E000100FE0000000000000000001190

这个字符串直接从 OpenMediaAsync() 到 CloseMedia() 甚至没有尝试样本。MSDN 文档示例执行与此处相同的操作。我希望它至少在关闭之前尝试一个样本。

4

1 回答 1

1

Silverlight 似乎不符合 AAC 和 ADTS 包装器...

如果您分析您的 MP4 文件(例如使用 MediaInfo),您将看到 AAC 用于音频,但没有 ADTS 包装器。这就是为什么 Silverlight 在这种情况下可以读取您嵌入在 MP4 文件中的 AAC 音频的原因。

因此,您需要在 MediaStreamSource 中调用 ReportSampleCompleted() 之前删除每个音频样本的 ADTS 标头。ADTS 标头由 7 或 9 个字节组成(不带或带 CRC)。有关 ADTS 标头的更多信息,请参阅此链接

显然,您需要使用正确的 FormatTag 调整您的 CodecPrivateData 字符串。这是我的 AAC LC 48KHz @96Kbps 文件:FF00020080BB0000E02E0000040010000200

于 2012-11-29T16:33:08.693 回答