29.FFmpeg+OpenGLES+OpenSLES播放器實現(三.FFmpeg配置和編譯指令碼)
專案原始碼
FFmpeg開發文件
編譯過程中涉及到很多ndk中的so庫和標頭檔案以及交叉編譯的工具,在命令執行的時候會在ndk相應的目錄下去查詢,所以我們可以使用export命令事先將這些路徑設定到環境變數,使用的時候可以很方便的找到
//NDK加入環境變數,以我的ndk存放路徑為例
export NDK=/root/renzhenming/ffmpeg/android-ndk-r14b
//ndk的platforms資料夾中存放的是各個版本架構下的so庫和標頭檔案
export PLATFORM=$NDK/platforms/android-21/arch-arm
//指定交叉編譯工具的路徑
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
//指定輸出型別,以armv7-a為例
export CPU=armv7-a
//指定so檔案編譯後的輸出路徑
export PREFIX=./android/$CPU
相關命令解析
指令碼中定義了一個方法build_ffmpeg,最終它被呼叫兩次生成支援neon和硬解碼的so庫和不支援neon和硬解碼的so庫
configure :是ffmpeg中已有的一個配置檔案,我們的指令碼其實也就是去執行這個檔案,所有生成so的工作都在這裡進行
prefix : 指定最終生成的so的安裝目錄
target-os : 指定目標系統,早期很多指令碼在2.x上把這個指定為linux,可以,但是ffmpeg更新之後,在3.x的版本之上會導致問題,標頭檔案找不到之類的,這是一點差異
cross-prefix:指定交叉編譯的字首,在交叉編譯的情況下,比如交叉編譯使用的gcc,那麼會在gcc前加上這個字首,就是一個完整的gcc工具的路徑,可以通過這個路徑找到這個工具(/home/renzhenming/ffmpeg/android-ndk-r14b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc)
sysroot:指定這套系統依賴的庫和標頭檔案位置,就是我們配置的PLATFORMS,交叉編譯在本系統中是找不到這些庫的,可以把這些庫看作是交叉編譯的環境。如果在編譯時指定了-sysroot就是為編譯時指定了邏輯目錄。編譯過程中需要引用的庫,標頭檔案,如果要到/usr/include目錄下去找的情況下,則會在前面加上邏輯目錄。
extra-cflags:是使用$(CC)(cc中指定的編譯器)編譯C檔案的選項,給gcc提供的一系列引數,這個可配可不配。 -fPIC編譯動態連結庫的引數, -mfpu指定協處理器,-mfloat-abi=softfp軟浮點
cc : linux下cc一般是一個符號連線,指向gcc,一般是makefile裡面的一個名字,即巨集定義,就把他當做一個已經定義好的變數,可以指定編譯器即可,ffmpeg是c語言寫的,這裡指定gcc為編譯器,g++是c++編譯器
nm:符號檢視工具,nm 命令顯示關於指定 File 中符號的資訊,檔案可以是物件檔案、可執行檔案或物件檔案庫。如果檔案沒有包含符號資訊,nm 命令報告該情況,但不把它解釋為出錯條件。 nm 命令預設情況下報告十進位制符號表示法下的數字值。
enable-shared:編譯成動態庫,大概在3.4之前的ffmpeg版本,我們編譯的時候需要修改configure檔案中的一些引數,因為預設生成的so庫檔名有問題,無法直接呼叫,3.4不再需要手動修改
enable-runtime-cpudetect :開啟執行期cpu檢測,不支援的指令可以自動被替換
enable-gpl:ffmpeg要求商用中如果開啟這個gpl,那麼你的程式碼要開源,否則不準開啟,不開啟有些庫無法使用
enable-small:打出來的so更小
enable-asm:允許彙編,指令優化
支援硬解碼,開啟後jni可以呼叫java的原始碼
--enable-jni
--enable-mediacodec
解碼器
--enable-decoder=h264_mediacodec
硬體加速
--enable-hwaccel=h264_mediacodec \
完整的編譯指令碼
這個指令碼目前經過驗證,可以正常的進行編譯3.4版本和3.4.4版本的ffmpeg,前提是需要保證每一個配置引數的正確,一般如果編譯出現問題,大多是由於ndk的幾個路徑錯誤,NDK/PLATFORM/TOOLCHAIN這三個變數核對一下是否和你的ndk目錄一致
#!/bin/bash
echo "進入編譯ffmpeg指令碼"
NDK=/home/ren/ffmpeg/android-ndk-r14b
#5.0
PLATFORM=$NDK/platforms/android-21/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CPU=arm
#輸出路徑
PREFIX=./android/$CPU
function build_ffmpeg
{
echo "開始編譯ffmpeg"
./configure \
--prefix=$PREFIX \
--target-os=android \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--arch=arm \
--cpu=$CPU \
--extra-libs=-lgcc \
--sysroot=$PLATFORM \
--extra-cflags="$CFLAG" \
--cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \
--nm=$TOOLCHAIN/bin/arm-linux-androideabi-nm \
--enable-shared \
--enable-runtime-cpudetect \
--enable-gpl \
--enable-small \
--enable-cross-compile \
--disable-debug \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-postproc \
--disable-avdevice \
--disable-symver \
--disable-stripping \
$ADD
#開啟16個執行緒
make -j16
make install
echo "編譯結束!"
}
###########################################################
echo "編譯支援neon和硬解碼"
CPU=armv7-a
PREFIX=./android/armv7-a-neon-hard
#-fPIC 作用於編譯階段,告訴編譯器產生與位置無關程式碼(Position-Independent Code),
#則產生的程式碼中,沒有絕對地址,全部使用相對地址,故而程式碼可以被
#載入器載入到記憶體的任意位置,都可以正確的執行。這正是共享庫所要
#求的,共享庫被載入時,在記憶體的位置不是固定的。
#如果不加-fPIC,則載入.so檔案的程式碼段時,程式碼段引用的資料物件需要重
#定位, 重定位會修改程式碼段的內容,這就造成每個使用這個.so檔案程式碼段
#的程式在核心裡都會生成這個.so檔案程式碼段的copy.每個copy都不一樣,
#取決於 這個.so檔案程式碼段和資料段記憶體對映的位置. 也就是
#不加fPIC編譯出來的so,是要再載入時根據載入到的位置再次重定位的.(因
#為它裡面的程式碼並不是位置無關程式碼)
#如果被多個應用程式共同使用,那麼它們必須每個程式維護一份.so的程式碼
#副本了.(因為.so被每個程式載入的位置都不同,顯然這些重定位後的程式碼
#也不同,當然不能共享)
#我們總是用fPIC來生成so,也從來不用fPIC來生成.a;
#-mfpu=neon 浮點協處理器指令,使用硬體浮點的時候,我們需要給編譯器傳遞一些引數,讓編譯器編譯出硬體浮點單元處理器能識別的指令。引數-mfpu就是用來指定要產生哪種硬體浮點運算指令,常用的右vfp和neon等.
#-mfloat-abi=soft使用這個引數時,其將呼叫軟浮點庫(softfloat lib)來持
#對浮點的運算,GCC編譯器已經有這個庫了,一般在libgcc裡面。這
#時根本不會使用任何浮點指令,而是採用常用的指令來模擬浮點運算。
#但使用的ARM晶片不支援硬浮點時,可以考慮使用這個引數。
#-mfloat-abi=softfp
#-mfloat-abi=hard
#這兩個引數都用來產生硬浮點指令,至於產生哪種型別的硬浮點指令,
#需要由-mfpu=xxx引數來指令。這兩個引數不同的地方是:
#-mfloat-abi=softfp生成的程式碼採用相容軟浮點呼叫介面(即使用-mfloat-abi=soft時的呼叫介面),
#這樣帶來的好處是:相容性和靈活性。庫可以採用-mfloat-abi=soft編
#譯,而關鍵的應用程式可以採用-mfloat-abi=softfp來編譯。特別是在庫
#由第三方釋出的情況下。
#-mfloat-abi=hard生成的程式碼採用硬浮點(FPU)呼叫介面。這樣要求所有
#庫和應用程式必須採用這同一個引數來編譯,否則連線時會出現介面不
#相容錯誤。
#預設情況下,gcc在下面目錄中搜尋標頭檔案:
#/usr/local/include/
#/usr/include/
#在下面目錄中搜尋庫:
#/usr/local/lib/
#/usr/lib/
CFLAG="-I$PLATFORM/usr/include -fPIC -DANDROID -mfpu=neon -mfloat-abi=softfp "
#--enable-asm程式集優化
ADD="--enable-asm \
#neon指令集,開發者可以為需要高效能的應用程式編寫NEON指令來實現相應功能
#NEON:SIMD(SingleInstructionMultipleData單指令多重資料)指令集,其針對多媒體
#和訊號處理程式具備標準化的加速能力。
--enable-neon \
#新增jni支援,那麼ffmpeg可以呼叫java程式碼
--enable-jni \
# 硬解碼相關
--enable-mediacodec \
--enable-decoder=h264_mediacodec \
--enable-hwaccel=h264_mediacodec "
build_ffmpeg
###########################################################
echo "編譯不支援neon和硬解碼"
CPU=armv7-a
PREFIX=./android/$CPU
#VFP:(VectorFloatPoint),向量浮點運算單元,arm11(s3c6410支援
#VFPv2),Cortex-#A8(s5pv210)支援VFPv3.
#-mfpu=name(neonorvfpvx)指定FPU單元
#-mfloat-abi=name(soft、hard、softfp):指定軟體浮點或硬體浮點或相容軟浮點呼叫
#介面
#如果只指定-mfpu,那麼預設編譯不會選擇選擇硬體浮點指令集
#如果只指定-mfloat-abi=hard或者softfp,那麼編譯會使用硬體浮點指令集
CFLAG="-I$PLATFORM/usr/include -fPIC -DANDROID -mfpu=vfp -mfloat-abi=softfp "
ADD=
build_ffmpeg
ffmpeg編譯引數解析
來自./configure --help
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
Standard options:
--logfile=FILE log tests and output to FILE [ffbuild/config.log]
--disable-logging do not log configure debug information
--fatal-warnings fail if any configure warning is generated
--prefix=PREFIX install in PREFIX [/usr/local]
--bindir=DIR install binaries in DIR [PREFIX/bin]
--datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
--docdir=DIR install documentation in DIR [PREFIX/share/doc/ffmpeg]
--libdir=DIR install libs in DIR [PREFIX/lib]
--shlibdir=DIR install shared libs in DIR [LIBDIR]
--incdir=DIR install includes in DIR [PREFIX/include]
--mandir=DIR install man page in DIR [PREFIX/share/man]
--pkgconfigdir=DIR install pkg-config files in DIR [LIBDIR/pkgconfig]
--enable-rpath use rpath to allow installing libraries in paths
not part of the dynamic linker search path
use rpath when linking programs (USE WITH CARE)
--install-name-dir=DIR Darwin directory name for installed targets
Licensing options:
--enable-gpl allow use of GPL code, the resulting libs
and binaries will be under GPL [no]
--enable-version3 upgrade (L)GPL to version 3 [no]
--enable-nonfree allow use of nonfree code, the resulting libs
and binaries will be unredistributable [no]
Configuration options:
--disable-static do not build static libraries [no]
--enable-shared build shared libraries [no]
--enable-small optimize for size instead of speed
--disable-runtime-cpudetect disable detecting CPU capabilities at runtime (smaller binary)
--enable-gray enable full grayscale support (slower color)
--disable-swscale-alpha disable alpha channel support in swscale
--disable-all disable building components, libraries and programs
--disable-autodetect disable automatically detected external libraries [no]
Program options:
--disable-programs do not build command line programs
--disable-ffmpeg disable ffmpeg build
--disable-ffplay disable ffplay build
--disable-ffprobe disable ffprobe build
--disable-ffserver disable ffserver build
Documentation options:
--disable-doc do not build documentation
--disable-htmlpages do not build HTML documentation pages
--disable-manpages do not build man documentation pages
--disable-podpages do not build POD documentation pages
--disable-txtpages do not build text documentation pages
Component options:
--disable-avdevice disable libavdevice build
--disable-avcodec disable libavcodec build
--disable-avformat disable libavformat build
--disable-swresample disable libswresample build
--disable-swscale disable libswscale build
--disable-postproc disable libpostproc build
--disable-avfilter disable libavfilter build
--enable-avresample enable libavresample build [no]
--disable-pthreads disable pthreads [autodetect]
--disable-w32threads disable Win32 threads [autodetect]
--disable-os2threads disable OS/2 threads [autodetect]
--disable-network disable network support [no]
--disable-dct disable DCT code
--disable-dwt disable DWT code
--disable-error-resilience disable error resilience code
--disable-lsp disable LSP code
--disable-lzo disable LZO decoder code
--disable-mdct disable MDCT code
--disable-rdft disable RDFT code
--disable-fft disable FFT code
--disable-faan disable floating point AAN (I)DCT code
--disable-pixelutils disable pixel utils in libavutil
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
--disable-v4l2_m2m disable V4L2 mem2mem code [autodetect]
External library support:
Using any of the following switches will allow FFmpeg to link to the
corresponding external library. All the components depending on that library
will become enabled, if all their other dependencies are met and they are not
explicitly disabled. E.g. --enable-libwavpack will enable linking to
libwavpack and allow the libwavpack encoder to be built, unless it is
specifically disabled with --disable-encoder=libwavpack.
Note that only the system libraries are auto-detected. All the other external
libraries must be explicitly enabled.
Also note that the following help text describes the purpose of the libraries
themselves, not all their features will necessarily be usable by FFmpeg.
--disable-alsa disable ALSA support [autodetect]
--disable-appkit disable Apple AppKit framework [autodetect]
--disable-avfoundation disable Apple AVFoundation framework [autodetect]
--enable-avisynth enable reading of AviSynth script files [no]
--disable-bzlib disable bzlib [autodetect]
--disable-coreimage disable Apple CoreImage framework [autodetect]
--enable-chromaprint enable audio fingerprinting with chromaprint [no]
--enable-frei0r enable frei0r video filtering [no]
--enable-gcrypt enable gcrypt, needed for rtmp(t)e support
if openssl, librtmp or gmp is not used [no]
--enable-gmp enable gmp, needed for rtmp(t)e support
if openssl or librtmp is not used [no]
--enable-gnutls enable gnutls, needed for https support
if openssl is not used [no]
--disable-iconv disable iconv [autodetect]
--disable-jack disable libjack support [autodetect]
--enable-jni enable JNI support [no]
--enable-ladspa enable LADSPA audio filtering [no]
--enable-libass enable libass subtitles rendering,
needed for subtitles and ass filter [no]
--enable-libbluray enable BluRay reading using libbluray [no]
--enable-libbs2b enable bs2b DSP library [no]
--enable-libcaca enable textual display using libcaca [no]
--enable-libcelt enable CELT decoding via libcelt [no]
--enable-libcdio enable audio CD grabbing with libcdio [no]
--enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
and libraw1394 [no]
--enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no]
--enable-libflite enable flite (voice synthesis) support via libflite [no]
--enable-libfontconfig enable libfontconfig, useful for drawtext filter [no]
--enable-libfreetype enable libfreetype, needed for drawtext filter [no]
--enable-libfribidi enable libfribidi, improves drawtext filter [no]
--enable-libgme enable Game Music Emu via libgme [no]
--enable-libgsm enable GSM de/encoding via libgsm [no]
--enable-libiec61883 enable iec61883 via libiec61883 [no]
--enable-libilbc enable iLBC de/encoding via libilbc [no]
--enable-libkvazaar enable HEVC encoding via libkvazaar [no]
--enable-libmodplug enable ModPlug via libmodplug [no]
--enable-libmp3lame enable MP3 encoding via libmp3lame [no]
--enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
--enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
--enable-libopencv enable video filtering via libopencv [no]
--enable-libopenh264 enable H.264 encoding via OpenH264 [no]
--enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no]
--enable-libopenmpt enable decoding tracked files via libopenmpt [no]
--enable-libopus enable Opus de/encoding via libopus [no]
--enable-libpulse enable Pulseaudio input via libpulse [no]
--enable-librsvg enable SVG rasterization via librsvg [no]
--enable-librubberband enable rubberband needed for rubberband filter [no]
--enable-librtmp enable RTMP[E] support via librtmp [no]
--enable-libshine enable fixed-point MP3 encoding via libshine [no]
--enable-libsmbclient enable Samba protocol via libsmbclient [no]
--enable-libsnappy enable Snappy compression, needed for hap encoding [no]
--enable-libsoxr enable Include libsoxr resampling [no]
--enable-libspeex enable Speex de/encoding via libspeex [no]
--enable-libssh enable SFTP protocol via libssh [no]
--enable-libtesseract enable Tesseract, needed for ocr filter [no]
--enable-libtheora enable Theora encoding via libtheora [no]
--enable-libtwolame enable MP2 encoding via libtwolame [no]
--enable-libv4l2 enable libv4l2/v4l-utils [no]
--enable-libvidstab enable video stabilization using vid.stab [no]
--enable-libvmaf enable vmaf filter via libvmaf [no]
--enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no]
--enable-libvorbis enable Vorbis en/decoding via libvorbis,
native implementation exists [no]
--enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no]
--enable-libwavpack enable wavpack encoding via libwavpack [no]
--enable-libwebp enable WebP encoding via libwebp [no]
--enable-libx264 enable H.264 encoding via x264 [no]
--enable-libx265 enable HEVC encoding via x265 [no]
--enable-libxavs enable AVS encoding via xavs [no]
--enable-libxcb enable X11 grabbing using XCB [autodetect]
--enable-libxcb-shm enable X11 grabbing shm communication [autodetect]
--enable-libxcb-xfixes enable X11 grabbing mouse rendering [autodetect]
--enable-libxcb-shape enable X11 grabbing shape rendering [autodetect]
--enable-libxvid enable Xvid encoding via xvidcore,
native MPEG-4/Xvid encoder exists [no]
--enable-libxml2 enable XML parsing using the C library libxml2 [no]
--enable-libzimg enable z.lib, needed for zscale filter [no]
--enable-libzmq enable message passing via libzmq [no]
--enable-libzvbi enable teletext support via libzvbi [no]
--disable-lzma disable lzma [autodetect]
--enable-decklink enable Blackmagic DeckLink I/O support [no]
--enable-libndi_newtek enable Newteck NDI I/O support [no]
--enable-mediacodec enable Android MediaCodec support [no]
--enable-libmysofa enable libmysofa, needed for sofalizer filter [no]
--enable-openal enable OpenAL 1.1 capture support [no]
--enable-opencl enable OpenCL code
--enable-opengl enable OpenGL rendering [no]
--enable-openssl enable openssl, needed for https support
if gnutls is not used [no]
--disable-sndio disable sndio support [autodetect]
--disable-schannel disable SChannel SSP, needed for TLS support on
Windows if openssl and gnutls are not used [autodetect]
--disable-sdl2 disable sdl2 [autodetect]
--disable-securetransport disable Secure Transport, needed for TLS support
on OSX if openssl and gnutls are not used [autodetect]
--disable-xlib disable xlib [autodetect]
--disable-zlib disable zlib [autodetect]
The following libraries provide various hardware acceleration features:
--disable-audiotoolbox disable Apple AudioToolbox code [autodetect]
--disable-cuda disable dynamically linked Nvidia CUDA code [autodetect]
--enable-cuda-sdk enable CUDA features that require the CUDA SDK [no]
--disable-cuvid disable Nvidia CUVID support [autodetect]
--disable-d3d11va disable Microsoft Direct3D 11 video acceleration code [autodetect]
--disable-dxva2 disable Microsoft DirectX 9 video acceleration code [autodetect]
--enable-libdrm enable DRM code (Linux) [no]
--enable-libmfx enable Intel MediaSDK (AKA Quick Sync Video) code via libmfx [no]
--enable-libnpp enable Nvidia Performance Primitives-based code [no]
--enable-mmal enable Broadcom Multi-Media Abstraction Layer (Raspberry Pi) via MMAL [no]
--disable-nvenc disable Nvidia video encoding code [autodetect]
--enable-omx enable OpenMAX IL code [no]
--enable-omx-rpi enable OpenMAX IL code for Raspberry Pi [no]
--enable-rkmpp enable Rockchip Media Process Platform code [no]
--disable-vaapi disable Video Acceleration API (mainly Unix/Intel) code [autodetect]
--disable-vda disable Apple Video Decode Acceleration code [autodetect]
--disable-vdpau disable Nvidia Video Decode and Presentation API for Unix code [autodetect]
--disable-videotoolbox disable VideoToolbox code [autodetect]
Toolchain options:
--arch=ARCH select architecture []
--cpu=CPU select the minimum required CPU (affects
instruction selection, may crash on older CPUs)
--cross-prefix=PREFIX use PREFIX for compilation tools []
--progs-suffix=SUFFIX program name suffix []
--enable-cross-compile assume a cross-compiler is used
--sysroot=PATH root of cross-build tree
--sysinclude=PATH location of cross-build system headers
--target-os=OS compiler targets OS []
--target-exec=CMD command to run executables on target
--target-path=DIR path to view of build directory on target
--target-samples=DIR path to samples directory on target
--tempprefix=PATH force fixed dir/prefix instead of mktemp for checks
--toolchain=NAME set tool defaults according to NAME
--nm=NM use nm tool NM [nm -g]
--ar=AR use archive tool AR [ar]
--as=AS use assembler AS []
--ln_s=LN_S use symbolic link tool LN_S [ln -s -f]
--strip=STRIP use strip tool STRIP [strip]
--windres=WINDRES use windows resource compiler WINDRES [windres]
--x86asmexe=EXE use nasm-compatible assembler EXE [nasm]
--cc=CC use C compiler CC [gcc]
--cxx=CXX use C compiler CXX [g++]
--objcc=OCC use ObjC compiler OCC [gcc]
--dep-cc=DEPCC use dependency generator DEPCC [gcc]
--nvcc=NVCC use Nvidia CUDA compiler NVCC [nvcc]
--ld=LD use linker LD []
--pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [pkg-config]
--pkg-config-flags=FLAGS pass additional flags to pkgconf []
--ranlib=RANLIB use ranlib RANLIB [ranlib]
--doxygen=DOXYGEN use DOXYGEN to generate API doc [doxygen]
--host-cc=HOSTCC use host C compiler HOSTCC
--host-cflags=HCFLAGS use HCFLAGS when compiling for host
--host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
--host-ld=HOSTLD use host linker HOSTLD
--host-ldflags=HLDFLAGS use HLDFLAGS when linking for host
--host-libs=HLIBS use libs HLIBS when linking for host
--host-os=OS compiler host OS []
--extra-cflags=ECFLAGS add ECFLAGS to CFLAGS []
--extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS []
--extra-objcflags=FLAGS add FLAGS to OBJCFLAGS []
--extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS []
--extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS []
--extra-ldlibflags=ELDFLAGS add ELDFLAGS to LDLIBFLAGS []
--extra-libs=ELIBS add ELIBS []
--extra-version=STRING version string suffix []
--optflags=OPTFLAGS override optimization-related compiler flags
--nvccflags=NVCCFLAGS override nvcc flags [-gencode arch=compute_30,code=sm_30 -O2]
--build-suffix=SUFFIX library name suffix []
--enable-pic build position-independent code
--enable-thumb compile for Thumb instruction set
--enable-lto use link-time optimization
--env="ENV=override" override the environment variables
Advanced options (experts only):
--malloc-prefix=PREFIX prefix malloc and related names with PREFIX
--custom-allocator=NAME use a supported custom allocator
--disable-symver disable symbol versioning
--enable-hardcoded-tables use hardcoded tables instead of runtime generation
--disable-safe-bitstream-reader
disable buffer boundary checking in bitreaders
(faster, but may crash)
--sws-max-filter-size=N the max filter size swscale uses [256]
Optimization options (experts only):
--disable-asm disable all assembly optimizations
--disable-altivec disable AltiVec optimizations
--disable-vsx disable VSX optimizations
--disable-power8 disable POWER8 optimizations
--disable-amd3dnow disable 3DNow! optimizations
--disable-amd3dnowext disable 3DNow! extended optimizations
--disable-mmx disable MMX optimizations
--disable-mmxext disable MMXEXT optimizations
--disable-sse disable SSE optimizations
--disable-sse2 disable SSE2 optimizations
--disable-sse3 disable SSE3 optimizations
--disable-ssse3 disable SSSE3 optimizations
--disable-sse4 disable SSE4 optimizations
--disable-sse42 disable SSE4.2 optimizations
--disable-avx disable AVX optimizations
--disable-xop disable XOP optimizations
--disable-fma3 disable FMA3 optimizations
--disable-fma4 disable FMA4 optimizations
--disable-avx2 disable AVX2 optimizations
--disable-aesni disable AESNI optimizations
--disable-armv5te disable armv5te optimizations
--disable-armv6 disable armv6 optimizations
--disable-armv6t2 disable armv6t2 optimizations
--disable-vfp disable VFP optimizations
--disable-neon disable NEON optimizations
--disable-inline-asm disable use of inline assembly
--disable-x86asm disable use of standalone x86 assembly
--disable-mipsdsp disable MIPS DSP ASE R1 optimizations
--disable-mipsdspr2 disable MIPS DSP ASE R2 optimizations
--disable-msa disable MSA optimizations
--disable-mipsfpu disable floating point MIPS optimizations
--disable-mmi disable Loongson SIMD optimizations
--disable-fast-unaligned consider unaligned accesses slow
Developer options (useful when working on FFmpeg itself):
--disable-debug disable debugging symbols
--enable-debug=LEVEL set the debug level []
--disable-optimizations disable compiler optimizations
--enable-extra-warnings enable more compiler warnings
--disable-stripping disable stripping of executables and shared libraries
--assert-level=level 0(default), 1 or 2, amount of assertion testing,
2 causes a slowdown at runtime.
--enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
--valgrind=VALGRIND run "make fate" tests through valgrind to detect memory
leaks and errors, using the specified valgrind binary.
Cannot be combined with --target-exec
--enable-ftrapv Trap arithmetic overflows
--samples=PATH location of test samples for FATE, if not set use
$FATE_SAMPLES at make invocation time.
--enable-neon-clobber-test check NEON registers for clobbering (should be
used only for debugging purposes)
--enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
should be used only for debugging purposes)
--enable-random randomly enable/disable components
--disable-random
--enable-random=LIST randomly enable/disable specific components or
--disable-random=LIST component groups. LIST is a comma-separated list
of NAME[:PROB] entries where NAME is a component
(group) and PROB the probability associated with
NAME (default 0.5).
--random-seed=VALUE seed value for --enable/disable-random
--disable-valgrind-backtrace do not print a backtrace under Valgrind
(only applies to --disable-optimizations builds)
--enable-osfuzz Enable building fuzzer tool
--libfuzzer=PATH path to libfuzzer
--ignore-tests=TESTS comma-separated list (without "fate-" prefix
in the name) of tests whose result is ignored
--enable-linux-perf enable Linux Performance Monitor API
相關文章
- ffmpeg iOS平臺編譯 指令碼註釋iOS編譯指令碼
- Android 基於ffmpeg開發簡易播放器 - NDK交叉編譯ffmpegAndroid播放器編譯
- FFmpeg學習之一(FFmpeg原始碼編譯)原始碼編譯
- 基於FFmpeg和Qt實現簡易影片播放器QT播放器
- Web 端 H265 播放器 (上):WebAssembly 編碼 FFmpegWeb播放器
- ffmpeg播放器開發 詳細記錄+程式碼實現3播放器
- 安裝編譯ffmpeg編譯
- Make編譯之編譯32bit ffmpeg編譯
- 11.QT-ffmpeg+QAudioOutput實現音訊播放器QT音訊播放器
- ffmpeg播放器實現詳解 - 視訊顯示播放器
- 交叉編譯-Mac環境使用NDK編譯FFmpeg編譯Mac
- 使用gulp和bable實現實時編譯ES6程式碼編譯
- 第二章 編譯FFmpeg並開啟H.264編碼編譯
- 從fdk_aac編碼器到自動靜態編譯FFmpeg編譯
- FFmpeg系列(一)-Mac環境下使用NDK編譯FFmpegMac編譯
- JavaCV FFmpeg AAC編碼Java
- NDKr20編譯ffmpeg-4.2.2編譯
- Android-ffmpeg編譯so檔案Android編譯
- Mac中編譯FFmpeg教程(Android版)Mac編譯Android
- FFmpeg編譯Android使用的so庫編譯Android
- 實現指令碼直譯器 - 詞法分析器指令碼詞法分析
- Java的指令碼機制、編譯器APIJava指令碼編譯API
- 【C++】從零開始,只使用FFmpeg,Win32 API,實現一個播放器(三)C++Win32API播放器
- openssl原始碼編譯及配置方法原始碼編譯
- FFmpeg+SDL2實現簡易音視訊同步播放器播放器
- 35.FFmpeg+OpenGLES+OpenSLES播放器實現(九.OpenGLES播放視訊)播放器
- FFmpeg程式碼實現視訊剪下
- 透過 GitHub Actions 實現程式碼的自動編譯和釋出Github編譯
- 幾百行程式碼實現一個指令碼直譯器行程指令碼
- 簡單分析AutoIt指令碼的反編譯和程式碼格式化問題指令碼編譯
- 實現交叉編譯gdb和gdbserver(gdb-7.6)編譯Server
- ffmpeg安裝之linux編譯安裝Linux編譯
- Android短影片系統硬編碼—實現音影片編碼(三)Android
- FFmpeg開發筆記(八)Linux交叉編譯Android的FFmpeg庫筆記Linux編譯Android
- LeetCode第三題之二:編碼實現LeetCode
- Verilog 編譯指令簡介編譯
- Locust 程式碼指令碼實現指令碼
- FFmpeg開發筆記(七)尤拉系統編譯安裝FFmpeg筆記編譯