概述
前言:
这里说明一下,肯定有很多人在Linux上编译FFmpeg的时候,遇到过很多问题,反反复复编译了很多次都编译不成功,然后网上一顿搜索,参考,结果还是不尽人意,明明是跟网上别人说的一模一样,就是不行。这里我简单说一下,因为 FFmpeg有很多版本,你下载不同的版本,去参考别人的编译过程时,跟别人的各种不一样,就会有各种问题,这里我们需要做的是,看你是想编译哪个版本,这里我下载的是FFmpeg-4.2.2 最新的,一定注意,每个版本编译的过程都有区别,这就是导致你参考 别人的怎么就是不成功的原因,我也不是很了解所有的版本,我只尝试学习了一下这个最新版本的成功了。好了,下面开始以文字的形式,详细的说明每一步的操作。若你在参考的时候,遇到问题,可以留言,或者邮箱。
此步骤仅用于编译FFmpeg 4.2.2版,编译其他版本会出现各种未知问题。Android 的 NDK 我下载的 17 的,虽然有新的版本,其实我们常用的还是17左右的,不必非要要最新的版本。
1、进入Linux系统后,先创建一个文件夹,我这里文件夹为:WwyNDK
这里我把需要的文件都放在这个文件夹下。
2、首先下载Android 的 NDK,这里建议大家下载 android-ndk-r17c-linux-x86_64.zip 注意下载17版的,不需要下载最新的,很多公司的使用都基本会在这个版本左右,最新的不稳定,如果遇到问题,也没有太多的解决办法。(如果在Linux 上命令下载完之后,显示的文件不是这个名字,貌似会比这个名字长,那就用命令把文件名改一下,顺便加一个 .zip ,然后在使用命令解压就可以了,解压之后,我把加压之后的文件夹名字改为 :android-ndk-r17c)。
3、然后下载FFmpeg 4.2.4版 地址:http://ffmpeg.org/download.html
下载完之后解压,看下载之后的名字是否为 ffmpeg-4.2.2.tar.bz2 ,不是的话,直接命令修改一下,然后进行解压。
4、然后在github 上找到这个:librtmp ,地址:https://github.com/yixia/librtmp
的,然后在还在WwyNDK 这个文件夹下,使用git命令下载 ,地址为:https://github.com/yixia/librtmp.git 。 如果没有Git 要先安装git,才能使用命令。
5、好了,上面下载完,该解压的都解压完只有,我的WwyNDK 这个文件夹下 是这样的:
android-ndk-r17c android-ndk-r17c-linux-x86_64.zip ffmpeg-4.2.2 ffmpeg-4.2.2.tar.bz2 librtmp
是这几个文件和文件夹。
6、下面先编译librtmp
1)、进入librtmp文件夹,使用命令先编辑一个文件:
vim rtmp_build.sh
内容为:
#!/bin/bash
NDK_ROOT=/root/WwyNDK/android-ndk-r17c
CPU=arm-linux-androideabi
TOOLCHAIN=$NDK_ROOT/toolchains/$CPU-4.9/prebuilt/linux-x86_64
export XCFLAGS="-isysroot $NDK_ROOT/sysroot -isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=17"
export XLDFLAGS="--sysroot=${NDK_ROOT}/platforms/android-17/arch-arm "
export CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-
make install SYS=android prefix=`pwd`/result CRYPTO= SHARED= XDEF=-DNO_SSL
然后保存。
2)、然后在当前文件夹librtmp下,创建一个文件夹 : result
命令:
mkdir result
3)、接着执行命令(开始编译这个脚本):
sh rtmp_build.sh
执行的时候,注意,看看是否有错误,上面脚本内容是我直接复制的,除了NDK路径要是改为你自己的,其他的应该都不用动。可以直接复制,然后在修改NDK的路径。
4)、执行脚本编译完成之后,进入result文件夹查看里面是否有这几个文件夹:
bin include lib man sbin
有这几个表示编译成功。
5)、下面使用 cd 进入到解压之后的ffmpeg-4.2.2文件夹下,修改configure
进入到ffmpeg-4.2.2 文件夹下之后,使用命令:
vim configure
开始编辑,如果编辑处没有显示行号,可以使用命令 :set number 就可以显示行号了,我们要根据行号直接跳到某一行。
记得使用命令显示行号以及跳转某一行时,一点不要文件处于可编辑状态,使用 Esc 按键,按一下,然后在输入命令 :
:set number
。
下面开始先跳到4210行,命令为 :4210
这几行内容为:
#set_default target_os
#if test "$target_os" = android; then
# cc_default="clang"
#fi
在前面加上 # 号注释掉,因为这里默认使用 clang进行编译,我们不让他使用clang编译
接着,我们还要注释掉一部分:
使用命令
:6256
注释掉 :
#enabled librtmp && require_pkg_config librtmp librtmp librtmp/rtmp.h RTMP_Socket
同时在签名加上# 号,这个是因为要librtmp的原因,这个会让我们的混合编译出问题。这里就把它关闭。然后保存退出。
6)、接着在ffmpeg4.2.2的目录下创建并编辑 build.sh 文件
命令 :
vim build.sh
编辑内容:
#!bin/bash
NDK_ROOT=/root/WwyNDK/android-ndk-r17c
CPU=arm-linux-androideabi
TOOLCHAIN=$NDK_ROOT/toolchains/$CPU-4.9/prebuilt/linux-x86_64
ANDROID_API=17
PREFIX=./android/armeabi-v7a/ffmpeg_rtmp
#rtmp
RTMP=/root/WwyNDK/librtmp/result
./configure
--prefix=$PREFIX
--enable-small
--disable-programs
--disable-avdevice
--disable-encoders
--disable-muxers
--disable-filters
--enable-librtmp
--enable-cross-compile
--cross-prefix=$TOOLCHAIN/bin/$CPU-
--disable-shared
--enable-static
--sysroot=$NDK_ROOT/platforms/android-$ANDROID_API/arch-arm
--extra-cflags="-isysroot $NDK_ROOT/sysroot -isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__AN DROID_API__=$ANDROID_API -U_FILE_OFFSET_BITS -DANDROID -ffunction-sections -funwind-tables -fstack-protector-s trong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Wa,--noexecstack -Wfor mat -Werror=format-security -O0 -fPIC -I$RTMP/include"
--extra-ldflags="-L$RTMP/lib"
--extra-libs="-lrtmp"
--arch=arm
--target-os=android
make clean
make install
编辑完上面内容后,保存退出,
接着在ffmpeg-4.2.2 目录下新建一个文件夹,名称为:android
然后进入这个android目录下,在新建文件夹,名称为:armeabi-v7a
然后在进入armeabi-v7a 目录下,在新建文件夹 ffmpeg_rtmp。
上面三个文件夹创建完成之后,要仔细核对一下上面的编辑build.sh 中,需要注意的就是最上面的路径配置,比如NDK_ROOT 的路径,还有PREFIX 就是我们刚创建的android目录及其下面的三级目录,还有RTMP 路径配置是我们在librtmp文件夹下面我们编译之后的result 路径。这个一点要跟自己系统上配置的路径一直,其他的可以直接复制就能用。都是我直接在编辑脚本上复制过来的。
7)、上面完成之后,就开始执行编译脚本命令
sh build.sh
这个编译时间比较长,大概需要10分钟左右。
编译完成之后,,cd 进入android 目录下,在进入armeabi-v7a,在进入ffmpeg_rtmp目录,然后查看这个目录下是否有文件,
命令 ls 我的编译之后ls 查看的下级有 include lib share 这三个文件
到这里就算编译完成了。我们可以把这些导出到Window电脑上去了。
已经就是编译的全过程,在参考的过程若有问题,可以留言或者邮件我,邮箱地址:994292178@qq.com
最后
以上就是娇气哈密瓜为你收集整理的Linux 下编译 FFmpeg 详细说明的全部内容,希望文章能够帮你解决Linux 下编译 FFmpeg 详细说明所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复