AAC ADTS格式分析

2021-08-28 04:48:15 字數 2627 閱讀 1061

關於adt裡字段的解釋有些不全,很可能是因為那些是常量,請參考**部分(裡面可以看出哪些是常量)

adts全稱是(audio data transport stream),是aac的一種十分常見的傳輸格式。

adts aac

adts_header

aac es

adts_header

aac es

adts_header

aac es

adts 頭中相對有用的資訊取樣率、聲道數、幀長度。想想也是,我要是解碼器的話,你給我一堆得aac音訊es流我也解不出來。每乙個帶adts頭資訊的aac流會清晰的告送解碼器他需要的這些資訊。

一般情況下adts的頭資訊都是7個位元組,分為2部分:

adts_fixed_header();   //adts 的固定頭資訊

adts_variable_header();   //adts的可變頭資訊

syncword:同步頭 總是0xfff, all bits must be 1,代表著乙個adts幀的開始

id:mpeg version: 0 for mpeg-4, 1 for mpeg-2

layer:always: '00'

profile:表示使用哪個級別的aac,有些晶元只支援aac lc 。在mpeg-2 aac中定義了3種:

sampling_frequency_index:表示使用的取樣率下標,通過這個下標在sampling frequencies[ ]陣列中查詢得知取樣率的值。

there are 13 supported frequencies:

channel_configuration: 表示聲道數 

frame_length: 乙個adts幀的長度包括adts頭和aac原始流.

adts_buffer_fullness:0x7ff 說明是位元速率可變的碼流

如果是通過嵌入式高畫質解碼晶元做產品的話,一般情況的解碼工作都是由硬體來完成的。所以大部分的工作是把aac原始流打包成adts的格式,然後丟給硬體就行了。

通過對adts格式的了解,很容易就能把aac打包成adts。我們只需得到封裝格式裡面關於音訊取樣率、聲道數、元資料長度、aac格式型別等資訊。然後在每個aac原始流前面加上個adts頭就ok了。

貼上ffmpeg中新增adts頭的**,就可以很清晰的了解adts頭的結構:

[html]view plain

copy

int ff_adts_write_frame_header(adtscontext *ctx,  

uint8_t *buf, int size, int pce_size)

下面這幾句可以參考,但還沒有驗證

aac的rtp打包,通常會加4個位元組的頭,所以寫檔案的時候,需要去掉4個位元組

(以下為手動編寫adts,與上文的**對比,可以更加快速明白)

unsigned char adtsheader[7] = ;

adtsheader[0] = 0xff;

adtsheader[1] = 0xf1; //有的**給的是f8,這裡需要甄別

int profile = 2;

int freqidx = 11;///8000   44100對應的值是4

int chancfg = 1; //mono channel

int packetlen = inpacket->len + 7 - 4;//inpacket為rtp的payload資料

adtsheader[2] = ((profile -1 )<<6) + (freqidx << 2) + (chancfg >> 2);

adtsheader[3] = ((chancfg & 3) << 6) + (packetlen >> 11);

adtsheader[4] = (packetlen & 0x7ff) >> 3;//(packetlen >> 3) & 0xff;

adtsheader[5] = ((packetlen & 0x7) << 5)|0x1f;

adtsheader[6] = 0xfc;

int ret = write(ffd, adtsheader, sizeof(adtsheader));

然後再寫aac的payload資料

ret = write(ffd, (void*)(payload  + 4), (inpacket->len  - 4));

全文:

AAC ADTS格式分析

adts全稱是 audio data transport stream 是aac的一種十分常見的傳輸格式。adts aac adts header aac es adts header aac es adts header aac es adts 頭中相對有用的資訊取樣率 聲道數 幀長度。想想也是,...

AAC ADTS格式分析

1.adts是個啥 adts全稱是 audio data transport stream 是aac的一種十分常見的傳輸格式。adts aac adts header aac es adts header aac es adts header aac es adts 頭中相對有用的資訊取樣率 聲道數...

AAC ADTS格式分析

adts全稱是 audio data transport stream 是aac的一種十分常見的傳輸格式。adts aac adts header aac es adts header aac es adts header aac es adts 頭中相對有用的資訊取樣率 聲道數 幀長度。想想也是,...