2015-11-30 6 views
1

Я искал часы. Я просто хочу работать с декодированием/кодировкой записанного фильма. Возможно ли это на android 4.1? Теперь я пишу только несколько килобайт в файл mp4. Нет ошибок.Кодирование/декодирование буфера в буфер с помощью андроида 4.1 (API 16)

После этого я буду использовать KEY_FRAME_RATE и KEY_I_FRAME_INTERVAL, чтобы поместить его в замедленное движение.

Я использовал mediaExtractor для настройки MediaCodec. я вижу 3 шага (см суть для полного кода):

1./

encoder.dequeueInputBuffer(5000); 
extractor.readSampleData(inputBuf, offset); 
ptsUsec2 = extractor.getSampleTime(); 
encoder.queueInputBuffer(inputBufIndex, ...); 

2./

encoder.dequeueOutputBuffer(info, 5000); 
ByteBuffer encodedData = encoderOutputBuffers[encoderStatus]; 
//i write encodedData to a FileOutputStream (to save the MP4); 
decoder.queueInputBuffer(inputBufIndex, ...); 

3./

decoder.dequeueOutputBuffer(info, 5000); 
decoder.releaseOutputBuffer(decoderStatus, ...); 

здесь является полная функция i, измененная из файла EncodeDecodeTest Google: gist

Спасибо за помощь, Felix

ответ

1

Некоторая дополнительная информация доступна на bigflake. В частности, FAQ item #9.

Формат фреймов, выходящих из декодера MediaCodec, не гарантированно будет полезен. Многие популярные устройства декодируют данные в проприетарный формат YUV, поэтому функция checkFrame() в буфере-буфере не всегда может проверить результаты. Вы ожидаете, что кодировщик MediaCodec сможет принимать кадры, выводимые декодером, но это не гарантируется.

Кодирование по API 18+ обычно намного проще, потому что вы можете работать с поверхностью, а не с ByteBuffer.

Конечно, если все, что вы хотите - это замедленное видео, вам не нужно декодировать и перекодировать поток H.264. Все, что вам нужно сделать, это изменить метки времени представления, которые находятся в оболочке .mp4. В API 18+ вы можете извлечь с помощью MediaExtractor и сразу же закодировать с помощью MediaMuxer без участия MediaCodec. В API 16 MediaMuxer не существует, поэтому вам понадобится другой способ обернуть H.264 как .mp4.

Если, конечно, у вас есть отвращение к видео с переменной частотой кадров, и в этом случае вам потребуется перекодировать его с повторяющимися кадрами «замедленного движения» (и соответствующими временными метками). Значения KEY_FRAME_RATE и KEY_I_FRAME_INTERVAL не помогут вам - они устанавливаются при настройке энкодера и не влияют на синхронизацию кадров.

+0

спасибо fadden, я предполагаю, что [mp4parser] (https://github.com/sannies/mp4parser) даст мне эту обертку mp4? – flieks

+0

[это [(http://andrey.chernih.me/2014/06/28/video-recording-and-processing-in-android/) кажется решением, но andrey chernih не предоставил все части (источника код), чтобы соответствовать головоломке вместе – flieks

+0

спасибо fadden, что вы указали мне в правильном направлении (как для материала оберток, не нужно кодировать) Я нашел его здесь. https://github.com/sannies/mp4parser/issues/144 – flieks

 Смежные вопросы

  • Нет связанных вопросов^_^