2013-09-27 2 views
3

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

кодека создать inputSurface:

videoInputSurface = codec.createInputSurface(); 

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

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

но это не задает поверхность. Он просто хватает его. Есть ли простой способ получить myGLSurface для записи в videoInputSurface.

Чтобы еще более усложнить вещи У меня есть cameraPreview быть добавлены в тот же ViewGroup В.Г. myGLView записывается:

vg.addView(mCameraPreview); 

И myGLView устанавливается прозрачным, так что OPENGL сцена накладывается наверх в cameraPreview.

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

Есть ли простой способ получить элемент поверхности vg? Чтобы просто поместить то, что записывается в рамку vg на videoInputSurface для кодека?

Спасибо,

+1

Просто, чтобы быть ясным: вы хотите взять кадры из камеры, нарисовать поверх них с помощью OpenGL и отправить результат в видеокодер? Должно ли это появляться и на экране? (Это может помочь перефразировать вопрос с точки зрения того, что вы пытаетесь сделать, а не описывать то, что вы в настоящее время реализовали.) – fadden

+1

Да, это правильно, возьмите кадры с камеры, нарисуйте сверху через OpenGL и отправьте к видеокодеру ... и, очевидно, необходимо предварительно просмотреть или отобразить. Я мог бы написать о том, что я пытаюсь сделать, но я уверен, что это еще больше убьет его, поэтому придерживаться основ. – HPP

ответ

2

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

+1

Хорошо, дайте мне посмотреть, правильно ли я это сделаю. после того, как я создаю поверхность кодека, я использую его для создания eglsurface в моем материале openGL, а затем просто заменяю буферы каждый раз, когда хочу, чтобы я рисовал, чтобы отображать кодек? Будет ли это поднимать мой CameraPreview или мне нужно будет нажать это на текстуру openGL? – HPP

+1

Когда вы смотрите на пример, вы можете увидеть функцию _testEncodeVideoToMp4_. Если у вас есть средство визуализации Open GL, вам нужно выполнить команды от _onSurfaceCreated_ и _onSurfaceChanged_ до основного цикла forfor_for_ и команды fromDrawFrame перейти к функции _generateSurfaceFrame_. –

Смежные вопросы