欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

数字音视频知识点汇总(二)

发布时间:2025/3/17 编程问答 54 豆豆
生活随笔 收集整理的这篇文章主要介绍了 数字音视频知识点汇总(二) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

 

### AAC格式简介

FFF16040 0A4280FC01 4AF28780 21280991 D5F379C7 1271871D E7B66A4E B352A85B 0A4E3C1E 094794EB 4A8AAF24 88497264 2A8AD204 9640B543 5A608903 9874AA88 A8A2A024 4A762121 C6540B2E 115A64C6 3DE7

 

### ADTS头添加

/*** 添加ADTS头* 一帧AAC+7 = packetLen* @param packet* @param packetLen*/ private void addADTStoPacket(byte[] packet, int packetLen) {int profile = 2; // AAC LCint freqIdx = 8; // 16KHzint chanCfg = 1; // CPE// fill in ADTS datapacket[0] = (byte) 0xFF;packet[1] = (byte) 0xF1;packet[2] = (byte) (((profile - 1) << 6) + (freqIdx << 2) + (chanCfg >> 2));packet[3] = (byte) (((chanCfg & 3) << 6) + (packetLen >> 11));packet[4] = (byte) ((packetLen & 0x7FF) >> 3);packet[5] = (byte) (((packetLen & 7) << 5) + 0x1F);packet[6] = (byte) 0xFC;}

p.s.MediaCodec编码的AAC流已经添加好了ADTS头,具体情况可打印出来分析。

 

### 根据ADTS头计算AAC帧长度

dataLen = 8 * (buffer[4] & 0xff) + ((buffer[5] & 0xff) - 31)/32;

 

### java中byte与int进行函数计算时要注意转换

byte转化为int有两种情况:

1)要保持数值不变

应用场景:数值计算。等等。

方法:能够直接採用强制类型转换:int i = (int) aByte,

比如:若aByte=0xff(即数值为-1)。则转化为int后。i为0xffffffff。数值仍为-1。

2)保持最低字节中各个位不变,3个高字节所实用0填充

应用场景:编解码操作,

方法:採用位操作:int i = aByte & 0xff。

比如:若aByte=0xff,转化为int后。i为0x000000ff。

总结

以上是生活随笔为你收集整理的数字音视频知识点汇总(二)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。