Java — Android — получить кадры из MediaPlayer, играющие на SurfaceView, чтобы передать их в собственный код C ++

Как описано в заголовке, я пытаюсь получить MediaPlayer кадры (во время воспроизведения) и передать их в мой собственный код C ++ (используя JNI).

Итак, я использую MediaPlayer а также «setDisplay(SurfaceView)«метод рисования пикселей на SurfaceView,

Во время воспроизведения видео я используюgetDrawingCacheметод SurfaceView чтобы получить последние пиксели видеокадра. Но я читал, что растровое изображение всегда будет черным.

Поэтому мой вопрос: возможно ли получить последний кадр, отображаемый MediaPlayer, чтобы передать его в C ++ код?

PS: я должен использовать API уровня 8

Спасибо

1

Решение

Начиная с Android 4.1 они добавили MediaCodec Api, который позволяет вам получить доступ практически ко всему.

А в Android 4.3 добавлена ​​возможность получать поток с поверхности.

http://developer.android.com/reference/android/media/MediaCodec.html

До этого вы в значительной степени застряли. Вы можете попробовать использовать ffmpeg + JNI через решение NDK.
Это кажется довольно трудным для выполнения, но хорошая новость в том, что если вы сделаете это, ваши фреймы будут уже прочитаны на уровне C ++.

2

Другие решения

Других решений пока нет …