在 Android 13 系统中,可以使用 MediaMuxer 类来实现录像时添加水印。以下是示例代码:

  1. 在录像前创建一个 MediaMuxer 对象,并调用 addTrack 方法添加视频轨道和音频轨道。
MediaMuxer mediaMuxer = new MediaMuxer(outputFilePath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);
int videoTrackIndex = mediaMuxer.addTrack(videoFormat);
int audioTrackIndex = mediaMuxer.addTrack(audioFormat);
mediaMuxer.start();
  1. 在录像时,在每一帧视频数据编码前,使用 Canvas 对象绘制水印,并将绘制结果作为视频数据的一部分。
while (!isStopRecording) {
    // 获取摄像头采集的一帧视频数据
    byte[] videoData = getVideoData();
    // 获取当前时间,用于绘制时间水印
    long time = System.currentTimeMillis();
    // 创建 Bitmap 对象,并将视频数据转换成 Bitmap
    Bitmap bitmap = convertToBitmap(videoData);
    // 创建 Canvas 对象,并使用 Paint 对象绘制水印
    Canvas canvas = new Canvas(bitmap);
    Paint paint = new Paint();
    paint.setColor(Color.RED);
    paint.setTextSize(50);
    canvas.drawText('Watermark', 50, 100, paint);
    canvas.drawText(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(time)), 50, 200, paint);
    // 将 Bitmap 对象转换成视频数据,并写入 MediaMuxer
    ByteBuffer buffer = ByteBuffer.allocate(bitmap.getByteCount());
    bitmap.copyPixelsToBuffer(buffer);
    buffer.rewind();
    MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
    bufferInfo.presentationTimeUs = time * 1000;
    bufferInfo.size = buffer.limit();
    bufferInfo.flags = MediaCodec.BUFFER_FLAG_KEY_FRAME;
    bufferInfo.offset = 0;
    mediaMuxer.writeSampleData(videoTrackIndex, buffer, bufferInfo);
}
  1. 在录像结束时,调用 MediaMuxer 的 stop 和 release 方法,释放资源。
mediaMuxer.stop();
mediaMuxer.release();
Android 13 录像添加水印:MediaMuxer 实现及示例代码

原文地址: https://www.cveoy.top/t/topic/oUIb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录