FFmpeg移植Android库(二)

2017-07-16  本文已影响72人  OneBelowZero

写在前面的话

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


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我这边遇到点问题 还在看 后续补充。

上一篇下一篇

猜你喜欢

热点阅读