【问题标题】:How to embed text while recording video in Android?如何在 Android 中录制视频时嵌入文本?
【发布时间】:2014-07-07 06:41:14
【问题描述】:

我的目标是在 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。需要帮助才能在录制视频的同一表面上绘制文本,以便它像那个白框一样嵌入其中。

【问题讨论】:

    标签: android video opengl-es android-mediacodec


    【解决方案1】:

    您可以在https://software.intel.com/en-us/intel-inde 上尝试 Intel INDE 和作为 INDE 一部分的 Android 媒体包,https://software.intel.com/en-us/articles/intel-inde-media-pack-for-android-tutorials 上的教程。它有一个名为 TextOverlayEffect 的示例效果,用于在视频上放置文本

    【讨论】:

    • @NavjotBedi 如何使用 OpenGL 2.0 绘制文本?
    • 英特尔 INDE 是否也使用 GLES 或其他方式。那个项目很困难,我们可以把那个函数复制到 Grafika CameraCaptureActivity.java 中吗?
    • 似乎是的,类扩展 github.com/INDExOS/media-for-mobile/blob/master/effects/src/… 似乎他们使用位图及其画布进行绘制,然后以某种方式在视频帧上插入带有 GLES 的位图
    【解决方案2】:

    这不是特定于 MediaCodec 的。在 OpenGL 中绘制文本是一件很常见的事情。通常的做法是使用字体引擎(例如 Skia)将文本渲染到纹理,然后渲染纹理。

    Android Breakout 使用这种方法:它将一组固定的字符串渲染到纹理,然后从该纹理进行渲染。大多数字符串都是完整的(“游戏结束”),但分数数字是单独处理的。具体见this class

    如果您的字符集有限并且您对字距调整不太感兴趣(例如,英文的 ASCII 文本效果很好),您可以只渲染单个字符字形,然后从中进行绘制。 1.1 版。 “screenrecord”工具的作用是这样做的。 (注意是implemented in C++。)

    您可以在this video 中查看两者的工作情况。在录制视频时,屏幕记录会覆盖初始文本页和屏幕顶部的文本行,一次绘制一个字符。 “准备好了吗?”带有阴影的消息由游戏从单个字符串呈现。 (菜单只是使用 Android 框架呈现的。)

    最好的办法是找到一个可以为您执行此操作并拥有友好的开源许可证的库。

    【讨论】:

    • MediaCodecmediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);mSurface = mMediaCodec.createInputSurface();mSurface.lockHardwareCanvas() 一起使用是否安全? MediaRecorder 可以做同样的事情,但它有很多错误,但似乎这种方法适用于 MediaCodec(但我只在我的手机上测试过),在这里你可以看到 MediaRecorder 的错误:stackoverflow.com/questions/51332386/…
    • 附注在 Google tracker 问题上,您可以找到我的示例应用程序来测试 MediaRecorder Video Surface Source bug issuetracker.google.com/issues/111433520 我真的希望 MediaCodec 没有这样的问题,虽然我知道 lockCanvas 有问题,但我希望它至少可以使用 lockHardwareCanvas (尽管 23 API 仅提供支持)
    猜你喜欢
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 2013-04-12
    • 1970-01-01
    • 2012-04-01
    相关资源
    最近更新 更多