Linux 下编译 FFmpeg 详细说明

前言:

       这里说明一下,肯定有很多人在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__AN DROID_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

 

 

 

发布了63 篇原创文章 · 获赞 12 · 访问量 6万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览