在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()

Android13系统代码中如何做到录像时添加水印?给出示例代码

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

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