Android MediaMuxer подключает поверхность к входу кодека

Хорошо, я просмотрел пример Фаддена реализации Android MediaMux. Я не уверен, как передать мою сцену на вход поверхности для мультиплексированного кодека MP4. Я работаю над аудиопроцессором, который потребляет аудио и видео ввод/вывод, поэтому MediaRecord не работает, но MediaMux звучит как жизнеспособное решение.

Из кодека создайте inputSurface:

videoInputSurface = codec.createInputSurface();

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

myGLSurface = myGLView.getHolder().getSurface();

но это не устанавливает поверхность. Просто схватывает. Есть ли простой способ заставить myGLSurface писать в videoInputSurface.

Чтобы еще больше усложнить ситуацию, у меня есть cameraPreview, добавляемый в ту же группу просмотра, vg, myGLView записывается в:

vg.addView(mCameraPreview);

И myGLView настроен на прозрачность, чтобы сцена openGL накладывалась поверх cameraPreview.

myGLView.getHolder().setFormat(PixelFormat.TRANSLUCENT);

Есть ли простой способ добраться до поверхностного элемента vg? Проще говоря, что пишется в кадр vg на videoInputSurface для кодека?

Спасибо,


person HPP    schedule 27.09.2013    source источник
comment
Просто для ясности: вы хотите брать кадры с камеры, рисовать поверх них с помощью OpenGL и отправлять результат видеокодеру? Это тоже должно отображаться на экране? (Может помочь перефразировать вопрос с точки зрения того, что вы пытаетесь сделать, а не описывать то, что вы уже реализовали.)   -  person fadden    schedule 27.09.2013
comment
Да, это правильно, брать кадры с камеры, рисовать поверх через OpenGL и отправлять в видеокодер ... и, очевидно, нуждается в предварительном просмотре или отображении. Я мог бы написать о том, что я пытаюсь сделать, но я уверен, что это еще больше напортачит, поэтому придерживаюсь основ.   -  person HPP    schedule 29.09.2013


Ответы (1)


Попробуйте посмотреть на это. Первый пример показывает, как рисовать с помощью команд OpenGL ES на входной поверхности кодека для записи MediaMuxer в файл MP4.

person Dmitry Sedukhin    schedule 27.09.2013
comment
Хорошо, позвольте мне посмотреть, правильно ли я понял. после того, как я создаю поверхность кодека, я использую ее для создания eglsurface в моем материале openGL, а затем просто меняю местами буферы каждый раз, когда я хочу, чтобы то, что я рисовал, отображалось в кодеке? Поднимет ли это мой cameraPreview или мне нужно будет отправить его в текстуру openGL? - person HPP; 27.09.2013
comment
Когда вы посмотрите на пример, вы увидите функцию testEncodeVideoToMp4. Если у вас есть средство визуализации Open GL, вам необходимо выполнить команды из onSurfaceCreated и onSurfaceChanged перед основным циклом for, а команды из onDrawFrame переместятся в generateSurfaceFrame. функция. - person Dmitry Sedukhin; 28.09.2013