簡體   English   中英

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

[英]How to play raw adts AAC stream using MediaStreamSource?

有人有這個工作嗎? 我相信我已經把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文檔示例執行與此處相同的操作。 我希望它至少在關閉之前嘗試一個示例。

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

暫無
暫無

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

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