int?aac_decode_extradata(ADTSContext?*adts,?unsigned?char?*pbuf,?int?bufsize)??
{??
??????int?aot,?aotext,?samfreindex;??
??????int?i,?channelconfig;??
??????unsigned?char?*p?=?pbuf;??
???
??????if?(!adts?||?!pbuf?||?bufsize<2)??
??????{??
????????????return?-1;??
??????}??
??????aot?=?(p[0]>>3)&0x1f;??
??????if?(aot?==?31)??
??????{??
????????????aotext?=?(p[0]<<3?|?(p[1]>>5))?&?0x3f;??
????????????aot?=?32?+?aotext;??
????????????samfreindex?=?(p[1]>>1)?&?0x0f;??
?????????????
????????????if?(samfreindex?==?0x0f)??
????????????{??
??????????????????channelconfig?=?((p[4]<<3)?|?(p[5]>>5))?&?0x0f;??
????????????}??
????????????else??
????????????{??
??????????????????channelconfig?=?((p[1]<<3)|(p[2]>>5))?&?0x0f;??
????????????}??
??????}??
??????else??
??????{??
????????????samfreindex?=?((p[0]<<1)|p[1]>>7)?&?0x0f;??
????????????if?(samfreindex?==?0x0f)??
????????????{??
??????????????????channelconfig?=?(p[4]>>3)?&?0x0f;??
????????????}??
????????????else??
????????????{??
??????????????????channelconfig?=?(p[1]>>3)?&?0x0f;??
????????????}??
??????}??
???
#ifdef?AOT_PROFILE_CTRL??
??????if?(aot?<?2)?aot?=?2;??
#endif??
??????adts->objecttype?=?aot-1;??
??????adts->sample_rate_index?=?samfreindex;??
??????adts->channel_conf?=?channelconfig;??
??????adts->write_adts?=?1;??
???
??????return?0;??
}??
int?aac_set_adts_head(ADTSContext?*acfg,87); background-color: inherit; font-weight: bold;">char?*buf,87); background-color: inherit; font-weight: bold;">int?size)??
{?????????
??????unsigned?char?byte;??
???
??????if?(size?<?ADTS_HEADER_SIZE)??
??????{??
????????????return?-1;??
??????}??
???????
??????buf[0]?=?0xff;??
??????buf[1]?=?0xf1;??
??????byte?=?0;??
??????byte?|=?(acfg->objecttype?&?0x03)?<<?6;??
??????byte?|=?(acfg->sample_rate_index?&?0x0f)?<<?2;??
??????byte?|=?(acfg->channel_conf?&?0x07)?>>?2;??
??????buf[2]?=?byte;??
??????byte?=?0;??
??????byte?|=?(acfg->channel_conf?&?0x07)?<<?6;??
??????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)?<<?5;??
??????byte?|=?(0x7ff?>>?6)?&?0x1f;??
??????buf[5]?=?byte;??
??????byte?=?0;??
??????byte?|=?(0x7ff?&?0x3f)?<<?2;??
??????buf[6]?=?byte;??
???
??????? 这个头部是固定的7字节长度,所以可提前空出这7个字节供ADTS占用。
? 通过以上对H264和AAC的扩展数据处理,播放各种“黄金搭档”的多媒体文件、流媒体、视频点播等都应该没有问题了。
?
? 想第一时间获得更多原创文章,请关注个人微信公众平台:程序员互动联盟(coder_online),扫一扫下方二维码或者搜索微信号coder_online即可关注,里面有大量Android,Chromium,Linux等相关文章等着您,我们还可以在线交流。

??????? 如需转载本文,请注明出处:谢谢合作!