DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
AAC格式里有个复杂的AudioSpecificConfig, 在FLV格式里称为AAC sequence header。在正式播放ADTS AAC数据包之前,需要用AudioSpecificConfig生成一个audio_tag交给播放器。
其实AudioSpecificConfig的内容,完全可以通过ADTS的7字节头生成,具体来说,AudioSpecificConfig需要3部分数据:profile(LC,Main,HE),sample_rate, channel,这3个数据在ADTS头里都可以找到。具体算法见代码。
有了这3个数据以后,可以进行合并生成2个字节,就是所谓的AudioSpecificConfig,见代码部分config1/config2的算法。
 
//output AAC config header:
 
var profile:int = ((payload[2]&0xc0)>>6)+1;
var sample_rate:int = (payload[2]&0x3c)>>2;
var channel:int = ((payload[2]&0x1)<<2)|((payload[3]&0xc0)>>6);
 
var config1:int = (profile<<3)|((sample_rate&0xe)>>1);
var config2:int = ((sample_rate&0x1)<<7)|(channel<<3);
 
var aacSeqHeader:ByteArray = new ByteArray();
aacSeqHeader.writeByte(config1);
aacSeqHeader.writeByte(config2);
 
根据第一个ADTS包生成的aacSeqHeader,打包到audio_tag里,交给NetStream,后面的ADTS包就可以直接打包成audio_tag播放了。
posted on   DoubleLi  阅读(1830)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2016-07-25 Linux动态链接库的创建与使用
2016-07-25 需要忽略的一些信号
2016-07-25 linux下so动态库一些不为人知的秘密(中二)
2016-07-25 linux下so动态库一些不为人知的秘密(中)
2016-07-25 linux下so动态库一些不为人知的秘密(上)
2016-07-25 Linux下gcc编译控制动态库导出函数小结
2016-07-25 解决Linux动态库版本兼容问题
点击右上角即可分享
微信分享提示