FFMPEG移植到Android Studio4.0

一、准备工具

  • 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

还有其他问题就不一一列出来,百度都能解决的哦

三、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,在移植到安卓平台时遇到了很多问题,在网上找了好多资料,资料都比较碎,花了四五天的时间最后才创建成功,希望这篇文章可以对你有帮助~

最后,附上一些学习链接:

猜你喜欢

转载自blog.csdn.net/yyyjm_/article/details/107867583