300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > FFmpeg入门知识(二):Windows环境下编译FFMPEG源码

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

时间:2023-09-16 08:35:40

相关推荐

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

主要参考/qq_38261174/article/details/83210458

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

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

NDK https://developer./ndk/downloads/ 版本r14MInGW /projects/mingw/files/ 我们公司没有外网,手机热点网速过慢下不下来,所以我后续采用的是离线下载安装的,后面讲。FFMPEG源码 /download.html

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

二.NDK配置

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

2.配置环境变量

D:\Android\android-ndk-r14b;

3.检验是否配置成功

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

三.MinGW下载安装配置

1.下载

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

恩,我到这里就进行不下去了,网速不给力,安装不上,所以去找离线安装方法/Leo_LiangXuYuan/article/details/86763735这哥们给了离线安装方法,也是好用的,但如果你用这个,那你后续会遇到没有msys.bat,缺少yasm.exe等尴尬情况,我就都遇上了,所以我把这些都下载好了整理到一起/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/bashmake cleanexport NDK=D:/Android/android-ndk-r14bexport SYSROOT=$NDK/platforms/android-14/arch-armexport TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64export CPU=armexport PREFIX=$(pwd)/android/$CPUexport 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_FLAGmake cleanmakemake 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' failedmake: *** [libavdevice/alldevices.o] Error 1

解决方法:

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

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

直接参考这篇文章/qq_38261174/article/details/83273409

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。