如何解决如何在录制的 Android 视频中添加水印
我有一个应用程序可以录制视频并用一些数据覆盖预览。在录制视频时数据可能会发生变化,我希望能够在录制过程中将这些数据“烘焙”到视频本身中。真的就像水印一样。
我知道它可以在以后使用 FFMPeg 进行组合,但这相当麻烦,并且需要用户在查看视频之前等待该过程发生。
到目前为止,我还没有找到任何在 Android 上执行此操作的方法(iPhone 是的......没有那么难)。
我认为可以通过将 Camera2 馈送的流输出直接输送到 FFMpeg 来完成,但这会在功率较小的设备中陷入困境。另一种选择可能是将每个帧输出与后台线程中生成的图像组合,然后使用 OpenGL(我不知道)在结果被记录之前将它们组合起来。我猜 ImageReader.aquireLatestImage() 可能在那里工作。
从那个 android.media.image 我会转换成这样的位图:
val image: Image = reader.acquireLatestImage()
val buffer: ByteBuffer = image.getPlanes().get(0).getBuffer()
val bytes = ByteArray(buffer.capacity())
buffer.get(bytes)
val bitmapImage = BitmapFactory.decodeByteArray(bytes,bytes.size,null)
然后我会像这样组合图像:
fun combineImages(frame: Bitmap?,image: Bitmap): Bitmap? {
var cs: Bitmap? = null
var rs: Bitmap? = null
rs = Bitmap.createScaledBitmap(
frame!!,image.width + 50,image.height + 50,true
)
cs = Bitmap.createBitmap(
rs.width,rs.height,Bitmap.Config.RGB_565
)
val comboImage = Canvas(cs)
comboImage.drawBitmap(image,25,null)
comboImage.drawBitmap(rs,null)
if (rs != null) {
rs.recycle()
rs = null
}
Runtime.getRuntime().gc()
return cs
}
然后将位图转换成图片(虽然我还没有找到可以做到的方法) 然后将该图像注入 MediaRecorder.VideoSource.SURFACE(同样,不确定如何)。
这是否合理,或者是否有更好的方法,但我还没有偶然发现?
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。