美文网首页
FFmpeg移植Android库(二)

FFmpeg移植Android库(二)

作者: OneBelowZero | 来源:发表于2017-07-16 15:17 被阅读72次

    写在前面的话

    哇咔咔 这个韩国模特的图片好美啊 果断粉 以后只用她的图了 😝 嗯 这篇开始正经总结:


    FFmpeg

    1.ffmpeg官网 下载最新 ffmpeg-3.3.2.tar.bz2 解压
    2.进入到ffmpeg目录,打开configure文件

    BAA8F74F-8215-49DB-B286-658ABD0A76EE.png

    找到:SLIBNAME_WITH_MAJOR SLIBNAME_WITH_MAJOR SLIB_INSTALL_NAME SLIB_INSTALL_LINKS替换为:
    <code>

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

    </code>如图:

    15F33F14-08D5-4029-95AD-FDF444EDA735.png

    3.在ffmpeg目录下添加编译脚本build_android.sh

    <code>
    #!/bin/sh
    NDK=/Users/swplzj/Documents/swplzj/work/android-sdk-macosx/ndk-bundle
    SYSROOT=$NDK/platforms/android-21/arch-arm
    TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
    function build_one
    {
    ./configure
    --prefix=$PREFIX --enable-shared --disable-static --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-avdevice --disable-doc --disable-symver --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- --target-os=linux --arch=arm --enable-cross-compile --sysroot=$SYSROOT --extra-cflags="-Os -fpic $ADDI_CFLAGS" --extra-ldflags="$ADDI_LDFLAGS" $ADDITIONAL_CONFIGURE_FLAG
    make clean
    make
    make install
    }
    CPU=arm
    PREFIX=$(pwd)/android/$CPU
    ADDI_CFLAGS="-marm"
    build_one
    # Usage: version.sh <ffmpeg-root-dir> <output-version.h> <extra-version>

    # check for git short hash
    if ! test "$revision"; then
        if (cd "$1" && grep git RELEASE 2> /dev/null >/dev/null) ; then
            revision=$(cd "$1" && git describe --tags --match N 2> /dev/null)
        else
            revision=$(cd "$1" && git describe --tags --always 2> /dev/null)
        fi
    fi
    
    # Shallow Git clones (--depth) do not have the N tag:
    # use 'git-YYYY-MM-DD-hhhhhhh'.
    test "$revision" || revision=$(cd "$1" &&
      git log -1 --pretty=format:"git-%cd-%h" --date=short 2> /dev/null)
    
    # Snapshots from gitweb are in a directory called ffmpeg-hhhhhhh or
    # ffmpeg-HEAD-hhhhhhh.
    if [ -z "$revision" ]; then
      srcdir=$(cd "$1" && pwd)
      case "$srcdir" in
        */ffmpeg-[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f])
          git_hash="${srcdir##*-}";;
        */ffmpeg-HEAD-[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f])
          git_hash="${srcdir##*-}";;
      esac
    fi
    
    # no revision number found
    test "$revision" || revision=$(cd "$1" && cat RELEASE 2> /dev/null)
    
    # Append the Git hash if we have one
    test "$revision" && test "$git_hash" && revision="$revision-$git_hash"
    
    # releases extract the version number from the VERSION file
    version=$(cd "$1" && cat VERSION 2> /dev/null)
    test "$version" || version=$revision
    
    test -n "$3" && version=$version-$3
    
    if [ -z "$2" ]; then
        echo "$version"
        exit
    fi
    
    NEW_REVISION="#define FFMPEG_VERSION \"$version\""
    OLD_REVISION=$(cat "$2" 2> /dev/null | head -4 | tail -1)
    
    # String used for preprocessor guard
    GUARD=$(echo "$2" | sed 's/\//_/' | sed 's/\./_/' | tr '[:lower:]' '[:upper:]' | sed 's/LIB//')
    
    # Update version header only on revision changes to avoid spurious rebuilds
    if test "$NEW_REVISION" != "$OLD_REVISION"; then
        cat << EOF > "$2"
    /* Automatically generated by version.sh, do not manually edit! */
    #ifndef $GUARD
    #define $GUARD
    $NEW_REVISION
    #endif /* $GUARD */
    EOF
    fi
    

    </code>
    其中 ndk是你自己的ndk目录 需要你核对一下。
    mac上面 进入指定目录 执行:
    ./build_android.sh
    编译速度很快.编译目录 需要你自己指定 网上大部分文章的编译目录 是ffmpeg目录下 新建一个Android目录 里面 大致编译内容如下:

    FFmpeg 3.3.2

    这个时候 需要添加 include 和so文件 到你jni目录 。大部分内容到此结束。期间编译会产生警告 可以忽略。
    关于添加jni我这边遇到点问题 还在看 后续补充。

    相关文章

      网友评论

          本文标题:FFmpeg移植Android库(二)

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