Вариант 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 не является прямым. !