数字音视频知识点汇总(二)
?
### 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流已經(jīng)添加好了ADTS頭,具體情況可打印出來分析。
?
### 根據(jù)ADTS頭計(jì)算AAC幀長度
dataLen = 8 * (buffer[4] & 0xff) + ((buffer[5] & 0xff) - 31)/32;?
### java中byte與int進(jìn)行函數(shù)計(jì)算時(shí)要注意轉(zhuǎn)換
byte轉(zhuǎn)化為int有兩種情況:
1)要保持?jǐn)?shù)值不變
應(yīng)用場景:數(shù)值計(jì)算。等等。
方法:能夠直接採用強(qiáng)制類型轉(zhuǎn)換:int i = (int) aByte,
比如:若aByte=0xff(即數(shù)值為-1)。則轉(zhuǎn)化為int后。i為0xffffffff。數(shù)值仍為-1。
2)保持最低字節(jié)中各個(gè)位不變,3個(gè)高字節(jié)所實(shí)用0填充
應(yīng)用場景:編解碼操作,
方法:採用位操作:int i = aByte & 0xff。
比如:若aByte=0xff,轉(zhuǎn)化為int后。i為0x000000ff。
總結(jié)
以上是生活随笔為你收集整理的数字音视频知识点汇总(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bangteng文件夹各种方式尝试后删除
- 下一篇: Makefile学习(三)[第二版]