一、准备工具

  • 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
在这里插入图片描述
选择版本后选择第三个开始下载
FFMPEG移植到Android Studio4.0_第1张图片
2.NDK下载:

下载链接:https://developer.android.google.cn/ndk/downloads/

在官网下面找到不受支持的NDK下载
FFMPEG移植到Android Studio4.0_第2张图片
在这里我选择R14版本(支持gcc版本的最高的ndk是NDK R17),后面的编译用到的是gcc
FFMPEG移植到Android Studio4.0_第3张图片
在这里下载Linux版本和Windows版本,Linux版本在编译FFMPEG的时候用到,Windows版本在Android Studio的项目中用到

3. XShell和Xftp下载:

下载链接: https://www.netsarang.com/zh/all-downloads/

在最下面找到家庭/学校免费

两个都选择然后会发邮件到你的邮箱

通过邮箱的链接点进去就可以直接下载

FFMPEG移植到Android Studio4.0_第4张图片
FFMPEG移植到Android Studio4.0_第5张图片
具体操作可参考(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项目
    FFMPEG移植到Android Studio4.0_第6张图片
    FFMPEG移植到Android Studio4.0_第7张图片
    FFMPEG移植到Android Studio4.0_第8张图片

  • 创建完后会报错,因为还没有导入NDK
    可以选择让AS自动下载,也可以自己手动添加,一般我是自己添加的,AS自动下载的是21版本的,我们这里用14版本

  • 之后我在这里建了个Module
    文件目录如下(供参考,不同版本的AS建出来的文件目录可能不一样,这里是3.6版本创建的,在后面配置CMakeList文件要注意文件路径):
    FFMPEG移植到Android Studio4.0_第9张图片
    具体构建过程参考杨万里老师的教程第三节(在文章最下面)

2.可能遇到的问题

  • 问题1
    FFMPEG移植到Android Studio4.0_第10张图片
    解决方法:
    首先检查CMakeLists.txt文件中的jniLibs这一部分的路径有没有写对,可以和文件管理器中的路径(在AS中右键文件Show in Explorer)对比一下。
    (注:JniLibs这一部分的路径是根据CMakeLists文件所在路径再去查找的)
    FFMPEG移植到Android Studio4.0_第11张图片

  • 问题2
    FFMPEG移植到Android Studio4.0_第12张图片
    解决方法:
    出现这个问题是没有找到头文件,请检查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

更多相关文章

  1. ionic3文件目录介绍
  2. Android调用系统相机和相册,解决图片方向问题,压缩图片
  3. android从未安装的apk文件里获取信息(包信息,资源信息)
  4. 提高开发效率-使用Android Studio Template快速生成模板文件
  5. Android API开发之OpenGL开发之Android OpenGL显示STL模型文件
  6. Android 控件之ImageSwitcher图片切换器
  7. Android编程心得-图片自适应心得
  8. Android SDK Manager无法下载其他版本SDK和adb无法启动的问题
  9. android studio 使用网络版本的gradle

随机推荐

  1. android中Timer
  2. Android JNI入门第六篇——C调用Java
  3. 安卓高手应该精通那些内容
  4. Android Studio 常见问题小结
  5. Android中文API(115)——AudioFormat
  6. Android基于Java反射机制的简单ORM-Dao层
  7. droiddraw - DroidDraw is a graphical u
  8. Widget-进度条
  9. Android基于XMPP Smack openfire 开发的
  10. Failed to fetch URL http://dl-ssl.goog