先放一下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调用即可。