一、准备工具
- Ubuntu(18.0版本)
- NDK(r14b版本)
- ffmpeg源码(3.0.12版本)
- XShell(6版本)、Xftp(6版本)
- Android Studio(4.0版本)
二、安装和下载
1.ffmpeg下载:
ffmpeg下载链接:http://www.ffmpeg.org/download.html#releases
选择3.0.12版本/3.3.6版本(其他版本没试过)
找不到对应版本请滑到最下面选择old releases
选择版本后选择第三个开始下载
2.NDK下载:
下载链接:https://developer.android.google.cn/ndk/downloads/
在官网下面找到不受支持的NDK下载
在这里我选择R14版本(支持gcc版本的最高的ndk是NDK R17),后面的编译用到的是gcc
在这里下载Linux版本和Windows版本,Linux版本在编译FFMPEG的时候用到,Windows版本在Android Studio的项目中用到
3. XShell和Xftp下载:
下载链接: https://www.netsarang.com/zh/all-downloads/
在最下面找到家庭/学校免费
两个都选择然后会发邮件到你的邮箱
通过邮箱的链接点进去就可以直接下载
具体操作可参考(XShell新手安装教程):https://blog.csdn.net/weixin_40921797/article/details/81707409
4.XShell链接虚拟机以及脚本编译过程
操作过程这里就不说了,直接观看杨万里老师的视频(里面讲的很详细):
https://edu.csdn.net/course/play/6842/135936?spm=1002.2009.3001.4024
文章最下面附上了NDK-r14和NDK-r20的编译脚本
可能会遇到的问题:
- Linux下apt install时提示“无法获得锁”
执行以下命令:
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
-
Xshell连接虚拟机失败解决方法(先查看虚拟机是否安装了ssh)
可参考链接:
https://blog.csdn.net/qq_41570658/article/details/107483842 -
执行./build_android.sh文件出错
错误:bash: ./a.sh: /bin/bash^M: bad interpreter: No such file or directory
解决方法:执行命令sed -i "s/\r//" a.sh
更多解决方法参考:https://blog.csdn.net/zlichao/article/details/89329408
还有其他问题就不一一列出来,百度都能解决的哦
三、Android Studio上的操作
1.构建过程:
-
新建native C项目
-
创建完后会报错,因为还没有导入NDK
可以选择让AS自动下载,也可以自己手动添加,一般我是自己添加的,AS自动下载的是21版本的,我们这里用14版本 -
之后我在这里建了个Module
文件目录如下(供参考,不同版本的AS建出来的文件目录可能不一样,这里是3.6版本创建的,在后面配置CMakeList文件要注意文件路径):
具体构建过程参考杨万里老师的教程第三节(在文章最下面)
2.可能遇到的问题
-
问题1
解决方法:
首先检查CMakeLists.txt文件中的jniLibs这一部分的路径有没有写对,可以和文件管理器中的路径(在AS中右键文件Show in Explorer)对比一下。
(注:JniLibs这一部分的路径是根据CMakeLists文件所在路径再去查找的)
-
问题2
解决方法:
出现这个问题是没有找到头文件,请检查include_directories()中的路径有没有写对,同样是根据CMakeLists文件的位置再去查找include的路径,可以打开文件管理器比较一下。 -
问题3
解决方法:
在build.gradle文件中的android中添加:
packagingOptions{
pickFirst 'lib/arm64-v8a/libavcodec.so'
pickFirst 'lib/arm64-v8a/libavdevice.so'
pickFirst 'lib/arm64-v8a/libavfilter.so'
pickFirst 'lib/arm64-v8a/libavformat.so'
pickFirst 'lib/arm64-v8a/libavutil.so'
pickFirst 'lib/arm64-v8a/libswresample.so'
pickFirst 'lib/arm64-v8a/bswscale.so'
pickFirst 'lib/x86/libavcodec.so'
pickFirst 'lib/x86/libavdevice.so'
pickFirst 'lib/x86/libavfilter.so'
pickFirst 'lib/x86/libavformat.so'
pickFirst 'lib/x86/libavutil.so'
pickFirst 'lib/x86/libswresample.so'
pickFirst 'lib/x86/libswscale.so'
}
(注:这个问题是在Android Studio4.0版本才会出现的问题,我在2.3\3.5\3.6版本中没有遇到这个问题,,具体原因我也不知道)
- 后面还有遇到问题的话再补充~
四、总结
因为工作需要学习了FFMPEG,在移植到安卓平台时遇到了很多问题,在网上找了好多资料,资料都比较碎,花了四五天的时间最后才创建成功,希望这篇文章可以对你有帮助~
最后,附上一些学习链接:
- 雷霄骅音视频编码技术链接:
(1)视音频编解码技术零基础学习方法:
https://blog.csdn.net/leixiaohua1020/article/details/18893769
(2)FFMPEG视音频编解码零基础学习方法:
https://blog.csdn.net/leixiaohua1020/article/details/15811977 - 杨万里老师视频链接:
https://edu.csdn.net/course/play/6842/135936?spm=1002.2009.3001.4024 - Android FFmpeg系列(里面含有例子以及源码)链接:
https://blog.csdn.net/JohanMan/articldetails/83091706 - Android中各种CPU架构的比较:
https://blog.csdn.net/YoungHong1992/article/details/90083194 - CMake用法总结
https://www.cnblogs.com/ZY-Dream/p/11232779.html - NDK编译脚本
NDK-r14:https://blog.csdn.net/ChaoLi_Chen/article/details/103458140
NDK-r20:https://zhuanlan.zhihu.com/p/76462890 - 顺便推荐一个模拟器Genymotion
安装教程:https://www.cnblogs.com/whycxb/p/6850454.html
Genymotion解决虚拟镜像下载速度慢/失败方法:
https://www.jianshu.com/p/ce4b1fede738