确定目标
最近项目新需求,需要给视频和图片后向添加水印,而前向的添加直接在surfaceview中添加水印相关的bitmap,让每一帧都有水印,然而后向添加一时不知如何处理,所以开始寻找后向添加水印的方式.
了解分析
通过google百度,了解到ffmpeg开源框架有处理图像音频视频的能力,当然项目时间紧,只能先过一遍拿来就用,所以开始深入查询相关库,开始是ffmpeg-Android,封装到位,通过demo试错,无奈视频加水印时间太长,2s视频需要10分钟,完全不能忍.几经周折,后面发现了下面博客
,通过博客给的demo,速度可以接受,只需要修改封装成相关库即可
Android多媒体之二:jni调用ffmpeg命令
实践
有了上面那位的详细介绍,并且还提供了github上的地址,所以也就直接使用.但是提供的仅仅只是一个demo,还是需要修改一下的.
封装过并针对水印功能做了so size裁剪,可以在项目中直接使用.
https://github.com/callmeli/ffmpeg-jni
坑点
水印通过尺寸比列重建bitmap,位置通过视频的宽高比例重新计算
- ffmpeg相关包太大
注
ijkplayer github地址
ijkplayer 相关关于ffmpeg裁剪的教程
目前发现的支持android 4.2以上
项目中有些库使用了arm架构,而ffmpeg的so只保留了v7a的,所以删除了其他项目arm文件夹
1 添加 -acodec copy 保证只处理视频,音频直接拷贝.
2 子线程加载so,运行命令.主线程传递命令和相关回调