在做視頻錄制時(shí),發(fā)現(xiàn)使用MediaCodec做硬解碼時(shí),即使設(shè)置了MediaFormat的MediaFormat.KEY_I_FRAME_INTERVAL屬性也無法控制輸出Buffer中關(guān)鍵幀的輸出數(shù)量。
后來發(fā)現(xiàn)原來是真正的原因是在于視頻的輸入源,如果是通過Camera的PreviewCallback的方式來獲取視頻數(shù)據(jù)再喂給MediaCodec的方式是無法控制輸出關(guān)鍵幀的數(shù)量的。
想要控制輸出輸出關(guān)鍵幀數(shù)量就必須通過調(diào)用MediaCodec.createInputSurface()方法獲取輸入Surface,再通過Opengl渲染后喂給MediaCodec才能真正控制關(guān)鍵幀的數(shù)量(至于為什么會(huì)這樣我也沒搞明白,希望有明白的能指教一下)。
判斷輸出數(shù)據(jù)是否為關(guān)鍵幀的方法:
boolean keyFrame = (bufferInfo.flags & MediaCodec.BUFFER_FLAG_KEY_FRAME) != 0;