配置
帮助 >> ./configure -h (切换到ffmpeg根目录)
列举功能支持项 (Help options)
--help print this message
--quiet Suppress showing informative output
--list-decoders show all available decoders
--list-encoders show all available encoders
--list-hwaccels show all available hardware accelerators
--list-demuxers show all available demuxers
--list-muxers show all available muxers
--list-parsers show all available parsers
--list-protocols show all available protocols
--list-bsfs show all available bitstream filters
--list-indevs show all available input devices
--list-outdevs show all available output devices
--list-filters show all available filters
配置功能支持项 (Individual component options)
--disable-everything disable all components listed below
--disable-encoder=NAME disable encoder NAME
--enable-encoder=NAME enable encoder NAME
--disable-encoders disable all encoders
--disable-decoder=NAME disable decoder NAME
--enable-decoder=NAME enable decoder NAME
--disable-decoders disable all decoders
--disable-hwaccel=NAME disable hwaccel NAME
--enable-hwaccel=NAME enable hwaccel NAME
--disable-hwaccels disable all hwaccels
--disable-muxer=NAME disable muxer NAME
--enable-muxer=NAME enable muxer NAME
--disable-muxers disable all muxers
--disable-demuxer=NAME disable demuxer NAME
--enable-demuxer=NAME enable demuxer NAME
--disable-demuxers disable all demuxers
--enable-parser=NAME enable parser NAME
--disable-parser=NAME disable parser NAME
--disable-parsers disable all parsers
--enable-bsf=NAME enable bitstream filter NAME
--disable-bsf=NAME disable bitstream filter NAME
--disable-bsfs disable all bitstream filters
--enable-protocol=NAME enable protocol NAME
--disable-protocol=NAME disable protocol NAME
--disable-protocols disable all protocols
--enable-indev=NAME enable input device NAME
--disable-indev=NAME disable input device NAME
--disable-indevs disable input devices
--enable-outdev=NAME enable output device NAME
--disable-outdev=NAME disable output device NAME
--disable-outdevs disable output devices
--disable-devices disable all devices
--enable-filter=NAME enable filter NAME
--disable-filter=NAME disable filter NAME
--disable-filters disable all filters
外部库:(通过./configure -h命令输出的External library support项查看)
--enable-libfdk-aac 链接libfdk-aac库,用于libfdk_aac编码器和解码器
(--enable-encoder=libfdk_aac和--enable-decoder=libfdk_aac)
--enable-openssl 链接openssl库,用于https功能;
工具链:(通过./configure -h命令输出的Toolchain options项查看)
--sysroot= "../MacOSX10.10.sdk"或"../android-ndk-r10e/platforms/android-19/arch-arm"
--extra-cflags "-I../tool/fdk-aac@2.0.2/include -I../tool/openssl@1.0.1u/include"
--extra-ldflags "-L../tool/fdk-aac@2.0.2/lib -L../tool/openssl@1.0.1u/lib"
--extra-libs "-lfdk-aac -lssl -lcrypto"
------------------------------------------------------------------
--enable-cross-compile
--arch "arm"、"aarch64"
--target-os "linux"、"android"
--cc
--nm
工具链:$ANDROID_NDK_HOME/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64
cc: bin/arm-linux-androideabi-gcc
nm: arm-linux-androideabi-nm
windows 编译
windows
glext
Download GLEXT - Win32 OpenGL Extension API from SourceForge.net
Mali_OpenGL_ES_Emulator-v3.0.4-2-g8d905-Windows-64bit.zip
nv-codec-headers-10.0.26.0.tar.gz
https://github.com/FFmpeg/nv-codec-headers/releases/tag/n10.0.26.0
AMF-1.4.16.tar.gz
https://github.com/GPUOpen-LibrariesAndSDKs/AMF/releases/tag/1.4.16
VSNASM.zip (2017\Community\Common7\IDE\VC\VCTargets\BuildCustomizations)
Release 0.7 · ShiftMediaProject/VSNASM · GitHub
nasm.exe和ndisasm.exe (C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC)
https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/win64/nasm-2.14.02-win64.zip
VSYASM.zip
https://github.com/ShiftMediaProject/VSYASM/releases/tag/0.6
创建编译根目录ffmpeg_compile,在此目录创建source目录,克隆ffmpeg,重置为指定分支,执行依赖脚本
@echo off
md ffmpeg_compile && cd ffmpeg_compile
md source && cd source
git clone https://github.com/ShiftMediaProject/FFmpeg.git
git reset --hard 18e58146bb0ef4b2d421d8f6f681c0562b7b1c01
@echo off
set runtime_dir=%cd%
set script_dir=%~dp0
set source_dir=%cd%\ffmpeg_local\source
if EXIST ffmpeg_local rd /s /q ffmpeg_local
md ffmpeg_local && cd ffmpeg_local
md source && cd %script_dir%
rem 遍历出隐藏 git文件夹
rem 创建出 git 去掉隐藏属性
rem 复制到 git 增加隐藏属性
rem 还有隐藏属性
for /f "tokens=1,2 delims=." %%i in ('dir /AHD /B') do (
echo "------------------------------> %%i.%%j"
md %source_dir%\%%i
md %source_dir%\%%i\.git
attrib -h %%i.%%j
xcopy /e /q %%i.%%j %source_dir%\%%i\.git
attrib +h %source_dir%\%%i\.git
pushd %source_dir%\%%i
git checkout .
popd
attrib +h %%i.%%j)
pause
ILBC_STATIC_DEFINE
FRIBIDI_LIB_STATIC
android 编译
# -arch - arm/aarch64/i686/x86_64
# -cpu - armv7-a/armv8-a/x86/x86_64
macos
- FFmpeg( 4.3.1 ),下载链接:https://codeload.github.com/FFmpeg/FFmpeg/tar.gz/n4.3.1
- NDK ( r19c ), 下载链接:https://dl.google.com/android/repository/android-ndk-r19c-darwin-x86_64.zip
build_android_r19c_macos.sh
#!/bin/bash
# NDK 路径
NDK_HOME=/Users/yuan/Project/android/ffmpeg/android-ndk-r19c
# 工具链和系统 - Android 5.0
TOOLCHAIN=$NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64
SYSROOT=$NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/sysroot
API=21
# armv7-a
function build_arm
{
./configure \
--prefix=$(pwd)/../android_ffmpeg/armv7-a \
--enable-gpl \
--enable-nonfree \
--enable-version3 \
--enable-small \
--enable-shared \
--disable-static \
--disable-doc \
--disable-programs \
--disable-symver \
--enable-debug \
--enable-asm \
--enable-jni \
--enable-neon \
--enable-mediacodec \
--enable-avfilter \
--disable-postproc \
--enable-cross-compile \
--target-os=android \
--arch=arm \
--cpu=armv7-a \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--sysroot=$SYSROOT \
--cc=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang \
--cxx=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++ \
--extra-cflags="-isysroot $NDK_HOME/sysroot -Os -fpic -mfloat-abi=softfp -mfpu=neon -marm -march=armv7-a" \
--extra-ldflags="-marm"
make clean
make j2
make install
}
# armv8-a
function build_aarch64
{
./configure \
--prefix=$(pwd)/../android_ffmpeg/armv8-a \
--enable-gpl \
--enable-nonfree \
--enable-version3 \
--enable-small \
--enable-shared \
--disable-static \
--disable-doc \
--disable-programs \
--disable-symver \
--enable-debug \
--enable-asm \
--enable-jni \
--enable-neon \
--enable-mediacodec \
--enable-avfilter \
--disable-postproc \
--enable-cross-compile \
--target-os=android \
--arch=aarch64 \
--cpu=armv8-a \
--cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android- \
--sysroot=$SYSROOT \
--cc=$TOOLCHAIN/bin/aarch64-linux-android$API-clang \
--cxx=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++ \
--extra-cflags="-isysroot $NDK_HOME/sysroot -Os -fpic -marm -march=armv8-a" \
--extra-ldflags="-marm"
make clean
make j2
make install
}
build_arm
build_aarch64
Linux
- FFmpeg( 4.3.1 ),下载链接:https://codeload.github.com/FFmpeg/FFmpeg/tar.gz/n4.3.1
- NDK ( r19c ), 下载链接:https://dl.google.com/android/repository/android-ndk-r19c-linux-x86_64.zip
macos 编译
出现下面红色字体错误:
- nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.
- ERROR: libfdk_aac not found
- C compiler test failed.
默认打开
通过配置关闭 --disable-x86asm,
或者加入yasm和nasm执行程序路径
export PATH=../../tool/yasm@1.2.0/bin:../../tool/nasm@2.15.05:$PATH
默认关闭 ,启用配置为 --enable-encoder=libfdk_aac
C compiler test failed.通常是路径问题
比如:(下面路径不存在都有可能出现这样的错误)
--extra-cflags=$EXTRA_CFLAGS
--extra-ldflags=$EXTRA_LDFLAGS
--sysroot="../../tool/MacOSX10.10.sdk"