**codeccontext定義如下:
詳細解釋可以參考「iso-14496-15 **c file format」文件。裡面最重要的就是nal長度和sps,pps資料和對應的長度資訊。對該資料的解析在ffmpeg裡面有現成的函式:ff_h264_decode_extradata,在我的專案裡面是自己寫的擴充套件資料解析。
typedef structadtscontext;
int aac_decode_extradata(adtscontext *adts, unsigned char *pbuf, int bufsize)上面的pbuf就是extradata。aot = (p[0]>>3)&0x1f;
if (aot == 31)
else
}else
else
}#ifdef aot_profile_ctrl
if (aot
#endif
adts->objecttype = aot-1;
adts->sample_rate_index = samfreindex;
adts->channel_conf = channelconfig;
adts->write_adts = 1;
return 0;
}
接下來,再用adtscontext資料編碼為adts頭資訊插入每乙個aac幀前面:
int aac_set_adts_head(adtscontext *acfg, unsigned char *buf, int size)這個頭部是固定的7位元組長度,所以可提前空出這7個位元組供adts占用。buf[0] = 0xff;
buf[1] = 0xf1;
byte = 0;
byte |= (acfg->objecttype & 0x03) <
byte |= (acfg->sample_rate_index & 0x0f) <
byte |= (acfg->channel_conf & 0x07) >> 2;
buf[2] = byte;
byte = 0;
byte |= (acfg->channel_conf & 0x07) <
byte |= (adts_header_size + size) >> 11;
buf[3] = byte;
byte = 0;
byte |= (adts_header_size + size) >> 3;
buf[4] = byte;
byte = 0;
byte |= ((adts_header_size + size) & 0x7) <
byte |= (0x7ff >> 6) & 0x1f;
buf[5] = byte;
byte = 0;
byte |= (0x7ff & 0x3f) <
buf[6] = byte;
return 0;
}
H 264中的指數哥倫布解碼
h.264中用到的指數哥倫布解碼 標準中描述為ue v te v se v me v 時呼叫 哥倫布碼字表前幾行 碼字 編碼數字 code num 1 0 010 1 011 2 00100 3 00101 4 00110 5 00111 6 0001000 7 字首為m個0 字尾為m位的二進位制數...
CMMB中的H264和AAC打包成ts流
cmmb中的h264和aac打包成ts流 南冠彤參照tstools這個開源專案完成了cmmb的merge aac with 264 to ts.在做的過程中,分成了幾個階段。先試著將h264打包成ts,這花了最大的精力和時間 接著將aac打包成ts 最後將其合併起來。一 處理h264 1 h264 ...
symbian s60平台的H264編譯碼
windows平台和linux平台下的開源h264編解碼器很多,比如ffmepg,x264,helix等,但symbian平台上就很難看到了,一般我們都是把windows或linux的 移植到symbian上去,下面列出集中常見的使用開源的途徑 1.ffmpeg,ffmepg開源而且功能強大,而且包...