Recording a Surface using MediaCodec

时间秒杀一切 提交于 2019-11-29 11:52:23

问题


So, In my application, I am able to show effects(like blur filter, gaussian) to video that comes from Camera using GPUImage library.

Basically, I (library) will take the input from the Camera, get's the raw byte data, converts it into RGBA format from YUV format, then applies effects to this image and displays on the Surface of GLSurfaceView using OpenGL. finally, to the user, it looks like a video with effects applied.

Now I want to record the frames of Surface as a video using MediaCodec API.

but this discussion says that we can not pass a predefined Surface to the MediaCodec.

I have seen some samples at bigflake where he is creating Surface using MediaCodec.createInputSurface() but for me, Surface comes from the GLSurfaceView.

So, how can I record a frames of a Surface as a video?

I will record the audio parallelly, merge that video and audio using FFMPEG and present to the user as a Video with effects applied.


回答1:


You can see a complete example of this in Grafika.

In particular, the "Show + capture camera" activity records camera output to .mp4. It also demonstrates applying some simple image processing techniques in the GL shader. It uses a GLSurfaceView and a convoluted dance to keep the recording going across orientation changes.

Also possibly of interest, the "Record GL app with FBO" activity records OpenGL ES rendering a couple different ways. It uses plain SurfaceView and is much more straightforward.



来源:https://stackoverflow.com/questions/21525859/recording-a-surface-using-mediacodec

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!