使用fdk aac完成aac ld解碼

2021-09-11 08:54:36 字數 1516 閱讀 2810

對於aac ld的編碼,通常為raw的資料和每幀長度的記錄,而不是通過帶adts頭來記錄資料資訊.

而相應的解碼資訊,通過aacdecoder_configraw來完成配置.

對於aacdecoder_configraw的配置,即asc(audio special configure),分兩種情況,拿例子說話

(1) aac eld 44.1khz 雙聲道 conf為,轉為二進位制為:

11111 000111   0100 0010 1 0000 0000 0000

32     +  7              4        2        其他

aot為39,即eld; 4查表為44.1hz, 2為雙聲道; 其他設定,參考源**來解釋,前3項正確,基本可以解碼.

(2) aac ld 32khz 單聲道 conf為,轉為為二進位制為:

10111 0101 0001 0000 0000 0000 0000 000

23           5         1        其他

aot為23,即ld; 5查表為32hz, 1為單聲道; 其他設定,參考源**來解釋,前3項正確,基本可以解碼.

附**為

索引取樣頻率

096k

188.2k

264k

348k

444.1k

532k

624k

722.05k

816k

912k

a11.025kb8k

c7.35k

注意(1)(2)兩種情況,對於audio of type (aot)的長度不同.以(2)情況的,aac ld進行解碼,測試**如下:

#include #include #include #include #include "aacdecoder_lib.h"

#include using namespace std;

int main() ;//ste eld 44.1k

uchar ld_conf = ;//mono ld 32k

uchar *conf = ;

static uint conf_len = sizeof(ld_conf);

aac_decoder_error err = aacdecoder_configraw(handle, conf, &conf_len);

if(err>0)

cout<<"conf err:"<0)

cout<<"fill err:"<0)

cout<<"dec err:"framecnt++;

}while(true);

cout<<"frame count:"《讀入的是encode.aac的檔案,檔案格式是raw, 32khz取樣,單聲道.

length.txt為每一幀的長度資訊,用來輔助解碼,在產品環境下,可以通過rtp的負載長度,進行區分.

對於aac_conceal_method,我認為選插值的方式(設定為2)比較合理.

解碼後得到decoder.pcm,為原始的pcm流.

Delphi 完成埠使用

delphi 完成埠相關函式。變數fcompletionport thandle 完成埠的相關資訊 const gowork ffffeeee 開始工作 workbeat ffffeedd 執行緒心跳 gosend ffffeecc 傳送資料 poolpause ffffcccc 暫停 shutdo...

小心使用IOCP完成埠

s createsocket 假定s返回值是10 createiocompletionport s,m hcompletionport,dword ptr a,0 wsasend s,wsasend s,wsasend s,wsasend s,wsasend s,這個時候,完成埠裡累計了多條跟s相關...

Android使用Sencha完成APK區域性更新

應用初始化 lt title head body div style display none h1 應用初始化 h1 等待對話方塊 div id progressmodal class modal hide div class modal header button type button cla...