Использование MediaCodec асинхронно для декодирования и рендеринга видеофайла
Недавно начал играть с классом Android Media Codec для рендеринга видеокадров из приложения Native C++. Был в состоянии успешно декодировать и визуализировать как аудио, так и видео потоки с помощью класса Android MediaCodec, используя синхронный подход [queueInputBuffer и deququeInputBuffer].
У Android есть хороший пример того, как это сделать в приложении Native C++. Пример: SimplePlayer.cpp
Теперь я начал с реализации асинхронного подхода с использованием обратных вызовов и подачи входных потоков в кодек в этих обратных вызовах [OnInputBufferAvailable/ OnOutPutBufferAvailable].
Я искал пример кода в Интернете, и все, что я могу найти, - это ссылки, основанные на классе Java MediaCodec.
Если у кого-нибудь есть пример ссылочного кода или ссылки на асинхронное использование MediaCodec на основе C++ для рендеринга видеофайла, это было бы замечательно.
Любое руководство по этому вопросу также было бы замечательно.
1 ответ
Пример преобразования примера ExtractDecodeEditEncodeMuxTest из синхронного режима в асинхронный режим доступен по адресу https://github.com/mstorsjo/android-decodeencodetest. Смотрите историю коммитов для всех шагов, ведущих к этому.
Это не C++ и не для рендеринга, но, по крайней мере, он охватывает несколько важных аспектов.