基于Simple-Camera的Android项目添加视频自定义元数据标签求助
为Simple-Camera添加自定义元数据的实现方法
一、图片文件添加元数据(使用Android原生ExifInterface)
Simple-Camera拍照生成的JPG文件,可通过Android自带的ExifInterface快速添加自定义注释或元数据:
定位图片保存逻辑
在项目中找到拍照完成后处理文件的代码(比如CameraFragment的savePicture方法附近),拿到生成图片的绝对路径。添加元数据代码
import android.media.ExifInterface fun addImageMetadata(imagePath: String, comment: String) { try { val exif = ExifInterface(imagePath) // 使用Exif标准的UserComment字段存储注释,兼容性更好 exif.setAttribute(ExifInterface.TAG_USER_COMMENT, comment) // 若需自定义键值对,可直接设置自定义键(部分设备可能不兼容) // exif.setAttribute("CustomComment", comment) exif.saveAttributes() } catch (e: Exception) { e.printStackTrace() } }
在图片保存完成后调用该方法,传入路径和你的注释内容即可。
二、视频文件添加元数据(使用mp4parser)
针对MP4视频,mp4parser可直接操作文件元数据,具体步骤如下:
- 添加依赖
在Module级别的build.gradle中引入mp4parser:
implementation "com.googlecode.mp4parser:isoparser:1.1.22"
- 编写视频元数据修改代码
import com.googlecode.mp4parser.IsoFile import com.googlecode.mp4parser.boxes.apple.AppleItemListBox import com.googlecode.mp4parser.boxes.apple.AppleUserDataBox import com.googlecode.mp4parser.boxes.apple.AppleCommentBox import java.io.File import java.io.FileOutputStream fun addVideoMetadata(videoPath: String, comment: String) { val isoFile = IsoFile(videoPath) // 获取或创建用户数据盒子(udta) val udta = isoFile.getBoxes(AppleUserDataBox::class.java).firstOrNull() ?: run { val newUdta = AppleUserDataBox() isoFile.addBox(newUdta) newUdta } // 获取或创建项目列表盒子(ilst) val ilst = udta.getBoxes(AppleItemListBox::class.java).firstOrNull() ?: run { val newIlst = AppleItemListBox() udta.addBox(newIlst) newIlst } // 移除已有注释(如需更新) ilst.boxes.removeAll { it is AppleCommentBox } // 添加新注释 val commentBox = AppleCommentBox() commentBox.data = comment.toByteArray(Charsets.UTF_8) ilst.addBox(commentBox) // 保存修改后的文件 val tempFile = File.createTempFile("temp_video", ".mp4") FileOutputStream(tempFile).use { os -> isoFile.writeContainer(os) } isoFile.close() // 替换原文件 val originalFile = File(videoPath) if (originalFile.delete() && tempFile.renameTo(originalFile)) { // 替换成功 } else { tempFile.delete() } }
这段代码通过操作MP4的用户数据盒子,添加苹果标准的注释字段,也可根据需求自定义元数据盒子。
- 集成到项目
找到视频录制完成后的文件处理逻辑(比如VideoFragment中录制结束的回调),调用上述方法传入视频路径和注释内容。
三、注意事项
- 图片元数据优先使用标准的
TAG_USER_COMMENT,自定义键可能存在兼容性问题。 - 视频元数据修改涉及文件替换,建议在后台线程执行,避免阻塞主线程。
- Android 10及以上需注意文件权限,优先使用MediaStore API处理文件操作。
内容的提问来源于stack exchange,提问作者Richard Kamere
相关产品推荐
相关产品推荐

