我的目标是在Android中录制视频,并在录制时嵌入秒表。
我按照Grafika Project, CameraCaptureActivity.java 的示例,他们使用OpenGL 2.0录制一个小块以及录制视频。他们使用以下代码在OpenGL 2.0中绘制块
private static void drawExtra()
{
GLES20.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
GLES20.glEnable(GLES20.GL_SCISSOR_TEST);
GLES20.glScissor(0, 0, width / 3, height / 3);
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
GLES20.glDisable(GLES20.GL_SCISSOR_TEST);
}
以上代码在录制和保存时在视频的左下方绘制白色块。
我想要的是使用OpenGL 2.0在白框上绘制文字,这样它也会随视频一起录制。
我不了解OpenGL 2.0。需要帮助才能在视频录制的同一表面上绘制文本,这样它就会像白盒一样嵌入到它中。
答案 0 :(得分:2)
您可以在https://software.intel.com/en-us/intel-inde和Media Pack for Android上试用英特尔INDE,它是INDE的一部分,是https://software.intel.com/en-us/articles/intel-inde-media-pack-for-android-tutorials的教程。它有一个名为TextOverlayEffect的示例效果,用于将文本放在视频
上答案 1 :(得分:1)
这不是MediaCodec特有的。在OpenGL中绘制文本是一件很常见的事情。通常的方法是使用字体引擎(例如Skia)将文本渲染到纹理,然后渲染纹理。
Android Breakout使用这种方法:它将一组固定的字符串呈现给纹理,然后从该纹理渲染。大多数字符串都是完整的(“游戏结束”),但得分数字是单独处理的。特别参见this class。
如果您的字符集有限并且您对字距调整不太感兴趣(例如,英文中的ASCII文字非常出色),您可以只渲染单个字符字形,然后从中绘制。版本1.1。 “screenrecord”工具执行此操作。 (注意它是implemented in C++。)
您可以在this video中看到两者都在工作。当录制视频时,屏幕顶部的文本的初始页面和文本行被屏幕记录覆盖,一次绘制一个字符。 “准备好了吗?”带有投影的消息由游戏从单个字符串呈现。 (菜单只是使用Android框架呈现。)
您最好的办法是找到一个可以为您提供此功能的库,并拥有友好的开源许可证。