ffmpeg精简

本文仅是个人编译脚本记录,有多出错误,仅供参考

编译32位库测试可通过,64位库使用r10e可编译通过arm64,x86_64,但是mips64编译有错,后序更改.

注:

1、android、交叉编译;

2、可加入--enable-small 选项进一步减小库大小,但使用过程中,会有crash的情况,因此未加入此选项;

3、此脚本适用场景,播放mov网络点播,rtmp直播;


脚本:

#!/bin/bash

FF_ARCH="all32"

if [ $# -lt 1 ]; then
echo "Not specify ARCH, use 'all32'."
elif [ $# -gt 1 ]; then
echo "Too many ARCH arguments. ARCH must be one of 'armv5|armv7a|arm32|arm64|arm|x86|x86_64|mips|mips64|all32|all64|all'."
exit 1
else
FF_ARCH=$1
echo "Specify ARCH:$FF_ARCH."
fi


# Environment
LOCAL_PATH=`pwd`
NDK=/usr/local/src/android/android-ndk-r8e

#NDK64=/usr/local/src/android/android-ndk-r10e
FF_ANDROID_PLATFORM=android-8
FF_GCC_VER=4.6
#FF_GCC_64_VER=4.9
FF_CROSS_PREFIX=
FF_CFG_FLAGS=
FF_EXTRA_CFLAGS=
FF_EXTRA_LDFLAGS=
BUILD_PATH=$LOCAL_PATH/build
PLATFORM=
PREBUILT=
PREFIX=


FF_CFLAGS="-O3 -Wall -pipe \
    -std=c99 \
    -ffast-math \
    -fstrict-aliasing -Werror=strict-aliasing \
    -Wno-psabi -Wa,--noexecstack \
    -DANDROID -DNDEBUG"

echo "Local path : $LOCAL_PATH"
echo "NDK path : $NDK"


if [[ $FF_ARCH = all* ]]; then
echo "rm build path, recreate it"
rm -rf $BUILD_PATH
mkdir -p $BUILD_PATH
fi


function show_options ()
{
echo "****************** show options begin ******************"
echo "Android platform : $FF_ANDROID_PLATFORM"
echo "GCC version : $FF_GCC_VER"
echo "Cross prefix : $FF_CROSS_PREFIX"
echo "CFG flags : $FF_CFG_FLAGS"
echo "Extra cflags : $FF_EXTRA_CFLAGS"
echo "Extra ldflags : $FF_EXTRA_LDFLAGS"
echo "Platform : $PLATFORM"
echo "Prebuild : $PREBUILT"
echo "Build prefix : $PREFIX"
echo "****************** show options end ******************"
}

function build ()
{


cd ffmpeg


make clean


./configure \
${FF_CFG_FLAGS} \
--target-os=linux \
--prefix=$PREFIX \
--enable-version3 \
--enable-gpl \
--disable-debug \
--enable-memalign-hack \
--enable-asm \
--disable-shared \
--enable-static \
\
--disable-programs \
--disable-doc \
--disable-avdevice \
--disable-postproc \
--disable-avfilter \
--disable-w32threads \
--disable-avdevice \
--enable-pthreads \
--enable-network \
\
--disable-everything \

\
--enable-decoder=h264 \
--enable-decoder=aac \
\
--enable-demuxer=flv \
--enable-demuxer=mov \
\
--enable-protocol=rtmp \
--enable-protocol=http \
\
--disable-zlib \
--disable-bzlib \
\
--cc=$PREBUILT/bin/${FF_CROSS_PREFIX}-gcc \
--cross-prefix=$PREBUILT/bin/${FF_CROSS_PREFIX}- \
--nm=$PREBUILT/bin/${FF_CROSS_PREFIX}-nm \
--sysroot=$PLATFORM \
--extra-cflags="${FF_CFLAGS} ${FF_EXTRA_CFLAGS}" \
--extra-ldflags="${FF_EXTRA_LDFLAGS}"

make -j4 install

cd -
}


# 1
function build_armv5 ()
{
echo "build armv5"
FF_ARCH=arm
FF_CROSS_PREFIX=arm-linux-androideabi
FF_ANDROID_PLATFORM=android-8
PLATFORM=$NDK/platforms/${FF_ANDROID_PLATFORM}/arch-${FF_ARCH}
PREBUILT=$NDK/toolchains/${FF_CROSS_PREFIX}-${FF_GCC_VER}/prebuilt/linux-x86_64
FF_CFG_FLAGS=" --arch=arm --disable-neon"
FF_EXTRA_CFLAGS=
FF_EXTRA_LDFLAGS=
PREFIX=$BUILD_PATH/armeabi
show_options
build
echo "build armv5 end"
}


# 2
function build_armv7a ()
{
echo "build armv7a"
FF_ARCH=arm
FF_CROSS_PREFIX=arm-linux-androideabi
FF_ANDROID_PLATFORM=android-8
PLATFORM=$NDK/platforms/${FF_ANDROID_PLATFORM}/arch-${FF_ARCH}
PREBUILT=$NDK/toolchains/${FF_CROSS_PREFIX}-${FF_GCC_VER}/prebuilt/linux-x86_64
FF_CFG_FLAGS=" --arch=arm --cpu=cortex-a8 --enable-neon --enable-thumb --disable-armv5te --disable-armv6 --disable-armv6t2"
FF_EXTRA_CFLAGS=" -march=armv7-a -mcpu=cortex-a8 -mfpu=vfpv3-d16 -mfloat-abi=softfp -mthumb"
FF_EXTRA_LDFLAGS=" -Wl,--fix-cortex-a8"
PREFIX=$BUILD_PATH/armeabi-v7a
show_options
build
echo "build armv7a end"
}


# 3
function build_arm64-v8a ()
{
FF_CROSS_PREFIX=aarch64-linux-android
FF_CFG_FLAGS=" --arch=aarch64 --enable-yasm"
FF_ANDROID_PLATFORM=android-21
FF_EXTRA_CFLAGS=
FF_EXTRA_LDFLAGS=
PLATFORM=$NDK/platforms/${FF_ANDROID_PLATFORM}/arch-${FF_ARCH}
PREBUILT=$NDK/toolchains/${FF_CROSS_PREFIX}-${FF_GCC_64_VER}/prebuilt/linux-x86
PREFIX=$BUILD_PATH/arm64-v8a
show_options
build
}


# 4
function build_arm32 ()
{
build_armv5
build_armv7a
}


# 5
function build_arm64 ()
{
build_arm64-v8a
}


# 6
function build_arm ()
{
build_arm32
build_arm64
}


# 7
function build_x86 ()
{
echo "build x86"
FF_ARCH=x86
FF_CROSS_PREFIX=i686-linux-android
FF_ANDROID_PLATFORM=android-14
FF_CFG_FLAGS=" --arch=x86 --cpu=i686 --enable-yasm"
FF_EXTRA_CFLAGS=" -march=atom -msse3 -ffast-math -mfpmath=sse"
FF_EXTRA_LDFLAGS=
PLATFORM=$NDK/platforms/${FF_ANDROID_PLATFORM}/arch-${FF_ARCH}
PREBUILT=$NDK/toolchains/${FF_ARCH}-${FF_GCC_VER}/prebuilt/linux-x86_64
PREFIX=$BUILD_PATH/x86
show_options
build
echo "build x86 end"
}


# 8
function build_x86_64 ()
{
FF_ARCH=x86_64
FF_CROSS_PREFIX=x86_64-linux-android
FF_ANDROID_PLATFORM=android-21
FF_CFG_FLAGS=" --arch=x86_64 --enable-yasm"
FF_EXTRA_CFLAGS=" -march=atom -msse3 -ffast-math -mfpmath=sse"
FF_EXTRA_LDFLAGS=
PLATFORM=$NDK/platforms/${FF_ANDROID_PLATFORM}/arch-${FF_ARCH}
PREBUILT=$NDK/toolchains/${FF_ARCH}-${FF_GCC_64_VER}/prebuilt/linux-x86
PREFIX=$BUILD_PATH/x86_64
show_options
build
}


# 9
function build_mips ()
{
echo "build mips"
FF_ARCH=mips
FF_CROSS_PREFIX=mipsel-linux-android
FF_ANDROID_PLATFORM=android-14
FF_CFG_FLAGS=" --arch=mips --enable-yasm"
FF_EXTRA_CFLAGS=
FF_EXTRA_LDFLAGS=" -lm"
PLATFORM=$NDK/platforms/${FF_ANDROID_PLATFORM}/arch-${FF_ARCH}
PREBUILT=$NDK/toolchains/${FF_CROSS_PREFIX}-${FF_GCC_VER}/prebuilt/linux-x86_64
PREFIX=$BUILD_PATH/mips
show_options
build
echo "build mips end"
}


# 10  it is wrong
function build_mips64 ()
{
FF_ARCH=mips64
FF_CROSS_PREFIX=mips64el-linux-android
FF_ANDROID_PLATFORM=android-21
FF_CFG_FLAGS=" --arch=mips64 --enable-yasm"
FF_EXTRA_CFLAGS=
FF_EXTRA_LDFLAGS=" -lm"
PLATFORM=$NDK/platforms/${FF_ANDROID_PLATFORM}/arch-${FF_ARCH}
PREBUILT=$NDK/toolchains/${FF_CROSS_PREFIX}-${FF_GCC_64_VER}/prebuilt/linux-x86
PREFIX=$BUILD_PATH/mips64
show_options
build
}


# 11
function build_all32 ()
{
build_arm32
build_x86
build_mips
}


# 12
function build_all64 ()
{
build_arm64
build_x86_64
build_mips64
}


# 13
function build_all ()
{
build_all32
build_all64
}


case $FF_ARCH in
armv5)
echo "****** build armv5 ******"
build_armv5
;;
armv7a)
echo "****** build armv7a ******"
build_armv7a
;;
arm32)
echo "****** build armv5 armv7a ******"
build_arm32
;;
arm64)
echo "****** build arm64-v8a ******"
build_arm64
;;
arm)
echo "****** build armv5 armv7a arm64-v8a ******"
build_arm
;;
x86)
echo "****** build x86 ******"
build_x86
;;
x86_64)
echo "****** build x86_64 ******"
build_x86_64
;;
mips)
echo "****** build mips ******"
build_mips
;;
mips64)
echo "****** build mips64 ******"
build_mips64
;;
all32)
echo "****** build all32(armv5 armv7a x86 mips) ******"
build_all32
;;
all64)
echo "****** build all64(arm74-v8a x86_64 mips64) ******"
build_all64
;;
all)
echo "****** build all(armv5 armv7a arm64-v8a x86 x86_64 mips mips64) ******"
build_all
;;
*)
echo "ARCH:$FF_ARCH is not supported, ARCH must be one of 'all|arm|armv5|armv7a|x86|mips'."
;;
esac

最新全套Jar: FFMPEG3.4.1+JavaCV1.4.1+OpenCV3.4.1-含windows&linux;平台链接库。安卓和macos的链接库将另发。 请根据平台选择适当的链接库。 artoolkitplus-linux-armhf.jar artoolkitplus-linux-ppc64le.jar artoolkitplus-linux-x86.jar artoolkitplus-linux-x86_64.jar artoolkitplus-platform.jar artoolkitplus-windows-x86.jar artoolkitplus-windows-x86_64.jar artoolkitplus.jar ffmpeg-linux-armhf.jar ffmpeg-linux-ppc64le.jar ffmpeg-linux-x86.jar ffmpeg-linux-x86_64.jar ffmpeg-platform.jar ffmpeg-windows-x86.jar ffmpeg-windows-x86_64.jar ffmpeg.jar flandmark-linux-armhf.jar flandmark-linux-ppc64le.jar flandmark-linux-x86.jar flandmark-linux-x86_64.jar flandmark-platform.jar flandmark-windows-x86.jar flandmark-windows-x86_64.jar flandmark.jar flycapture-linux-armhf.jar flycapture-linux-x86.jar flycapture-linux-x86_64.jar flycapture-platform.jar flycapture-windows-x86.jar flycapture-windows-x86_64.jar flycapture.jar javacpp.jar javacv-platform.jar javacv.jar libdc1394-linux-armhf.jar libdc1394-linux-ppc64le.jar libdc1394-linux-x86.jar libdc1394-linux-x86_64.jar libdc1394-platform.jar libdc1394-windows-x86.jar libdc1394-windows-x86_64.jar libdc1394.jar libfreenect-linux-armhf.jar libfreenect-linux-ppc64le.jar libfreenect-linux-x86.jar libfreenect-linux-x86_64.jar libfreenect-platform.jar libfreenect-windows-x86.jar libfreenect-windows-x86_64.jar libfreenect.jar libfreenect2-linux-x86.jar libfreenect2-linux-x86_64.jar libfreenect2-platform.jar libfreenect2-windows-x86_64.jar libfreenect2.jar librealsense-linux-x86.jar librealsense-linux-x86_64.jar librealsense-platform.jar librealsense-windows-x86.jar librealsense-windows-x86_64.jar librealsense.jar opencv-ios-arm64.jar opencv-ios-x86_64.jar opencv-linux-armhf.jar opencv-linux-ppc64le.jar opencv-linux-x86.jar opencv-linux-x86_64.jar opencv-platform.jar opencv-windows-x86.jar opencv-windows-x86_64.jar opencv.jar videoinput-platform.jar videoinput-windows-x86.jar videoinput-windows-x86_64.jar videoinput.jar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值