我的目标是在录制带Camera2 API
的视频(例如日期/时间,用户ID等)后获得的视频输出文件中添加一些文字信息。我已经使用camera API
检查了一些有关如何执行此操作的参考资料,但我没有找到有关如何使用Camera2 API
实现此目的的任何信息。任何人都可以帮助我吗?
答案 0 :(得分:2)
您提供的有关如何使用Camera API实现解决方案的链接也适用于Camera2 API
。您应该生成一个GLSurfaceView
,其中包含您想要与GLSurfaceView.Renderer
一起实现的信息,以OpenGL
处理您相机的每一帧。
配置好表面后,您应该从Surface
生成新的SurfaceTexture
:
Surface videoSurface = new Surface(surfaceGLTexture);
之后,您可以createCaptureSession
与Surface
和CameraCaptureSession.StateCallback()
一起使用CameraDevice.TEMPLATE_RECORD
中的CaptureRequest.Builder
生成视频预览。
答案 1 :(得分:2)
看看grafica。具体看TextureMovieEncoder.java。将private void drawBox(int posn)
中的代码替换为此问题的最佳答案中的代码:
Draw text in OpenGL ES
复制在此作为参考:
// Create an empty, mutable bitmap
Bitmap bitmap = Bitmap.createBitmap(256, 256, Bitmap.Config.ARGB_4444);
// get a canvas to paint over the bitmap
Canvas canvas = new Canvas(bitmap);
bitmap.eraseColor(0);
// get a background image from resources
// note the image format must match the bitmap format
Drawable background = context.getResources().getDrawable(R.drawable.background);
background.setBounds(0, 0, 256, 256);
background.draw(canvas); // draw the background to our bitmap
// Draw the text
Paint textPaint = new Paint();
textPaint.setTextSize(32);
textPaint.setAntiAlias(true);
textPaint.setARGB(0xff, 0x00, 0x00, 0x00);
// draw the text centered
canvas.drawText("Hello World", 16,112, textPaint);
//Generate one texture pointer...
gl.glGenTextures(1, textures, 0);
//...and bind it to our array
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
//Create Nearest Filtered Texture
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
//Different possible texture parameters, e.g. GL10.GL_CLAMP_TO_EDGE
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);
//Use the Android GLUtils to specify a two-dimensional texture image from our bitmap
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
//Clean up
bitmap.recycle();
答案 2 :(得分:0)
同样的方法很有用 - 相机2 API需要Surface绘制,但你可以从SurfaceTexture创建一个:
Surface s = new Surface(mSurfaceTexture);
然后你可以将这个Surface传递给camera2 CameraDevice.createCaptureSession()调用;有关要修改的基本录制应用,请参阅Camera2Video。
从GL渲染中,您必须将数据发送到视频编码器。
答案 3 :(得分:0)
FFMPEG提供了太多你可以做你想做的事情。请试试这个工具。可能它会帮助你。我建议你。请检查此链接: