Android使用MediaCodec編碼AAC

2021-09-02 06:24:57 字數 1564 閱讀 1028

關於mediacodec

mediacodec 是android系統提供的硬體編碼器,它可以利用裝置的硬體來完成編碼,從而提高編碼效率,並可以減輕cpu壓力降低電量的使用,但是必須是4.1以上的系統才可以使用。

mediacodec編碼出來的aac資料是裸的aac,即aac的原始資料塊,乙個aac原始資料塊的長度是可變的,對原始幀加上adts頭進行封裝,就形成了adts幀。adts的全稱是audio data transport stream,是aac音訊的傳輸流格式。

使用流程

1.初始化mediacodec

private mediaformat encoderformat;

private mediacodec encoder;

private fileoutputstream fos;

private mediacodec.bufferinfo info;

private

int perpcmsize;

private

byte

outbytebuffer;

private

int aacsamplerate =4;

private

void

initmediacodec

(int samperate, file outfile)

encoder.

configure

(encoderformat,null,null,mediacodec.configure_flag_encode)

; fos =

newfileoutputstream

(outfile)

; encoder.

start()

;}catch

(ioexception e)

}

2.編碼
private

void

encodecpcmtoaac

(int size,

byte

buffer)

int index = encoder.

dequeueoutputbuffer

(info,0)

;while

(index >=0)

catch

(ioexception e)}}

}

3.新增adts頭資訊
private

void

addadtsheader

(byte

packet,

int packetlen,

int samplerate)

4.釋放mediacodec
private

void

releasemediacodec()

catch

(ioexception e)

finally

catch

(ioexception e)}}

}

Android使用Application總結

第二步 配置全域性的context 第三步 使用,使用的時候用的時候根據類的名稱訪問context void onconfigurationchanged configuration newconfig void oncreate 這裡才是真正的入口點。void onlowmemory void o...

Android動畫使用

android動畫基本上分為兩個時代,乙個是3.0 api14 之前的animation動畫,乙個是3.0之後的animator動畫。採用animatorset和objectanimator配合,使用objectanimator進行更精細化控制,並且能夠自動驅動,多個objectanimator組合...

Android 使用Databinding遇到的坑

modle的get和set方法名稱在get set之後的第乙個字母一定要大寫 gradle裡面的apt版本要1.6以上,現在用的是1.8 和butterknife一起用的時候,需要在butterknife呼叫init 之後設定binding的set x方法設定資料物件 如果出現錯誤,一般在錯誤的最後...