1、下载源代码
http://www.ffmpeg.org/download.html#releases
由于需要和Windows平台同步,选择了相同版本的源代码,通过对比版本号:
对应头文件目录的version.h文件中版本信息,
#define LIBAVCODEC_VERSION_MAJOR 57
#define LIBAVCODEC_VERSION_MINOR 107
#define LIBAVCODEC_VERSION_MICRO 100
一次你avcodec版本号为:libavcodec 57.107.100,对应找到并下载即可
也可以下载最新的代码:http://www.ffmpeg.org/download.html,点击Download Source Code 即可。
2、解压源代码
打开终端,cd到源代码压缩文件的对应目录,执行解压缩命令:
tar -Jxf ffmpeg-3.4.7.tar.xz
(不同压缩格式文件需要执行不同的解压缩命令,具体参见:https://blog.csdn.net/xinxinNoGiveUp/article/details/86496386)
3、编译
2. Android
编译报错:
errno.h: No such file or directory
解决方法:
下载指定版本ndk:android-ndk-r14b,这个版本中有errno.h这个文件
编译报错:
报 linux/perf_event.h: No such file or directory 错误
解决方法:
linux/perf_event.h是linux平台的效能优化工具
因此在mac平台编译应禁止,在configure选项中添加--disable-linux-perf即可;
编译报错:
android-ndk-r14b/platforms/android-14/arch-arm/usr/lib/crtbegin_dynamic.o:crtbegin_dynamic.c:function _start: error: undefined reference to 'main'
解决方法:
--extra-ldflags添加-shared
编译报错:
libavformat/network.c:234:5: error: implicit declaration of function 'closesocket' [-Werror=implicit-function-declaration]
解决方法:
将configure里面的check_cflags -Werror=implicit-function-declaration删掉
编译报错:
PTHREAD_CANCEL_DISABLE' undeclared (first use in this function)
解决方法:
这个宏可能有些版本在pthread.h文件中有定义,有些没有,现在的修改方法是,找到对应的平台库头文件,添加上定义代码
#define PTHREAD_CANCEL_ENABLE 0
#define PTHREAD_CANCEL_DISABLE 1
编译报错:
fatal error: sys/sysctl.h: No such file or directory
#include
解决方法:sys/sysctl.h在安卓不支持,因此屏蔽掉,找到报错的源文件,在#include
编译报错:
解决方法:
没有报错了,哈哈,还打算接着写错误及处理方法。
以上只是简单的编译出移动端的库,若后续使用出问题还会继续更新,由于ffmpeg功能较多,可以选择性编译一些功能模块。
参考链接:
https://www.jianshu.com/p/be622d6ad865
https://blog.csdn.net/lakebobo/article/details/79607312
https://blog.csdn.net/u013571243/article/details/49202659?utm_source=blogxgwz0
https://blog.csdn.net/superbfly/article/details/52871895
https://forums.ogre3d.org/viewtopic.php?t=85551