1
我在我的項目中使用MediaCodec對攝像頭的視頻進行編碼。由於某些原因,我需要將KEY_I_FRAME_INTERVAL設置爲0,這意味着錄製的mp4視頻中的每一幀都是關鍵幀(關鍵幀包含整個圖像,而不僅僅是前一幀的增量差異)。MediaCodec:MediaFormat設置忽略KEY_I_FRAME_INTERVAL值
在這裏我遇到了問題:在nexus 10,nexus 7,xiaomi redmi 2,asus zenphone 5,galaxy a5一切正常。但聯想氛圍s1僅記錄關鍵幀間隔等於1秒。無論mediaFormat中設置了什麼值,我在mediaCodec.configure()中使用了什麼值。我試圖設置0,1,5,10,但視頻中的關鍵幀是每30幀全部。
任何想法如何解決這個問題?
欲瞭解更多信息,這裏是我的mediaCodec編碼器設置:
videoCodec = MediaCodec.createEncoderByType(MIME_VIDEO_CODEC_H264);
MediaFormat videoFormat = MediaFormat.createVideoFormat(MIME_VIDEO_CODEC_H264, 1280, 720);
videoFormat.setInteger(MediaFormat.KEY_BIT_RATE, 3800000);
videoFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 30);
videoFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
videoFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 0);
videoCodec.configure(videoFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
//using input surface to get input data from camera
inputSurface = new CodecInputSurface(videoCodec.createInputSurface());
videoCodec.start();
根據網絡,該設備使用聯發科MT6752芯片組。最近我看到一些關於聯發科視頻編碼問題的抱怨(http://stackoverflow.com/questions/34891420/,http://stackoverflow.com/questions/35030050/)。 – fadden
@fadden這看起來似乎更容易避免MT芯片組。我試過聯想a536,它是在MT芯片組上被毀壞的,它有同樣的問題,加上我無法將720p轉換爲720 * 480。不知道爲什麼。 – Niakros
我不確定MediaCodec,但通常0是自動的,1是I幀的每一幀。如果我錯了,請忽略此評論。 – szatmary