美文网首页Android音视频系列
mac下编译Android ffmpeg 4.0版本

mac下编译Android ffmpeg 4.0版本

作者: 在雨天中守望晴天 | 来源:发表于2019-06-20 15:33 被阅读51次

    编译环境:

    macOS:10.13.6
    NDK:android-ndk-r14b
    ffmpeg:4.0版本

    一、下载或者clone ffmpeg工程

    ffmpeg的官网:
    http://ffmpeg.org/download.html#repositories

    ffmpeg官网.png

    在指定的目录下clone ffmpeg代码
    git clone https://git.ffmpeg.org/ffmpeg.git

    这个时候下载下来的ffmpeg是最新版本的,git branch -a 可以查看已经有的版本,git checkout -b ffmpeg_4.0 remotes/origin/origin/release/4.0,切换到4.0分支,也就是4.0的稳定版本。

    二、NDK下载并配置

    可以直接去官网下载
    https://developer.android.google.cn/ndk/downloads/

    这里选择了android-14b版本进行下载


    ndk下载.png

    下载完成后配置ndk环境:
    在终端输入:vi ~/.bash_profile
    输入配置ndk:

    export ANDROID_NDK_ROOT=/自己的路径/android-ndk-r14d/build
    export PATH=${PATH}:${ANDROID_NDK_ROOT}
    

    :wq完成保存输入后:source ~/.bash_profile 完成配置的保存

    修改ndk配置.png

    三、编译ffmpeg

    1.修改configure文件
    由于原先编译出来的动态库文件名的版本号在.so之后,如libavcodec.so.5.100.1,Android平台不能识别这种文件,所以需要修改文件名。
    在下载或者clone的文件夹下,找到configure文件

    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)'
    

    2.编写脚本文件
    在ffmpeg中创建一个build_android.sh的脚本

    #!/bin/bash
    ADDI_CFLAGS="-marm"
    API=22
    PLATFORM=arm-linux-androideabi
    CPU=armv7-a
    #使用自己的路径
    export TMPDIR=/Users/hfy/Documents/ffmpeg/ffmpegout
    NDK=/Users/hfy/Documents/Studio/android-ndk-r14b
    SYSROOT=$NDK/platforms/android-$API/arch-arm/
    ISYSROOT=$NDK/sysroot
    ASM=$ISYSROOT/usr/include/$PLATFORM
    TOOLCHAIN=$NDK/toolchains/$PLATFORM-4.9/prebuilt/darwin-x86_64
    #手动创建输出目录
    OUTPUT=/Users/hfy/Documents/ffmpeg/out
    function build_one
    {
    ./configure \
    --prefix=$OUTPUT \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-avdevice \
    --disable-doc \
    --disable-symver \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --target-os=android \
    --arch=arm \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-I$ASM -isysroot $ISYSROOT -Os -fpic -marm" \
    --extra-ldflags="-marm" \
    $ADDITIONAL_CONFIGURE_FLAG
     sed -i '' 's/HAVE_LRINT 0/HAVE_LRINT 1/g' config.h
    sed -i '' 's/HAVE_LRINTF 0/HAVE_LRINTF 1/g' config.h
    sed -i '' 's/HAVE_ROUND 0/HAVE_ROUND 1/g' config.h
    sed -i '' 's/HAVE_ROUNDF 0/HAVE_ROUNDF 1/g' config.h
    sed -i '' 's/HAVE_TRUNC 0/HAVE_TRUNC 1/g' config.h
    sed -i '' 's/HAVE_TRUNCF 0/HAVE_TRUNCF 1/g' config.h
    sed -i '' 's/HAVE_CBRT 0/HAVE_CBRT 1/g' config.h
    sed -i '' 's/HAVE_RINT 0/HAVE_RINT 1/g' config.h
    make clean
    # 这里是定义用几个CPU编译,我用4个,一般在5分钟之内编译完成
    make -j4
    make install
    }
    
    build_one
    
    

    完成之后,赋予build_android.sh可执行权限
    chmod a+x build_android.sh 或者 chmod 777 build_android.sh

    3、执行
    在ffmpeg目录下,先./configure,先生成*mak文件
    完成后执行./build_android.sh

    等待几分钟后,可以在输出目录中看到生成的so文件:


    生成so.png

    如果需要生成其他平台的so文件,修改build_android.sh输出的平台即可。

    错误处理参考:

    https://www.jianshu.com/p/03a9c4edc574
    https://github.com/Bilibili/ijkplayer/issues/1335

    相关文章

      网友评论

        本文标题:mac下编译Android ffmpeg 4.0版本

        本文链接:https://www.haomeiwen.com/subject/jgzdqctx.html