我收集了一些学习用的材料,其中蕴含了很多学习,面试,中高进阶 fluuter 材料,还有很多视频详解,如果有同学想进一步理解,详情请看文末。也欢送各路大神门前来装 X。
通过这篇文章理解 c /c++ 编译器的根本应用,可能在后续移植第三方框架进行穿插编译时(编译 android 可用的库),分明的理解应该传递什么参数,怎么传递参数给编译器,各个参数的意义是什么,从而为前面音视频的深刻学习编译 ffmpeg 做好筹备工作。
无关 ffmpeg 的编译材料网上一大推,然而照着材料拷贝的运行进行编译能顺利编译出动态库或动态库产物的寥寥无几。
笔者在学习的时候也是踩了很多的坑,的确是每次编译会诞生一个放弃的念头,起因还是本人的根底学得不够扎实。
因为 ffmpeg 和 NDK 都是在一直进行迭代的,比如说 NDK 在 r18 之后之后彻底移除了 gcc(蕴含 r18 版本),ffmpeg 在 4.o 版本开始也针对 Android 平台的穿插编译默认应用 clang 编译,然而网上的很多材料都是应用 gcc 编译的。
所以如果要对照网上材料进行编译的话,保障 NDK 版本和 ffmpeg 版本甚至是编译环境工具都和作者的一样,这样会大大提高编译的成功率。
在编译胜利之后再一直尝试批改参数联合搜寻材料尝试,力求弄清楚每个参数的意义,做到举一反三。
本次编译应用的是 mac 苹果电脑,应用的 NDK 版本是 r20,ffmpeg 是从官网下载的最新版 4.2.2。
编译脚本
从 ffmpeg 官网下载好源码解压后,进入源码目录,新建 shell 脚本文件,比方
脚本内容如下:
保留后运行脚本。
运行脚本的时候可能会遇到没有权限的问题,运行命令行减少一下执行权限后再次执行即可进行编译。
如果没有报错,大略几分钟后就能看编译胜利:
编译胜利
编译胜利后在指标输入目录下会生成三个文件,如图:
编译胜利后的目录
其中目录下是应用动静库或动态库时所须要的一些头文件;
目录寄存着编译产物动静库或者动态库;
目录则寄存一些简略的 demo,咱们能够参照这些 demo 编写音视频的编解码等逻辑。
一些技巧
更多参数可在 ffmpeg 的源码目录下执行查看。
CFLAG 参数这么长,怎么来的?其实这个不必死记,能够从 AS NDK 工程的.externativeBuild/cmake/debug/armeabi-v7a/build.ninja 中拷贝,须要留神的是替换掉 NDK 的门路地址。
与网上 gcc 编译的脚本比照能够发现少了一些相似这样的参数,或者这就是 clang 的益处之一吧。