2016-08-03 10 views
0

Мне нужно закодировать серию из 10 растровых изображений в видео с помощью Mediacodec. Я не хочу использовать FFmpeg или Jcodec, потому что он очень медленный.Кодировать изображения на видео (Mediacodec)

Я искал в Интернете, но не могу найти полностью рабочий пример кода, который я могу изменить.

Вот что я пробовал:

mMediaCodec = MediaCodec.createEncoderByType("video/avc"); 
mMediaFormat = MediaFormat.createVideoFormat("video/avc", 320, 240); 
mMediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 125000); 
mMediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15); 
mMediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,  MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar); 
mMediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5); 
mMediaCodec.configure(mMediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); 
mMediaCodec.start(); 
mInputBuffers = mMediaCodec.getInputBuffers(); 

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
image.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); // image is the bitmap 
    byte[] input = byteArrayOutputStream.toByteArray(); 

    int inputBufferIndex = mMediaCodec.dequeueInputBuffer(-1); 
    if (inputBufferIndex >= 0) { 
    ByteBuffer inputBuffer = mInputBuffers[inputBufferIndex]; 
    inputBuffer.clear(); 
    inputBuffer.put(input); 
    mMediaCodec.queueInputBuffer(inputBufferIndex, 0, input.length, 0, 0); 
    } 
+0

Вы должны отредактировать свой вопрос и добавить дополнительные сведения о проблеме, с которой вы сталкиваетесь, используя пример кода. BTW: 10 снимков означают 10 кадров и с частотой кадров 15 кадров в секунду, тогда вы получите видео с 0,67 секунды ... – Robert

ответ

0

Ваш пример кода создает кодировщик, который ожидает YUV420 буферов изображения, но вы питаетесь его PNG сжатых данных (которые кстати только формат файла прославил ZIP , а не image формат представления).

Вы должны преобразовать каждый пиксель растрового изображения из ARGB в YUV и передать этот буфер в кодировщик. Очевидно, что они должны совпадать с шириной и высотой кадра в настройке кодировщика.