對於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...