Open ilnaygniy opened 5 years ago
@ilnaygniy brew install pkg-config
@HatsuneMikuV 在哪个目录下执行呢?或者我可以写在哪个脚本么
@ilnaygniy 在哪都行 只要在终端运行就可以 这个目的是完善你的配置环境
@HatsuneMikuV 这是我 do-compile-speex.sh 脚本
#
#
#
#
#
set -e
if [ -z "$ANDROID_NDK" ]; then echo "You must define ANDROID_NDK before starting." echo "They must point to your NDK directories.\n" exit 1 fi
FF_ARCH=$1 if [ -z "$FF_ARCH" ]; then echo "You must specific an architecture 'arm, armv7a, x86, ...'.\n" exit 1 fi
FF_BUILD_ROOT=pwd
FF_ANDROID_PLATFORM=android-9
FF_BUILD_NAME= FF_SOURCE= FF_CROSS_PREFIX=
FF_CFG_FLAGS= FF_PLATFORM_CFG_FLAGS=
FF_EXTRA_CFLAGS= FF_EXTRA_LDFLAGS=
echo "" echo "--------------------" echo "[*] make NDK standalone toolchain" echo "--------------------" . ./tools/do-detect-env.sh FF_MAKE_TOOLCHAIN_FLAGS=$IJK_MAKE_TOOLCHAIN_FLAGS FF_MAKE_FLAGS=$IJK_MAKE_FLAG FF_GCC_VER=$IJK_GCC_VER FF_GCC_64_VER=$IJK_GCC_64_VER
if [ "$FF_ARCH" = "armv7a" ]; then FF_BUILD_NAME=speex-armv7a FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME
FF_CROSS_PREFIX=arm-linux-androideabi
FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_VER}
FF_PLATFORM_CFG_FLAGS="android-armv7"
else echo "unknown architecture $FF_ARCH"; exit 1 fi
FF_TOOLCHAIN_PATH=$FF_BUILD_ROOT/build/$FF_BUILD_NAME/toolchain
FF_SYSROOT=$FF_TOOLCHAIN_PATH/sysroot FF_PREFIX=$FF_BUILD_ROOT/build/$FF_BUILD_NAME/output
mkdir -p $FF_PREFIX
echo "" echo "--------------------" echo "[*] make NDK standalone toolchain" echo "--------------------" . ./tools/do-detect-env.sh FF_MAKE_TOOLCHAIN_FLAGS=$IJK_MAKE_TOOLCHAIN_FLAGS FF_MAKE_FLAGS=$IJK_MAKE_FLAG
FF_MAKE_TOOLCHAIN_FLAGS="$FF_MAKE_TOOLCHAIN_FLAGS --install-dir=$FF_TOOLCHAIN_PATH" FF_TOOLCHAIN_TOUCH="$FF_TOOLCHAIN_PATH/touch" if [ ! -f "$FF_TOOLCHAIN_TOUCH" ]; then $ANDROID_NDK/build/tools/make-standalone-toolchain.sh \ $FF_MAKE_TOOLCHAIN_FLAGS \ --platform=$FF_ANDROID_PLATFORM \ --toolchain=$FF_TOOLCHAIN_NAME touch $FF_TOOLCHAIN_TOUCH; fi
echo "" echo "--------------------" echo "[*] check speex env" echo "--------------------" export PATH=$FF_TOOLCHAIN_PATH/bin:$PATH
export COMMON_FF_CFG_FLAGS=
FF_CFG_FLAGS="$FF_CFG_FLAGS $COMMON_FF_CFG_FLAGS"
FF_CFG_FLAGS="$FF_CFG_FLAGS --prefix=$FF_PREFIX"
echo "--------------------" echo "[*] configurate speex" echo "--------------------"
cd $FF_SOURCE
echo "./configure $FF_CFG_FLAGS"
./configure $FF_CFG_FLAGS -host=armv7 --disable-shared --enable-static
echo "--------------------" echo "cccccdddddd ${FF_SOURCE}" echo "--------------------"
echo "" echo "--------------------" echo "[*] compile speex" echo "--------------------"
make
make install
echo "" echo "--------------------" echo "[*] link speex" echo "--------------------"
这是 ffmpeg得 echo "====================" echo "[*] check env $1" echo "====================" set -e
FF_ARCH=$1 FF_BUILD_OPT=$2 echo "FF_ARCH=$FF_ARCH" echo "FF_BUILD_OPT=$FF_BUILD_OPT" if [ -z "$FF_ARCH" ]; then echo "You must specific an architecture 'arm, armv7a, x86, ...'." echo "" exit 1 fi
FF_BUILD_ROOT=pwd
FF_ANDROID_PLATFORM=android-9
FF_BUILD_NAME= FF_SOURCE= FF_CROSS_PREFIX= FF_DEP_OPENSSL_INC= FF_DEP_OPENSSL_LIB=
FF_DEP_SPEEX_INC= FF_DEP_SPEEX_LIB=
FF_DEP_LIBSOXR_INC= FF_DEP_LIBSOXR_LIB=
FF_CFG_FLAGS=
FF_EXTRA_CFLAGS= FF_EXTRA_LDFLAGS= FF_DEP_LIBS=
FF_MODULE_DIRS="compat libavcodec libavfilter libavformat libavutil libswresample libswscale" FF_ASSEMBLER_SUB_DIRS=
echo "" echo "--------------------" echo "[*] make NDK standalone toolchain" echo "--------------------" . ./tools/do-detect-env.sh FF_MAKE_TOOLCHAIN_FLAGS=$IJK_MAKE_TOOLCHAIN_FLAGS FF_MAKE_FLAGS=$IJK_MAKE_FLAG FF_GCC_VER=$IJK_GCC_VER FF_GCC_64_VER=$IJK_GCC_64_VER
if [ "$FF_ARCH" = "armv7a" ]; then FF_BUILD_NAME=ffmpeg-armv7a FF_BUILD_NAME_OPENSSL=openssl-armv7a FF_BUILD_NAME_LIBSOXR=libsoxr-armv7a FF_BUILD_NAME_SPEEX=speex-armv7a FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME
FF_CROSS_PREFIX=arm-linux-androideabi
FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_VER}
FF_CFG_FLAGS="$FF_CFG_FLAGS --arch=arm --cpu=cortex-a8"
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-neon"
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-thumb"
FF_EXTRA_CFLAGS="$FF_EXTRA_CFLAGS -march=armv7-a -mcpu=cortex-a8 -mfpu=vfpv3-d16 -mfloat-abi=softfp -mthumb"
FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS -Wl,--fix-cortex-a8"
FF_ASSEMBLER_SUB_DIRS="arm"
elif [ "$FF_ARCH" = "armv5" ]; then FF_BUILD_NAME=ffmpeg-armv5 FF_BUILD_NAME_OPENSSL=openssl-armv5 FF_BUILD_NAME_LIBSOXR=libsoxr-armv5 FF_BUILD_NAME_SPEEX=speex-armv5 FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME
FF_CROSS_PREFIX=arm-linux-androideabi
FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_VER}
FF_CFG_FLAGS="$FF_CFG_FLAGS --arch=arm"
FF_EXTRA_CFLAGS="$FF_EXTRA_CFLAGS -march=armv5te -mtune=arm9tdmi -msoft-float"
FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS"
FF_ASSEMBLER_SUB_DIRS="arm"
elif [ "$FF_ARCH" = "x86" ]; then FF_BUILD_NAME=ffmpeg-x86 FF_BUILD_NAME_OPENSSL=openssl-x86 FF_BUILD_NAME_SPEEX=speex-armv7a FF_BUILD_NAME_LIBSOXR=libsoxr-x86 FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME
FF_CROSS_PREFIX=i686-linux-android
FF_TOOLCHAIN_NAME=x86-${FF_GCC_VER}
FF_CFG_FLAGS="$FF_CFG_FLAGS --arch=x86 --cpu=i686 --enable-yasm"
FF_EXTRA_CFLAGS="$FF_EXTRA_CFLAGS -march=atom -msse3 -ffast-math -mfpmath=sse"
FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS"
FF_ASSEMBLER_SUB_DIRS="x86"
elif [ "$FF_ARCH" = "x86_64" ]; then FF_ANDROID_PLATFORM=android-21
FF_BUILD_NAME=ffmpeg-x86_64
FF_BUILD_NAME_OPENSSL=openssl-x86_64
FF_BUILD_NAME_SPEEX=speex-x86_64
FF_BUILD_NAME_LIBSOXR=libsoxr-x86_64
FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME
FF_CROSS_PREFIX=x86_64-linux-android
FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_64_VER}
FF_CFG_FLAGS="$FF_CFG_FLAGS --arch=x86_64 --enable-yasm"
FF_EXTRA_CFLAGS="$FF_EXTRA_CFLAGS"
FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS"
FF_ASSEMBLER_SUB_DIRS="x86"
elif [ "$FF_ARCH" = "arm64" ]; then FF_ANDROID_PLATFORM=android-21
FF_BUILD_NAME=ffmpeg-arm64
FF_BUILD_NAME_OPENSSL=openssl-arm64
FF_BUILD_NAME_SPEEX=speex-armv64
FF_BUILD_NAME_LIBSOXR=libsoxr-arm64
FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME
FF_CROSS_PREFIX=aarch64-linux-android
FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_64_VER}
FF_CFG_FLAGS="$FF_CFG_FLAGS --arch=aarch64 --enable-yasm"
FF_EXTRA_CFLAGS="$FF_EXTRA_CFLAGS"
FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS"
FF_ASSEMBLER_SUB_DIRS="aarch64 neon"
else echo "unknown architecture $FF_ARCH"; exit 1 fi
if [ ! -d $FF_SOURCE ]; then echo "" echo "!! ERROR" echo "!! Can not find FFmpeg directory for $FF_BUILD_NAME" echo "!! Run 'sh init-android.sh' first" echo "" exit 1 fi
FF_TOOLCHAIN_PATH=$FF_BUILD_ROOT/build/$FF_BUILD_NAME/toolchain FF_MAKE_TOOLCHAIN_FLAGS="$FF_MAKE_TOOLCHAIN_FLAGS --install-dir=$FF_TOOLCHAIN_PATH"
FF_SYSROOT=$FF_TOOLCHAIN_PATH/sysroot FF_PREFIX=$FF_BUILD_ROOT/build/$FF_BUILD_NAME/output FF_DEP_OPENSSL_INC=$FF_BUILD_ROOT/build/$FF_BUILD_NAME_OPENSSL/output/include FF_DEP_OPENSSL_LIB=$FF_BUILD_ROOT/build/$FF_BUILD_NAME_OPENSSL/output/lib FF_DEP_LIBSOXR_INC=$FF_BUILD_ROOT/build/$FF_BUILD_NAME_LIBSOXR/output/include FF_DEP_LIBSOXR_LIB=$FF_BUILD_ROOT/build/$FF_BUILD_NAME_LIBSOXR/output/lib FF_DEP_SPEEX_INC=$FF_BUILD_ROOT/build/$FF_BUILD_NAME_SPEEX/output/include FF_DEP_SPEEX_LIB=$FF_BUILD_ROOT/build/$FF_BUILD_NAME_SPEEX/output/lib
case "$UNAME_S" in CYGWIN_NT-*) FF_SYSROOT="$(cygpath -am $FF_SYSROOT)" FF_PREFIX="$(cygpath -am $FF_PREFIX)" ;; esac
mkdir -p $FF_PREFIX
FF_TOOLCHAIN_TOUCH="$FF_TOOLCHAIN_PATH/touch" if [ ! -f "$FF_TOOLCHAIN_TOUCH" ]; then $ANDROID_NDK/build/tools/make-standalone-toolchain.sh \ $FF_MAKE_TOOLCHAIN_FLAGS \ --platform=$FF_ANDROID_PLATFORM \ --toolchain=$FF_TOOLCHAIN_NAME touch $FF_TOOLCHAIN_TOUCH; fi
echo "" echo "--------------------" echo "[*] check ffmpeg env" echo "--------------------" export PATH=$FF_TOOLCHAIN_PATH/bin/:$PATH
export CC="${FF_CROSS_PREFIX}-gcc" export LD=${FF_CROSS_PREFIX}-ld export AR=${FF_CROSS_PREFIX}-ar export STRIP=${FF_CROSS_PREFIX}-strip export PKG_CONFIG_PATH=/home/liyanying/opt/ijkplayer-android/android/contrib/build/speex-armv7a/output/lib/pkgconfig: FF_CFLAGS="-O3 -Wall -pipe \ -std=c99 \ -ffast-math \ -fstrict-aliasing -Werror=strict-aliasing \ -Wno-psabi -Wa,--noexecstack \ -DANDROID -DNDEBUG"
export COMMON_FF_CFG_FLAGS= . $FF_BUILD_ROOT/../../config/module.sh
if [ -f "${FF_DEP_OPENSSL_LIB}/libssl.a" ]; then echo "OpenSSL detected"
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-openssl"
FF_CFLAGS="$FF_CFLAGS -I${FF_DEP_OPENSSL_INC}"
FF_DEP_LIBS="$FF_DEP_LIBS -L${FF_DEP_OPENSSL_LIB} -lssl -lcrypto"
fi
if [ -f "${FF_DEP_SPEEX_LIB}/libspeex.a" ]; then echo "Speex detected" FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libspeex" echo "----------find speex ----------" echo $FF_DEP_SPEEX_INC echo $FF_DEP_SPEEX_LIB echo "--------------------------------" FF_CFLAGS="$FF_CFLAGS -I${FF_DEP_SPEEX_INC}" FF_DEP_LIBS="$FF_DEP_LIBS -L${FF_DEP_SPEEX_LIB} -lspeex" fi
if [ -f "${FF_DEP_LIBSOXR_LIB}/libsoxr.a" ]; then echo "libsoxr detected" FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libsoxr"
FF_CFLAGS="$FF_CFLAGS -I${FF_DEP_LIBSOXR_INC}"
FF_DEP_LIBS="$FF_DEP_LIBS -L${FF_DEP_LIBSOXR_LIB} -lsoxr"
fi
FF_CFG_FLAGS="$FF_CFG_FLAGS $COMMON_FF_CFG_FLAGS"
FF_CFG_FLAGS="$FF_CFG_FLAGS --prefix=$FF_PREFIX"
FF_CFG_FLAGS="$FF_CFG_FLAGS --cross-prefix=${FF_CROSS_PREFIX}-" FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-cross-compile" FF_CFG_FLAGS="$FF_CFG_FLAGS --target-os=linux" FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-pic"
if [ "$FF_ARCH" = "x86" ]; then FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-asm" else
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-asm"
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-inline-asm"
fi
case "$FF_BUILD_OPT" in debug) FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-optimizations" FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-debug" FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-small" ;; *) FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-optimizations" FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-debug" FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-small" ;; esac
echo "" echo "--------------------" echo "[*] configurate ffmpeg" echo "--------------------" cd $FF_SOURCE if [ -f "./config.h" ]; then echo 'reuse configure' else which $CC ./configure $FF_CFG_FLAGS --enable-libspeex\ --extra-cflags="$FF_CFLAGS $FF_EXTRA_CFLAGS" \ --extra-ldflags="$FF_DEP_LIBS $FF_EXTRA_LDFLAGS" make clean fi
echo "" echo "--------------------" echo "[] compile ffmpeg" echo "--------------------" cp config. $FF_PREFIX make $FF_MAKE_FLAGS > /dev/null make install mkdir -p $FF_PREFIX/include/libffmpeg cp -f config.h $FF_PREFIX/include/libffmpeg/config.h
echo "" echo "--------------------" echo "[*] link ffmpeg" echo "--------------------" echo $FF_EXTRA_LDFLAGS
FF_C_OBJ_FILES= FF_ASM_OBJ_FILES= for MODULE_DIR in $FF_MODULE_DIRS do C_OBJ_FILES="$MODULE_DIR/.o" if ls $C_OBJ_FILES 1> /dev/null 2>&1; then echo "link $MODULE_DIR/.o" FF_C_OBJ_FILES="$FF_C_OBJ_FILES $C_OBJ_FILES" fi
for ASM_SUB_DIR in $FF_ASSEMBLER_SUB_DIRS
do
ASM_OBJ_FILES="$MODULE_DIR/$ASM_SUB_DIR/*.o"
if ls $ASM_OBJ_FILES 1> /dev/null 2>&1; then
echo "link $MODULE_DIR/$ASM_SUB_DIR/*.o"
FF_ASM_OBJ_FILES="$FF_ASM_OBJ_FILES $ASM_OBJ_FILES"
fi
done
done
$CC -lm -lz -shared --sysroot=$FF_SYSROOT -Wl,--no-undefined -Wl,-z,noexecstack $FF_EXTRA_LDFLAGS \ -Wl,-soname,libijkffmpeg.so \ $FF_C_OBJ_FILES \ $FF_ASM_OBJ_FILES \ $FF_DEP_LIBS \ -o $FF_PREFIX/libijkffmpeg.so
mysedi() {
f=$1
exp=$2
n=basename $f
cp $f /tmp/$n
sed $exp /tmp/$n > $f
rm /tmp/$n
}
echo "" echo "--------------------" echo "[] create files for shared ffmpeg" echo "--------------------" rm -rf $FF_PREFIX/shared mkdir -p $FF_PREFIX/shared/lib/pkgconfig ln -s $FF_PREFIX/include $FF_PREFIX/shared/include ln -s $FF_PREFIX/libijkffmpeg.so $FF_PREFIX/shared/lib/libijkffmpeg.so cp $FF_PREFIX/lib/pkgconfig/.pc $FF_PREFIX/shared/lib/pkgconfig for f in $FF_PREFIX/lib/pkgconfig/*.pc; do
if [ ! -f $f ]; then
continue
fi
cp $f $FF_PREFIX/shared/lib/pkgconfig
f=$FF_PREFIX/shared/lib/pkgconfig/`basename $f`
# OSX sed doesn't have in-place(-i)
mysedi $f 's/\/output/\/output\/shared/g'
mysedi $f 's/-lavcodec/-lijkffmpeg/g'
mysedi $f 's/-lavfilter/-lijkffmpeg/g'
mysedi $f 's/-lavformat/-lijkffmpeg/g'
mysedi $f 's/-lavutil/-lijkffmpeg/g'
mysedi $f 's/-lswresample/-lijkffmpeg/g'
mysedi $f 's/-lswscale/-lijkffmpeg/g'
done
这个脚本 你不需要更改 你报错的原因是你的电脑环境有问题 需要你安装pkg-config
@ilnaygniy 你编译安卓的?稍等我看看今天能上传不,现在支持的是ios的
@HatsuneMikuV 嗯 我再编译Android 得 pkg-config --list-all 的时候 并没有显示有speex 应该是没关联上吧 怎么可以关联呢?
用的ubuntu 模拟器
do-ffmpeg 参照openssl添加了speex相关,但是编译ffmpeg的时候报错 ERROR: speex not found using pkg-config