Я использую MediaCodec в своем проекте для кодирования видео с камеры. По некоторым причинам мне нужно установить KEY_I_FRAME_INTERVAL равным 0, а это означает, что каждый кадр в записанном видео mp4 будет ключевым фреймом (ключевой кадр содержит все изображение, а не только инкрементную разницу с предыдущим кадром).MediaCodec: Значение MediaFormat Значение KEY_I_FRAME_INTERVAL игнорируется
И вот я встречаюсь с проблемой: на nexus 10, nexus 7, xiaomi redmi 2, asus zenphone 5, галактика a5 все в порядке. Но lenovo vibe 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();
По данным Интернета, на этом устройстве используется набор микросхем Mediatek MT6752. Недавно я видел некоторые жалобы на проблемы с кодированием видео в MediaTek (http://stackoverflow.com/questions/34891420/, http://stackoverflow.com/questions/35030050/). – fadden
@fadden Это похоже на то, что проще избежать чипсетов MT. Я пробовал lenovo a536, это althougth работает на чипсете MT, и у него такая же проблема плюс я не могу конвертировать 720p в 720 * 480. Пока не знаю, почему. – Niakros
Я не уверен в MediaCodec, но обычно 0 - это auto, а 1 - каждый кадр I кадра. Игнорируйте этот комментарий, если я ошибаюсь. – szatmary