# ffmpeg_android **Repository Path**: louisZzz/ffmpeg_android ## Basic Information - **Project Name**: ffmpeg_android - **Description**: ffmpeg 编译 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-10-25 - **Last Updated**: 2021-10-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ffmpeg_android #### 介绍 ffmpeg 编译 #### 使用说明 1. 拉取代码 git clone --recursive https://github.com/glumes/ffmpeg_android 安装后,进入build_android.sh中,将NDK替换为本地路径,最好使用r20b版本,保存一致 2. 修改 build_android.sh文件 ``` #!/bin/bash #你的NDK路径 NDK=/Users/xxx/Android/sdk/android-ndk-r20b TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64 API=21 ``` 替换后,给脚本可执行权限就能运行了,编译后的动态库在 ffmpeg_library 文件夹中,目前仅编译了 armeabi-v7a 架构的。 android 文件夹内对应加载 so 的 Android 工程,也是 FFmpeg 调用 Android MediaCodec 的源码。 这个工程目录也是不需要修改 FFmpeg 的,并且关于 FFmpeg 的很多编译选项开关放在了 config-env.sh 目录中,有需要可以在文件内做修改,目前的选项是开启了 mediacodec 编码的,但它的修改不影响主的编译脚本运行。 顺便贴一下源码: 这里是具体执行编译的函数,函数用到的一些参数要在外面定义好: 3. build_android() ``` function build_android { echo "Compiling FFmpeg for $CPU" ./configure \ --prefix=$PREFIX \ --libdir=$LIB_DIR \ --enable-shared \ --disable-static \ --enable-jni \ --disable-doc \ --disable-symver \ --disable-programs \ --target-os=android \ --arch=$ARCH \ --cpu=$CPU \ --cc=$CC \ --cxx=$CXX \ --enable-cross-compile \ --sysroot=$SYSROOT \ --extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \ --extra-ldflags="$ADDI_LDFLAGS" \ --disable-asm \ # 这些编译参数在 config-env.sh 文件中定义了 $COMMON_FF_CFG_FLAGS make clean make -j8 # 这里是定义用几个CPU编译 make install echo "The Compilation of FFmpeg for $CPU is completed" } ``` 接下来定义好相关参数,就可以执行了: ``` // 编译的 configure 可执行文件在 ffmpeg 源码目录中,要先进入到目录里 cd ffmpeg // 定义好编译的架构 OUTPUT_FOLDER="armeabi-v7a" ARCH="arm" CPU="armv7-a" TOOL_CPU_NAME=armv7a TOOL_PREFIX="$TOOLCHAIN/bin/arm-linux-androideabi" CC="$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang" CXX="$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++" SYSROOT="$NDK/toolchains/llvm/prebuilt/darwin-x86_64/sysroot" PREFIX="${PWD}/../ffmpeg_library/android/$OUTPUT_FOLDER" LIB_DIR="${PWD}/../ffmpeg_library/android/libs/$OUTPUT_FOLDER" OPTIMIZE_CFLAGS="-march=$CPU" build_android ``` 由于我们的编译脚本不放在 FFmpeg 源码目录中,所以要对路径做一些修改,这样可以绝对地不改动任何 FFmpeg 内容了。 #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)