如何使用 MediaStreamSource 播放原始广告 AAC 流?

发布于 2025-01-08 11:56:29 字数 828 浏览 1 评论 0原文

有人有这个工作吗?我相信我的 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 文档示例执行与此处< /a>.我希望它至少在关闭之前尝试一下样品。

Does anyone have this working? I believe I have the CodecPrivateData messed up, but I can't find any WAVEFORMTEX FormatTags that seem to work. I tried 0xFF00, 0x1016, and 0x0116. I used the MSDN documentation to complete the rest of the string.

I found this in MMReg.h (WAVE_FORMAT_MPEG_ADTS_AAC 0x1600) which would have a FormatTag(0x0016). You would think this is what I should use, but that does not work either.

When using 0xFF if I avoid the adts headers in the stream GetSampleAsync get called repeatedly but there is no playback. I know the stream is good because I can play it in FooBar, VLC, and Window Media Player. When I stick the raw AAC into an MP4 container it works fine in silverlight so I know that the AAC setting are supported by silverlight.

Can someone supply me with a hex CodecPrivateData string that worked for them?

Edit:

This is an example of PrivateCodecData hex string that I think should work:

0x1016010080BB0000E02E0000010000000E000100FE0000000000000000001190

This string goes straight from OpenMediaAsync() to CloseMedia() without even trying a sample. The MSDN documentation example does the same thing found here. I would expect it to at least try a sample before closing.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我做我的改变 2025-01-15 11:56:29

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

Silverlight seems to be not compliant with AAC and ADTS wrapper...

If you analyze your MP4 file (with MediaInfo for example), you will see AAC for audio but without ADTS wrapper. This is why Silverlight can read in this case your AAC audio embedded in a MP4 file.

So you need to remove the ADTS header for each audio sample before calling ReportSampleCompleted() in the MediaStreamSource. The ADTS header consists of 7 or 9 bytes (without or with CRC). For more informations about the ADTS header, see this link.

Obviously, you need to adapt your CodecPrivateData string with the right FormatTag. Here is mine for a AAC LC 48KHz @96Kbps file : FF00020080BB0000E02E0000040010000200

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文