windows编译ffmpeg流程

1、下载安装

NDK      https://developer.android.google.cn/ndk/downloads/ 

MInGW     https://sourceforge.net/projects/mingw/files/ 

yasm   http://www.tortall.net/projects/yasm/releases

FFMPEG源码    https://ffmpeg.org/download.html 

2、安装NDK

配置环境变量:

配置ndk环境变量path,在其中加入D:\android\android-ndk;

3、MinGW下载安装配置

全部勾选,执行安装点击左上角的installation,然后点击apply change

配置环境变量path,在其中加入两个路径:

;D:\MinGW\bin;

D:\MinGW\msys\1.0\bin

安装完成后执行msys.bat代替window的cmd窗口执行编译命令

4、yasm下载安装

1)下载: http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz

2)解压:yasm-1.3.0.tar.gz

3)切换路径: cd yasm-1.3.0

4)执行配置: ./configure

5)编译:make

6)安装:make install
 

5、FFMPEG源码下载,及修改configure文件,及创建build_android.sh脚本文件

下载解压:

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

新建一个 build_android.sh 脚本文件 , 用于配置及编译使用 (名字不唯一)

#!/bin/sh

NDK_HOME=D:/Android/sdk/ndk-bundle
PREFIX=android-build
HOST_PLATFORM=linux-x86_64
PLATFORM=android-21

COMMON_OPTIONS="\
    --target-os=android \
    --disable-static \
    --enable-shared \
    --enable-small \
    --enable-cross-compile \
    --enable-neon \
    --disable-programs \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-doc \
    --disable-symver \
    --disable-asm \
    --enable-decoder=h264 \
    --enable-decoder=mpeg4 \
    --enable-decoder=mjpeg \
    --enable-decoder=png \
    --enable-decoder=vorbis \
    --enable-decoder=opus \
    --enable-decoder=flac 
    "

build_all(){
    for version in armeabi armeabi-v7a arm64-v8a x86 x86_64; do
        echo "======== > Start build $version"
        case ${version} in
        armeabi )
            ARCH="arm"
            CPU="armv5te"
            CROSS_PREFIX="$NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/$HOST_PLATFORM/bin/arm-linux-androideabi-"
            SYSROOT="$NDK_HOME/platforms/$PLATFORM/arch-arm/"
            EXTRA_CFLAGS="-march=armv5te"
            EXTRA_LDFLAGS="-Wl,-L${SYSROOT}/usr/lib"
        ;;
        armeabi-v7a )
            ARCH="arm"
            CPU="armv7-a"
            CROSS_PREFIX="$NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/$HOST_PLATFORM/bin/arm-linux-androideabi-"
            SYSROOT="$NDK_HOME/platforms/$PLATFORM/arch-arm/"
            EXTRA_CFLAGS="-march=armv7-a -mfpu=neon -mfloat-abi=softfp -mvectorize-with-neon-quad"
            EXTRA_LDFLAGS="-Wl,--fix-cortex-a8 -L${SYSROOT}/usr/lib"
        ;;
        arm64-v8a )
            ARCH="aarch64"
            CPU="armv8-a"
            CROSS_PREFIX="$NDK_HOME/toolchains/aarch64-linux-android-4.9/prebuilt/$HOST_PLATFORM/bin/aarch64-linux-android-"
            SYSROOT="$NDK_HOME/platforms/$PLATFORM/arch-arm64/"
            EXTRA_CFLAGS="-march=armv8-a"
            EXTRA_LDFLAGS="-Wl,-L${SYSROOT}/usr/lib"
        ;;
        x86 )
            ARCH="x86"
            CPU="i686"
            CROSS_PREFIX="$NDK_HOME/toolchains/x86-4.9/prebuilt/$HOST_PLATFORM/bin/i686-linux-android-"
            SYSROOT="$NDK_HOME/platforms/$PLATFORM/arch-x86/"
            EXTRA_CFLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"
            EXTRA_LDFLAGS="-Wl,-L${SYSROOT}/usr/lib"
        ;;
        x86_64 )
            ARCH="x86_64"
            CPU="x86_64"
            CROSS_PREFIX="$NDK_HOME/toolchains/x86_64-4.9/prebuilt/$HOST_PLATFORM/bin/x86_64-linux-android-"
            SYSROOT="$NDK_HOME/platforms/$PLATFORM/arch-x86_64/"
            EXTRA_CFLAGS="-march=x86-64 -msse4.2 -mpopcnt -m64 -mtune=intel"
            EXTRA_LDFLAGS="-Wl,-L${SYSROOT}/usr/lib"
        ;;
        esac

        echo "-------- > Start clean workspace"
        make clean

        echo "-------- > Start config makefile"
        configuration="\
            --prefix=${PREFIX} \
            --libdir=${PREFIX}/libs/${version}
            --incdir=${PREFIX}/includes/${version} \
            --pkgconfigdir=${PREFIX}/pkgconfig/${version} \
            --arch=${ARCH} \
            --cpu=${CPU} \
            --cross-prefix=${CROSS_PREFIX} \
            --sysroot=${SYSROOT} \
            --extra-ldexeflags=-pie \
            ${COMMON_OPTIONS}
            "

        echo "-------- > Start config makefile with ${configuration}"
        ./configure ${configuration}

        echo "-------- > Start make ${version} with -j8"
        make j8

        echo "-------- > Start install ${version}"
        make install
        echo "++++++++ > make and install ${version} complete."

    done
}

echo "-------- Start --------"
build_all
echo "-------- End --------"

 打开msys.bat进入ffmpeg目录

然后输入

$chmod 777 build_android.sh

./build_android.sh

编译完成,会在ffmpeg源码文件夹中生成一个android-build文件

可能错误:libavformat/os_support.c:194:10: error: 'ERROR_NOT_ENOUGH_MEMORY' undeclared (first use in this function)
解决方法:在FFmpeg\libavformat\os_support.h的开始加上#include "winerror.h"

猜你喜欢

转载自blog.csdn.net/duoluo9/article/details/89149998
今日推荐