Android MediaCodec кодирует и декодирует в асинхронном режиме

Я пытаюсь декодировать видео из файла и кодировать его в другой формат сMediaCodec в новомАсинхронный режим поддерживается в API уровня 21 и выше (Android OS 5.0 Lollipop).

Есть много примеров для этого вСинхронный режим на таких сайтах, какБольшая пластинкаGoogleGrafikaи десятки ответов на StackOverflow, но ни один из них не поддерживает асинхронный режим.

Мне не нужно отображать видео во время процесса.

Я считаю, что общая процедура заключается в чтении файла сMediaExtractor в качестве входа вMediaCodec(декодер), разрешить вывод декодера вSurface это также общий вклад вMediaCodec(кодировщик), а затем, наконец, написать выходной файл кодировщика черезMediaMuxer,Surface создается во время настройки кодера и используется совместно с декодером.

Я могу декодировать видео вTextureView, но делясьSurface с кодером вместо экрана не удалось.

Я настраиваюMediaCodec.Callback()для обоих моих кодеков. Я считаю, что проблема в том, что я не знаю, что делать в обратном вызове кодировщика.onInputBufferAvailable() функция. Я не то, что (или знаю, как) копировать данные изSurface в кодировщик - это должно произойти автоматически (как это делается на выходе декодера сcodec.releaseOutputBuffer(outputBufferId, true);). Тем не менее, я считаю, чтоonInputBufferAvailable требует звонкаcodec.queueInputBuffer для того, чтобы функционировать. Я просто не знаю, как установить параметры, не получая данные от чего-то вродеMediaExtractor как используется на стороне декодирования.

Если у вас естьПример, который открывает видеофайл, декодирует его, кодирует его в другое разрешение или формат с использованием асинхронногоMediaCodec обратные вызовы, а затем сохраняет его в виде файлаПожалуйста, поделитесь своим примером кода.

===РЕДАКТИРОВАТЬ ===

Вот рабочий пример в синхронном режиме того, что я пытаюсь сделать в асинхронном режиме: ExtractDecodeEditEncodeMuxTest.java:https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/ExtractDecodeEditEncodeMuxTest.java Этот пример работает в моем приложении

Ответы на вопрос(2)

Ваш ответ на вопрос