如何在Android中录制视频时嵌入文字?

时间:2014-05-19 10:31:32

标签: android video opengl-es mediacodec

我的目标是在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。需要帮助才能在视频录制的同一表面上绘制文本,这样它就会像白盒一样嵌入到它中。

2 个答案:

答案 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框架呈现。)

您最好的办法是找到一个可以为您提供此功能的库,并拥有友好的开源许可证。