Android MediaMuxer将表面连接到编解码器输入

Android MediaMuxer将表面连接到编解码器输入,android,opengl-es,android-mediacodec,muxer,Android,Opengl Es,Android Mediacodec,Muxer,好的,我已经回顾了Android MediaMux的实现。我不知道如何将我的场景输入到MP4混合编解码器的曲面输入中。我正在开发一个音频处理器,它会消耗音频和视频I/O,因此MediaRecord会失败,但MediaMux听起来是一个可行的解决方案 从编解码器创建inputSurface: videoInputSurface = codec.createInputSurface(); 我已经实现了openGLSurfaceView。我可以通过调用以下命令从视图中获取曲面: myGLSurfac

好的,我已经回顾了Android MediaMux的实现。我不知道如何将我的场景输入到MP4混合编解码器的曲面输入中。我正在开发一个音频处理器,它会消耗音频和视频I/O,因此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的表面元素?简单地说,在videoInputSurface上为编解码器写入vg帧的内容是什么


谢谢,

试试看。第一个演示如何使用OpenGL ES命令在编解码器输入表面上绘制,以通过MediaMuxer将其记录到MP4文件。

只是为了澄清一点:您想从相机中获取帧,使用OpenGL在帧的顶部绘制,然后将结果发送到视频编码器?这也需要出现在屏幕上吗?(这可能有助于根据您正在尝试做的事情来重新表述问题,而不是描述您目前已经实现了什么。)是的,这是正确的,从相机中获取帧,通过OpenGL在顶部绘制,然后发送到视频编码器。。。显然需要预览或显示。我可以写下我想做的事情,但我相信这会把事情搞得更糟,所以坚持基本原则。好吧,让我看看我的想法是否正确。在我创建了编解码器表面之后,我用它在我的openGL文件中创建了一个eglsurface,然后每次我想把我画的东西呈现给编解码器时,就简单地交换缓冲区?这将拿起我的cameraPreview,还是我需要将其推到openGL纹理中?当您查看示例时,您可以看到TestEncodeOtomp4函数。如果您有OpenGL渲染器,则需要在主for循环之前执行onSurfaceCreated和onSurfaceChanged中的命令,并将onDrawFrame中的命令移动到generateSurfaceFrame函数中。