FFmpeg4Android移植封装

本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布

背景:

公司项目,iOS端说Android端拍的视频,码率不对,他无法播放。图片和视频的选择或拍摄一直用的PictureSelector,问了开源作者才知道录制的没做任何处理,直接调用的系统拍摄,只提供了设置拍摄的质量为0还是1的方法,无奈,只能想着自己压缩了。说到视频的处理,现在最火的肯定还是FFmpeg。FFmpeg的移植,不难,就是太坑了。既然移植比较麻烦,我想着能不能将FFpemg移植后封装成一个lib,以后其他项目使用直接引用,不需要再移植了,经过三天的各种折腾和测试,终于成功了。。。。

A 源码下载

首先把ffmpeg-3.2.4的源码下载下来,源码最好就下载我这个,我最开始用的官网的最新版本,build的时候老是报错,最后换成3.2.4,就不再报错了!

下载下来后解压放到纯英文路径下,然后将源码路径添加到环境变量中

B 编译FFmpeg生成.so文件

1 在main目录下新建jni文件夹
图片.png

直接点击finish自动生成

2 copy FFmpeg的源码和.mk文件到jni

将Demo中jni里的这些文件拷贝到你model中的jni,图中红色选中的三个不要复制,这个是根据项目生成的(如果你直接引用这个model,就不用管)。


图片.png
3 如图将FFmpegKit的代码copy到java工程中
图片.png
4 编译FFmpegKit

控制台中切到java文件夹目录下,输入javah com.ffmpegtest.xxx.utils.FFmpegKit (FFmpegKit的引用路径),只有在java目录下执行这行命令才能成功,直接进到Utils目录执行会报找不到.so文件,编译成功后会生成图中黑框中的两个c++文件,剪贴这两个文件到jni文件夹中

图片.png

5 创建com_ffmpegtest_www_utils_FFmpegKit.c文件
图片.png

你或许会注意到新建的文件和生成的哪个.h文件名称一致,只是格式不同。对,没错,必须一致,这是按照项目包名生成的,不能随便更改!

6 修改Android.mk和Application.mk

1 更改Android.mk中LOCAL_SRC_FILES值和FFmpeg源码路径


图片.png

2 Application.mk中,设置生成so库,这里我们只设置生成armeabi-v7a下的(其他库空格添加生成,考虑到生成的so文件都是10M+,就没设置其他的)


图片.png
6 其他配置

1 在app下的gradle中设置so库支持和路径读取:


图片.png

2 Manifest中添加版本设置(别忘了添加读写和摄像头权限)

图片.png

3 gradle.properties中添加 android.useDeprecatedNdk=true,不添加可能会爆xxx.so" is 32-bit instead of 64-bit的错误
图片.png

C 编译FFmpeg生成.so文件

以上配置完成后,就可以编译了,控制台中切换到jni目录下,执行ndk-build命令(需要配置ndk),执行完成后,会自动生成libs和obj两个文件夹,这就是我们需要的.so文件了。


这里插一句:如果编译的时候报各种警告,生成的.so是不行的,把我们上面的新建的哪个com_ffmpegtest_www_utils_FFmpegKit.c文件,随便乱删除点东西保存后执行ndk-build,然后再恢复正确,再执行ndk-build,不要问我为什么,姑且理解为编译器不识好歹!

D 总结

到此为止,FFmpeg的移植就完成了,至于怎么压缩怎么添加水印,那是FFmpeg命令行的具体应用了,大家结合着Demo和FFmpeg文档自求多福吧。Demo中的ffmpeglib已经封装好,大家可以在项目中直接import model使用(亲测没问题),避免了每次都要编译,而且独立的mk和gradle配置,免去了和其他第三方库的冲突。

十分感谢reverse_Android对此次集成的帮助和解答。

参考文章:

最简单的基于FFmpeg的移动端例子:Android HelloWorld

FFmpeg-Android拍摄压缩Demo(敲黑板)

仿微信视频拍摄UI, 基于ffmpeg的视频录制编辑(上)(api>22的情况下无法找不到so文件,慎用)

项目源码github传送门

碎碎念:诸君若是喜欢,请star,谢谢!

更多问题加群:584275290

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341