日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

aac格式介绍

發布時間:2024/5/24 综合教程 34 生活家
生活随笔 收集整理的這篇文章主要介紹了 aac格式介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

AAC編碼后數據打包到FLV很簡單。

1. FLV音頻Tag格式
字節位置 意義
0x08, // 0, TagType
0xzz, 0xzz, 0xzz, // 1-3, DataSize,
0xzz, 0xzz, 0xzz, 0xzz, // 4-6, 7 TimeStamp | TimeStampExtend
0x00, 0x00, 0x00, // 8-10, StreamID

0xzz, // 11, AudioTag Header
0x0b, // 12, AACPacketType (如果不是AAC編碼 沒有這個字節)
0xzz ... 0xzz // 音頻數據

2. AudioTagHeader
音頻Tag頭一般由一個字節定義(AAC用兩個字節),第一個字節的定義如下:
音頻格式 4bits | 采樣率 2bits | 采樣精度 1bits | 聲道數 1bits|

音頻格式 4bits
0x00 = Linear PCM, platform endian
0x01 = ADPCM
0x02 = MP3
0x03 = Linear PCM, little endian
0x04 = Nellymoser 16-kHz mono
0x05 = Nellymoser 8-kHz mono
0x06 = Nellymoser
0x07 = G.711 A-law logarithmic PCM
0x08 = G.711 mu-law logarithmic PCM
0x09 = reserved
0x0A = AAC
0x0B = Speex
0x0E = MP3 8-Khz
0x0F = Device-specific sound

采樣率 2bits
0 = 5.5-kHz
1 = 11-kHz
2 = 22-kHz
3 = 44-kHz
對于AAC總是3,這里看起來FLV不支持48K AAC,其實不是的,后面還是可以定義為48K。

采樣精度 1bits
0 = snd8Bit
1 = snd16Bit
壓縮過的音頻都是16bit

聲道數 1bits
0 = sndMono
1 = sndStereo
對于AAC總是1

綜上,如果是AAC 48K 16比特精度 雙聲道編碼,該字節為 0b1010 1111 = 0xAF。

看第2個字節,如果音頻格式AAC(0x0A),AudioTagHeader中會多出1個字節的數據AACPacketType,這個字段來表示AACAUDIODATA的類型:
0x00 = AAC sequence header,類似h.264的sps,pps,在FLV的文件頭部出現一次。
0x01 = AAC raw,AAC數據

3. AAC Sequence header
AAC sequence header定義AudioSpecificConfig,AudioSpecificConfig包含著一些更加詳細的音頻信息,它的定義在ISO14496-3中1.6.2.1。
簡化的AudioSpecificConfig 2字節定義如下:
AAC Profile 5bits | 采樣率 4bits | 聲道數 4bits | 其他 3bits |

AAC Profile 5bits,參考ISO-14496-3 Object Profiles Table
AAC Main 0x01
AAC LC 0x02
AAC SSR 0x03
...

(為什么有些文檔看到profile定義為4bits,實際驗證是5bits)


采樣率 4bits
Value samplingFrequencyIndex
0x00 96000
0x01 88200
0x02 64000
0x03 48000
0x04 44100
0x05 32000
0x06 24000
0x07 22050
0x08 16000
0x09 12000
0x0A 11025
0x0B 8000
0x0C reserved
0x0D reserved
0x0E reserved
0x0F escape value

聲道數 4bits
0x00 - defined in audioDecderSpecificConfig
0x01 單聲道(center front speaker)
0x02 雙聲道(left, right front speakers)
0x03 三聲道(center, left, right front speakers)
0x04 四聲道(center, left, right front speakers, rear surround speakers)
0x05 五聲道(center, left, right front speakers, left surround, right surround rear speakers)
0x06 5.1聲道(center, left, right front speakers, left surround, right surround rear speakers, front low frequency effects speaker)
0x07 7.1聲道(center, left, right center front speakers, left, right outside front speakers, left surround, right surround rear speakers, front low frequency effects speaker)
0x08-0x0F - reserved

其他3bits設置為0即可。

AAC-LC, 48000,雙聲道 這樣的設置 Sequence header 為 0b 00010 0011 0010 000 = 0x11 0x90。
因此 AAC Sequence header的整個音頻Tag包為 0x08, 00 00 04, 00 00 00 00, 00 00 00, AF 00 11 90 | 00 00 00 0F

AAC Sequence header這個音頻包有些FLV文件里面沒有也可以正確解碼。但對于RTMP播放,必須要在發送第一個音頻數據包前發送這個header包。

4. AAC音頻包
結構為:0x08, 3字節包長度,4字節時間戳,00 00 00,AF 01 N字節AAC數據 | 前包長度
其中編碼后AAC純數據長度為N,3字節包長度 = N + 2

前包長度 = 11 + 3字節包長度 = 11 + N + 2 = 13 + N。

總結

以上是生活随笔為你收集整理的aac格式介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。