Android编译X264、fdkaac和FFmpeg

来源:互联网 发布:天津爆炸 知乎 编辑:程序博客网 时间:2024/05/20 06:41

先放一下FFmpeg的地址:FFmpeg链接

最近刚好要做摄像头的采集编码以及rtsp推流。这里主要用到了ffmeng进行压缩和推流,x264对视频编码,音频编码采用fak-acc。本文主要记录一下交叉编译ffmeng的过程。

环境配置

此次编译还是在linux上完成。需要VMware和ubuntu系统。

配置ndk环境可以参考上一篇文章ijkplayer编译。

编译前先下载 FFmpeg 和 fdk-aac 和 x264 的源码。

下载FFmpeg源码以后,需要对源码中的configure文件进行修改,这样编译出来的so文件名才能被Android平台识别。

SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'  LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'  SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'  SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'

替换为:

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'  LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'  SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'  SLIB_INSTALL_LINKS='$(SLIBNAME)'

如下图:build目录用来放置编译后的文件,.sh文件是对应的脚本文件

开始编译

编译fdkaac

1.配置脚本(对应的脚本不需要放在fdkaac文件里面,放在平级目录也是可以的),脚本网上有很多,我的脚本是公司大佬自己写的,编译的时候需要按照不用cpu架构编译。

打开命令终端: 切换到ffmeng目录(我防止源码和脚本文件的目录)

输入

./build_fdkaac.sh "arm64" 最后arm64代表cpu架构类型

依次将自己需要的类型编译出来。生成的文件在build里面

编译x264

编译时还是要在对应的目录下,编译方法和上面一样

./build_x264.sh "arm64" 

生成的文件在build下面

编译FFmpeg

输入

 ./build_ffmpeg_andriod.sh

编译完成

可以在build目录下查看

如果编译出来是如下.a文件

请检查脚本文件中配置 (脚本网上有很多,我的脚本是公司自己编写的就不放出来了)。

--enable-static:生成静态链接库--enable-shared:生成动态链接库静态库的命名规则通常为lib*.a动态库的命名通常是*.so

我们需要so文件 只需将配置改成上图所示即可。

最后编译出来so

将so导入AndroidStudio中jni调用即可。

原创粉丝点击