以前的笔记重新整理了下,于是在Windows下进行了编译FFMmpeg
1.环境配置,下载安装MinGW、yasm
2.官方下载ffmpeg源码,我下载的是ffmpeg-3.3.8
3.编辑ffmpeg文件夹下面的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)'
4.配置不同cpu架构的编译脚本,其中NDK路径根据自己实际解压路径进行修改
4.1 build_android_all.sh,为脚本赋予可执行权限,chmod a+x build_android_*.sh
#!/bin/bash
# 可以根据实际需要进行选择性便宜
# Build arm v6
./build_android_armeabi.sh
# Build arm v7a
./build_android_armeabi_v7a.sh
# Build arm64 v8a
./build_android_arm64_v8a.sh
# Build x86
./build_android_x86.sh
# Build x86_64
./build_android_x86_64.sh
4.2 armeabi架构编译脚本
#!/bin/bash
# 根据自己时间NDK路径进行修改
NDK=D:/Android/android-ndk-r13b
SYSROOT=$NDK/platforms/android-21/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
PREFIX=./android/armeabi
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
}
ADDI_CFLAGS="-marm"
build_one
4.3 armeabi_v7a架构编译脚本
#!/bin/bash
# 根据自己NDK路径进行修改
NDK=D:/Android/android-ndk-r13b
SYSROOT=$NDK/platforms/android-21/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
PREFIX=./android/armeabi-v7a
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
}
ADDI_CFLAGS="-march=armv7-a"
build_one
4.4 arm64_v8a平架构译脚本
#!/bin/bash
# 根据自己NDK路径进行修改
NDK=D:/Android/android-ndk-r13b
SYSROOT=$NDK/platforms/android-21/arch-arm64/
TOOLCHAIN=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/windows-x86_64
PREFIX=./android/arm64-v8a
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/aarch64-linux-android- \
--target-os=linux \
--arch=aarch64 \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
build_one
4.5 x86架构编译脚本
#!/bin/bash
# 根据自己NDK路径进行修改
NDK=D:/Android/android-ndk-r13b
SYSROOT=$NDK/platforms/android-21/arch-x86/
TOOLCHAIN=$NDK/toolchains/x86-4.9/prebuilt/windows-x86_64
PREFIX=./android/x86
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/i686-linux-android- \
--target-os=linux \
--arch=x86 \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
ADDI_CFLAGS="-march=k8"
build_one
4.6 x86_64架构编译脚本
#!/bin/bash
# 根据自己NDK路径进行修改
NDK=D:/Android/android-ndk-r13b
SYSROOT=$NDK/platforms/android-21/arch-x86_64/
TOOLCHAIN=$NDK/toolchains/x86_64-4.9/prebuilt/windows-x86_64
PREFIX=./android/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/x86_64-linux-android- \
--target-os=linux \
--arch=x86_64 \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
ADDI_CFLAGS="-march=x86-64"
build_one
5. 打开MinGW目录下的msys.bat,切换路径到ffmpeg源码路面下,运行build_android_all.sh(安心等待编译...)
6. 编译完成后再当前目录下android下生成相应cpu架构的include、so
7. Android studio 创建工程
7.1 将生成的so拷贝到工程app同级目录下的libs下,配置cmake、Gradle
cmake_minimum_required(VERSION 3.4.1)
set(ffmpeg_DIR ${CMAKE_SOURCE_DIR}/../../../libs)
add_library( avcodec-57
SHARED
IMPORTED )
set_target_properties( avcodec-57
PROPERTIES IMPORTED_LOCATION
${ffmpeg_DIR}/${ANDROID_ABI}/libavcodec-57.so )
add_library( avfilter-6
SHARED
IMPORTED)
set_target_properties( avfilter-6
PROPERTIES IMPORTED_LOCATION
${ffmpeg_DIR}/${ANDROID_ABI}/libavfilter-6.so )
add_library( avformat-57
SHARED
IMPORTED)
set_target_properties( avformat-57
PROPERTIES IMPORTED_LOCATION
${ffmpeg_DIR}/${ANDROID_ABI}/libavformat-57.so )
add_library( avutil-55
SHARED
IMPORTED )
set_target_properties( avutil-55
PROPERTIES IMPORTED_LOCATION
${ffmpeg_DIR}/${ANDROID_ABI}/libavutil-55.so )
add_library( swresample-2
SHARED
IMPORTED )
set_target_properties( swresample-2
PROPERTIES IMPORTED_LOCATION
${ffmpeg_DIR}/${ANDROID_ABI}/libswresample-2.so )
add_library( swscale-4
SHARED
IMPORTED)
set_target_properties( swscale-4
PROPERTIES IMPORTED_LOCATION
${ffmpeg_DIR}/${ANDROID_ABI}/libswscale-4.so )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
include_directories( ffmpeg-3.3.8/include )
add_library( player
SHARED
src/Java_com_center_player_MainActivity.cpp
src/Common.cpp )
find_library( log-lib
log )
target_link_libraries( player
avcodec-57
avfilter-6
avformat-57
avutil-55
-landroid
swresample-2
swscale-4
${log-lib} )
7.2 Github测试程序下载链接