AAC LC用LATM封裝header資訊解析

2021-08-15 17:21:47 字數 2095 閱讀 2178

通常來說aac的頭資訊在編譯碼過程中是可以獲取到的,但今天需要根據音訊引數生成相應的aac頭。專案中使用的是aac_lc,今天先對它的結構進行分析。

專案中使用ffmpeg進行音訊編碼,音訊編碼庫為faac,好吧,直接看**吧。

ffmpeg呼叫faac_encode_init()初始化編碼器;在faac_encode_init()呼叫faacencgetdecoderspecificinfo()獲取aac_lc頭資訊內容及長度。?

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

intfaacapi faacencgetdecoderspecificinfo(faacenchandle hencoder,unsignedchar** ppbuffer,unsignedlong* psizeofdecoderspecificinfo)

if(hencoder->config.mpegversion == mpeg2)

*psizeofdecoderspecificinfo = 2;

*ppbuffer =malloc(2);

if(*ppbuffer != null)else

}

從**中可以看出,頭資料長度固定為2;

資料內容由高位到低位依次為:aacobjecttype(5bits),samplerateidx(4bits),numchannels(4bits)

例如:音訊編碼引數為:

aacobjecttype:aac_lc,對應值為2,用5bit二進位制表示為00010;

samplerate:44100khz, 對應的idx值為4, 用4bit二進位制表示為0100; 

numchannels:2,對應的值為2,用4bit二進位制表示為0010;

將它們由高位到低位串起來:0001,0

010,0

001,0000,

則,對應的十六進製制值為:0x1220

引一些參考資料:

the audio specific config is the global header for mpeg-4 audio:

5 bits: object type

if (object type == 31)

6 bits + 32: object type

4 bits: frequency index

if (frequency index == 15)

24 bits: frequency

4 bits: channel configuration

var bits: aot specific config

mpeg-4 audio object types:

there are 13 supported frequencies:

these are the channel configurations:

用socket封裝ftp類。

最近本人寫了乙個ftp類,想和大家分享一下。ftp協議的底層實現是用socket來實現的。上圖是ftp協議的官方協議圖 可以看出它主要是由兩個socket組成的。1,控制連線,主要是用於傳送控制命令 ftp協議的建立流程 首先,客戶端建立乙個套接字1,套接字繫結的ip和埠為ftp伺服器的ip和著名埠...

用faad解碼AAC ADTS封裝

faaddec.c use faad library to decode aac,only can decode frame with adts head include include include faad.h define frame max len 1024 5 define buffer...

C 用類封裝 pthread

乙個專案中需要用到pthread,發現把它封裝到類中使用起來更加的方便。這裡儲存了例項 以備以後使用。標頭檔案中定義了threadbase類,它包含了執行緒基本的一些介面,start join 和quit run 為介面函式,使派生類可以實現自己的工作函式。thread base.h ifndef ...