我想知道是否真的可以使用Netstream.appendbytes播放AAC(ADTS标头)文件。我在谈论在M4A或MP4容器中结束.aac
而不是AAC音频的文件。
我知道Netstream无法解析ADTS标头等,所以我已经有了一个用于解析数据的类,并返回正确的信息,如通道,比特率,帧长等。
将这些放在一起会产生沉默:制作FLV标题(+追加) - >> 制作音频标题标题(+追加) - >> ; 现在追加原始/无头AAC有效载荷(第1帧)+更新以前的标签尺寸 - >> 为下一个AAC帧制作新的音频标签&附加 - >> 原始/无头有效负载附加(第2帧),依此类推,直到跟踪结束。
有人可以澄清一下:
在FLV标记中,我们放置额外的字节来指定Raw或Sequenced AAC类型。如果我已经删除了7字节的标题,只留下了下一帧/ SyncWord的数据。我认为它是Raw,但无论我选择哪种设置,我都会沉默。我应该考虑其他任何事情(即根据类型增加一项功能吗?)
在发送给Appendbytes命令的某些数据中是否存在AAC头字节?即使我已经将FLV标签设置为Raw AAC音频?
无论通道如何,所有AAC文件是否每帧保存1024个样本,还是应该将1024乘以通道数?我问,因为我需要这个来进行正确的持续时间计算,并注意到在测试MP3时如果持续时间或帧长度错误我会沉默。
我有很多问题和很多研究(AAC规格,FLV规格等),但没有任何帮助,网上有一些混乱的信息(他们不总是从AS3的角度说话。 )。我想我只需要知道它绝对可能而不是盲目地反对技术限制
PS:我已经成功地使用AppendBytes播放.MP3音频文件,现在改变了进程以容纳AAC(即:解析7字节标题而不是4字节标题等等。比它的更多)。感谢阅读并希望有人可以提供帮助。答案 0 :(得分:3)
我打算回答一下......
工作演示.. [ A very basic demo of AAC file playback ](如果您需要一些测试AAC文件,请参见下文)
我很高兴地确认使用NetStream播放.aac
音频文件是100%可能的。
所以要澄清我自己的问题:
您首先需要两种 AAC类型来启动AAC解码器,然后您可以使用AAC类型执行常用的 FLV标记:Raw + Raw AAC数据(无ADTS)标题)并继续这样直到跟踪结束。
不。不应将ADTS字节发送到Netstream解码器。
是的,每个AAC帧包含1024个样本,每帧等于23.21毫秒(大约44帧,1秒音频)。频道设置无关紧要。
下图说明流程。正如你在FLV标题和&之后看到的那样。元数据首先有BOTH类型的标签,但之后其余的AAC类型为raw。没有ADTS意味着从每个AAC帧中删除7字节头,并将剩下的内容移到FLV标记中。我为每个AAC帧制作了一个FLV音频标签(更容易处理搜索和时间戳等)......
在Hex编辑器中分析了使用FFMPEG
进行的测试FLV后,我理解使用这两种设置。我不知道他们是如何计算出你需要 两者 而不是 一个或其他 ,如FLV Specs( ver 10.1)建议。我向那些家伙的天才低头。女孩。
顶部的“处理”图片足以让知道netstream.appendbytes
的人继续使用它:
如果您需要一些测试音频文件......
AAC循环测试1 :(学分:标记“45”国王) - http://goo.gl/U7IuWe
AAC环路测试2 :(学分:U.T.F.O) - http://goo.gl/W8ieJd
AAC扩展测试:(学分:恩雅) - http://goo.gl/EVCy4X