通常來說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
int
faacapi faacencgetdecoderspecificinfo(faacenchandle hencoder,unsigned
char
** ppbuffer,unsigned
long
* 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 typeif (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 ...