FFmpeg入门知识(二):Windows环境下编译FFMPEG源码

主要参考https://blog.csdn.net/qq_38261174/article/details/83210458

主要参考的上面大神的操作,不过由于环境不一样,有些采坑点增加,我的电脑是win10系统。

一.所以我们总共需要下载的东西有:

接下来讲具体流程,如何下载?如何安装?如何配置环境变量,如何检验配置成功?最终到如何编译使用?

二.NDK配置

1.下载ndk压缩包到随便一个盘的一个文件夹,并解压缩了。

 

2.配置环境变量

D:\Android\android-ndk-r14b;

3.检验是否配置成功

在cmd命令行输入   ndk-build    ,出现如下情况,则表示配置成功。

 三.MinGW下载安装配置

1.下载

2.得到一个.exe文件(不管你放在哪),点开,然后选择安装位置。

恩,我到这里就进行不下去了,网速不给力,安装不上,所以去找离线安装方法https://blog.csdn.net/Leo_LiangXuYuan/article/details/86763735这哥们给了离线安装方法,也是好用的,但如果你用这个,那你后续会遇到没有msys.bat,缺少yasm.exe等尴尬情况,我就都遇上了,所以我把这些都下载好了整理到一起https://download.csdn.net/download/wozuihaole/11419501,下载后解压文件,然后分别解压里面的三个压缩包,mingw64随便放在一个目录下,将msys放到mingw64目录下,将yasm.exe放到mingw64/bin目录下

3.添加环境变量

C:\mingw64; (自己的解压保存路径)

4.验证是否配置成功

运行CMD,命令:gcc -v

四、FFMPEG源码下载,及修改configure文件,及创建build_android.sh脚本文件

1.下载,你可以点击这里下载最新版本源码

也可以点击这里下载历史版本

 然后解压到随便什么文件夹里,我的放这里:D:\ffmpegSource\ffmpeg-3.3.9

2.新建一个 build_android.sh 脚本文件 , 用于配置及编译使用 (名字不唯一)

3.build_android.sh 脚本文件里面的内容如下:你也可以百度有其它的内容,这个不唯一,但是第一次尝试编译的时候还是建议用下面这个少走一些坑,等熟练后可以选择编译内容再重新编译。

#!/bin/bash
make clean
export NDK=D:/Android/android-ndk-r14b
export SYSROOT=$NDK/platforms/android-14/arch-arm
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
export CPU=arm
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"

./configure --target-os=linux \
--prefix=$PREFIX --arch=arm \
--disable-doc \
--enable-shared \
--disable-static \
--disable-yasm \
--disable-symver \
--enable-gpl \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install

 4.打开C:\mingw64\msys\msys.bat 而不是cmd.

进入到ffmpeg源码文件夹

然后输入 ./build_android.sh,然后回车,这里要等很久,可以放一边先干点别的,等个半个多小时也很正常,不要因为没反应而退出。

之后还有可能会出现下面的情况,不过没关系,不要动等着就好了。

5.编译完成,会在ffmpeg源码文件夹中生成一个android文件

其/android/arm/lib目录下就是保存的.so文件但是你会发现这些.so文件后面还会有些数字(实际上是一些版本号信息),这些.so文件不能直接在android上用。接下来就是改掉这些后缀,直接去掉肯定是不行的,所以继续。

 

6.进入ffmpeg源码文件夹,修改configure文件:

打开文件后查找build,找到有一行是:# build settings

修改下面的内容

 

# 原来的配置内容:
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
 
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
 
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
 
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'
 
#替换后的内容:
 
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
 
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
 
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
 
SLIB_INSTALL_LINKS='$(SLIBNAME)'

7.删除之前的android文件夹,然后重复第4步就好了。删除android文件夹的时候用命令行:rm -rf android

五、常见错误

1.错误1少文件

makefile:2: ffbuild/config.mak: no such file or directory

解决方法:
先不要执行make和make install,第一步先在ffmpeg-4.1下执行./configure,该命令会自动生成缺少的文件。如果你用的是我的提供的方法是不会遇到这个问题的,因为build_android.sh文件中已经都帮你写好了,不用你一行行的敲命令行。

2.错误2

../libavutil/libm.h:62: error: static declaration of 'lrint' follows non-static declaration
../libavutil/libm.h:69: error: static declaration of 'lrintf' follows non-static declaration
../libavutil/libm.h:76: error: static declaration of 'round' follows non-static declaration
../libavutil/libm.h:83: error: static declaration of 'roundf' follows non-static declaration
./libavutil/libm.h:90: error: static declaration of 'truncf' follows non-static declaration

解决方法:
config.h搜索lrint、lrintf、round、roundf等对应的字符

#define HAVE_LLRINT 1
#define HAVE_LLRINTF 1
#define HAVE_LRINT 1
#define HAVE_LRINTF 1
#define HAVE_ROUND 1
#define HAVE_ROUNDF 1

将对应的值改为1即可

3.错误3

ffmpeg yasm not found, use --disable-yasm

解决方法:
下载yasm ,重命名为yasm.exe ,放到MinGW\bin 目录下

4.错误4

libavformat/os_support.c: In function 'ff_gai_strerror':
libavformat/os_support.c:194:10: error: 'ERROR_NOT_ENOUGH_MEMORY' undeclared (first use in this function)

解决方法:

打开libavformat/os_support.h 文件,在其中增加 #include <winerror.h>

5.错误5

ffbuild/common.mak:60: recipe for target 'libavdevice/alldevices.o' failed
make: *** [libavdevice/alldevices.o] Error 1

解决方法:

我看网上有人说是ndk版本太高,换到14以下就好了,我也试了下,但是没解决。后来是先不修改configure文件内容编译出来带版本号的.so然后再修改configure文件内容,之后用rm -rf android命令删除android文件夹,再执行./build_android.sh才编译出来能用的版本的。

六、在androidStudio中使用.so文件,验证.so文件是否可用

直接参考这篇文章https://blog.csdn.net/qq_38261174/article/details/83273409

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值