Извлечение / изменение видеокадров на Android - PullRequest
5 голосов
/ 29 декабря 2011

У меня есть видео файл.Я хочу получить каждый кадр видео и внести в него некоторые изменения, такие как рисование другого растрового изображения, добавление текста и т. Д.

Существует ли какой-либо API / framework для получения кадров из видео в Android?Я сделал нечто подобное в iOS, используя их AVFramework.

Если это возможно с ffmpeg, я буду использовать некоторые из доступных NDK с открытым исходным кодом.

1 Ответ

11 голосов
/ 29 декабря 2011

Вариант A:

Вы можете создать SurfaceTexture объект и прикрепить его к MediaPlayer следующим образом

myPlayer = new MediaPlayer
...
myRedirectionSurface = new Surface(mySurfaceTexture);
myPlayer->setSurface(myRedirectionSurface);

Таким образом, декодированный поток проигрывателя «перенаправляется» в SurfaceTexture, а не в SurfaceView. OnFrameAvailableListener вызывается всякий раз, когда у вас есть декодированный кадр. Чтобы получить доступ / изменить изображение, вы можете использовать методы блокировки / разблокировки Surface на myRedirectionSurface.

ВАЖНОЕ ПРИМЕЧАНИЕ: вам нужна поддержка API уровня 14, чтобы это работало!

Вариант B:

Поскольку вы указали вероятность использования ffmpeg, вы можете достичь того, что вы намереваетесь, поскольку у вас есть полный доступ к выходным кадрам декодера. Вы можете начать с порта ffmpeg RockPlayer или MoboPlayer. Но в этом варианте рендеринг видео с NDK не является прямым. !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...