FFmpeg<第一篇>:环境配置
1、官网地址
http://ffmpeg.org/download.html
2、linux下载ffmpeg
下载:
wget https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2解压:
tar xvf ffmpeg-snapshot.tar.bz2
3、FFmpeg ./configure编译参数汇总
解压 ffmpeg-snapshot.tar.bz2 之后,在根目录下有配置文件:configure,执行该文件可以生成Makefile,configure文件中记录了configure的编译参数。
【1】Help options 帮助选项
--help 打印显示帮助信息
--quiet 禁止显示信息输出
--list-decoders 显示所有可用的解码器
--list-encoders 显示所有可用的编码器
--list-hwaccels 显示所有可用的硬件加速器
--list-demuxers 显示所有可用的解复用器
--list-muxers 显示所有可用的复用器
--list-parsers 显示所有可用的解析器
--list-protocols 显示所有可用的协议
--list-bsfs 显示所有可用的比特流过滤器
--list-indevs 显示所有可用的输入设备
--list-outdevs 显示所有可用的输出设备
--list-filters 显示所有可用的过滤器
【2】 Standard options 标准选项
--logfile=FILE 记录测试并输出到 指定文件FILE ,默认为ffbuild/config.log
--disable-logging 不记录配置调试信息
--fatal-warnings 如果生成任何配置警告,则失败
--prefix=PREFIX 安装在指定路径PREFIX,默认为/usr/local
--bindir=DIR 在指定路径DIR 中安装二进制文件,默认为PREFIX/bin
--datadir=DIR 在指定路径DIR中安装数据文件,默认为PREFIX/share/ffmpeg
--docdir=DIR 在指定路径DIR中安装文档,默认为PREFIX/share/doc/ffmpeg
--libdir=DIR 在指定路径安装库,默认为PREFIX/lib
--shlibdir=DIR 在指定路径安装共享库,默认为LIBDIR,即PREFIX/lib
--incdir=DIR 在指定路径安装包含文件,默认为PREFIX/include
--mandir=DIR 在指定路径安装手册页,默认为PREFIX/share/man
--pkgconfigdir=DIR 在指定路径安装pkg-config 文件,默认为LIBDIR/pkgconfig
--enable-rpath 使用rpath允许在不属于动态链接器搜索路径的路径中安装库链接程序时使用rpath(小心使用)
--install-name-dir=DIR Darwin 已安装目标的目录名称
【3】Licensing options 证书选项
--enable-gpl 允许使用GPL代码,编译的库和二进制文件处于GPL许可下,默认为否
--enable-version3 升级(L)GPL到版本3,默认为否
--enable-nonfree 允许使用非自由代码,并且二进制文件将不可再分发,默认为否
【4】Configuration options 配置选项
--disable-static 不构建静态库,默认为否
--enable-shared 构建共享动态库,默认为否
--enable-small 优化大小而不是速度
--disable-runtime-cpudetect 禁用在运行时检测 CPU 功能(较小的二进制文件)
--enable-gray 启用全灰度支持(较慢的颜色)
--disable-swscale-alpha 在 swscale 中禁用 alpha 通道支持
--disable-all 禁用构建组件、库和程序
--disable-autodetect 禁用自动检测到的外部库,默认为否
【5】Program options 程序选项
--disable-programs 不构建命令行程序
--disable-ffmpeg 禁用 ffmpeg 构建
--disable-ffplay 禁用 ffplay 构建
--disable-ffprobe 禁用 ffprobe 构建
【6】Documentation options 文档选项
--disable-doc 不构建文档
--disable-htmlpages 不构建 HTML 文档页面
--disable-manpages 不构建手册文档页面
--disable-podpages 不构建 POD 文档页面
--disable-txtpages 不构建文本文档页面
【7】Component options 组件选项
--disable-avdevice 禁用 libavdevice 构建
--disable-avcodec 禁用 libavcodec 构建
--disable-avformat 禁用 libavformat 构建
--disable-swresample 禁用 libswresample 构建
--disable-swscale 禁用 libswscale 构建
--disable-postproc 禁用 libpostproc 构建
--disable-avfilter 禁用 libavfilter 构建
--enable-avresample 启用 libavresample 构建(已弃用),默认为否
--disable-pthreads 禁用 pthreads [自动检测]
--disable-w32threads 禁用 Win32 线程 [自动检测]
--disable-os2threads 禁用 OS/2 线程 [自动检测]
--disable-network 禁用网络支持 ,默认为否
--disable-dct 禁用 DCT 代码
--disable-dwt 禁用 DWT 代码
--disable-error-resilience 禁用错误恢复代码
--disable-lsp 禁用 LSP 代码
--disable-lzo 禁用 LZO 解码器代码
--disable-mdct 禁用 MDCT 代码
--disable-rdft 禁用 RDFT 代码
--disable-fft 禁用 FFT 代码
--disable-faan 禁用浮点 AAN (I)DCT 代码
--disable-pixelutils 在 libavutil 中禁用像素工具
【8】Individual component options 独立组件选项
--disable-everything 禁用下面列出的所有组件
--disable-encoder=NAME 禁用指定NAME的编码器
--enable-encoder=NAME 启用指定NAME的编码器
--disable-encoders 禁用所有编码器
--disable-decoder=NAME 禁用指定NAME的解码器
--enable-decoder=NAME 启用指定NAME的解码器
--disable-decoders 禁用所有解码器
--disable-hwaccel=NAME 禁用指定NAME的硬件
--enable-hwaccel=NAME 启用指定NAME的硬件
--disable-hwaccels 禁用所有 hwaccels
--disable-muxer=NAME 禁用指定NAME的复用器
--enable-muxer=NAME 启用指定NAME的复用器
--disable-muxers 禁用所有复用器
--disable-demuxer=NAME 禁用指定NAME的解复用器
--enable-demuxer=NAME 启用指定NAME的解复用器
--disable-demuxers 禁用所有解复用器
--enable-parser=NAME 启用指定NAME的解析器
--disable-parser=NAME 禁用指定NAME的解析器
--disable-parsers 禁用所有解析器
--enable-bsf=NAME 启用指定NAME的比特流过滤器
--disable-bsf=NAME 禁用指定NAME的比特流过滤器
--disable-bsfs 禁用所有比特流过滤器
--enable-protocol=NAME 启用指定NAME协议
--disable-protocol=NAME 禁用指定NAME协议
--disable-protocols 禁用所有协议
--enable-indev=NAME 启用指定NAME的输入设备
--disable-indev=NAME 禁用指定NAME的输入设备
--disable-indevs 禁用输入设备
--enable-outdev=NAME 启用指定NAME的输出设备
--disable-outdev=NAME 禁用指定NAME的输出设备
--disable-outdevs 禁用输出设备
--disable-devices 禁用所有设备
--enable-filter=NAME 启用指定NAME的过滤器名称
--disable-filter=NAME 禁用指定NAME的过滤器名称
--disable-filters 禁用所有过滤器
【9】External library support 扩展库支持
使用以下任何选项将允许 FFmpeg 链接到相应的外部库。
如果满足所有其他依赖项并且未明确禁用它们,则依赖于该库的所有组件都将启用。
例如,--enable-libopus
将启用与 libopus 的链接并允许构建 libopus 编码器,
除非使用 --disable-encoder=libopus
明确禁用它。
--disable-alsa 禁用 ALSA 支持 [自动检测]
--disable-appkit 禁用 Apple AppKit 框架 [自动检测]
--disable-avfoundation 禁用 Apple AVFoundation 框架 [自动检测]
--enable-avisynth 启用读取 AviSynth 脚本文件 [否]
--disable-bzlib 禁用 bzlib [自动检测]
--disable-coreimage 禁用 Apple CoreImage 框架 [自动检测]
--enable-chromaprint 使用 chromaprint 启用音频指纹识别,默认为否
--enable-frei0r 启用 frei0r 视频过滤 ,默认为否
--enable-gcrypt 启用 gcrypt,需要 rtmp(t)e 支持,如果未使用 openssl、librtmp 或 gmp则默认为否
--enable-gmp 启用 gmp,需要 rtmp(t)e 支持,如果未使用 openssl 或 librtmp则默认为否
--enable-gnutls 启用 gnutls,需要 https 支持,如果未使用 openssl、libtls 或 mbedtls则默认为否
--disable-iconv 禁用 iconv [自动检测]
--enable-jni 启用 JNI 支持,默认为否
--enable-ladspa 启用 LADSPA 音频过滤,默认为否
--enable-libaom 通过 libaom 启用 AV1 视频编码/解码,默认为否
--enable-libaribb24 通过 libaribb24 启用 ARIB 文本和字幕解码,默认为否
--enable-libass 启用 libass 字幕渲染,需要字幕,默认为否
--enable-libbluray 使用 libbluray 启用蓝光阅读,默认为否
--enable-libbs2b 启用 bs2b DSP 库,默认为否
--enable-libcaca 使用 libcaca 启用文本显示,默认为否
--enable-libcelt 通过 libcelt 启用 CELT 解码,默认为否
--enable-libcdio 启用使用 libcdio 抓取音频 CD,默认为否
--enable-libcodec2 使用 libcodec2 启用 codec2 编码/解码,默认为否
--enable-libdav1d 通过 libdav1d 启用 AV1 解码,默认为否
--enable-libdavs2 通过 libdavs2 启用 AVS2 解码,默认为否
--enable-libdc1394 使用 libdc1394和libraw1394启用IIDC-1394 抓取
--enable-libfdk-aac 通过 libfdk-aac 启用 AAC 解码/编码,默认为否
--enable-libflite 通过 libflite 启用 flite(语音合成)支持,默认为否
--enable-libfontconfig 启用 libfontconfig,对 drawtext 过滤器有用,默认为否
--enable-libfreetype 启用 libfreetype,drawtext 过滤器需要,默认为否
--enable-libfribidi 启用 libfribidi,改进 drawtext 过滤器,默认为否
--enable-libglslang 启用 GLSL->SPIRV 编译通过 libglslang,默认为否
--enable-libgme 通过 libgme 启用游戏音乐 Emu,默认为否
--enable-libgsm 通过 libgsm 启用 GSM 解码/编码,默认为否
--enable-libiec61883 通过 libiec61883 启用 iec61883,默认为否
--enable-libilbc 通过 libilbc 启用 iLBC 解码/编码,默认为否
--enable-libjack 启用 JACK 音频声音服务器,默认为否
--enable-libklvanc 启用内核实验室 VANC 处理,默认为否
--enable-libkvazaar 通过 libkvazaar 启用 HEVC 编码,默认为否
--enable-liblensfun 启用 lensfun 镜头校正,默认为否
--enable-libmodplug 通过 libmodplug 启用 ModPlug,默认为否
--enable-libmp3lame 通过 libmp3lame 启用 MP3 编码,默认为否
--enable-libopencore-amrnb 通过 libopencore-amrnb 启用 AMR-NB 解码/编码,默认为否
--enable-libopencore-amrwb 通过 libopencore-amrwb 启用 AMR-WB 解码,默认为否
--enable-libopencv 通过 libopencv 启用视频过滤,默认为否
--enable-libopenh264 通过 OpenH264 启用 H.264 编码,默认为否
--enable-libopenjpeg 通过 OpenJPEG 启用 JPEG 2000 解码/编码,默认为否
--enable-libopenmpt 启用通过 libopenmpt 解码跟踪的文件,默认为否
--enable-libopenvino 启用 OpenVINO 作为 DNN 模块后端,默认为否
--enable-libopus 通过 libopus 启用 Opus 解码/编码,默认为否
--enable-libpulse 通过 libpulse 启用 Pulseaudio 输入,默认为否
--enable-librabbitmq 启用 RabbitMQ 库,默认为否
--enable-librav1e 通过 rav1e 启用 AV1 编码,默认为否
--enable-librist 通过 librist 启用 RIST,默认为否
--enable-librsvg 通过 librsvg 启用 SVG 光栅化,默认为否
--enable-librubberband 启用橡皮筋过滤器所需的橡皮筋,默认为否
--enable-librtmp 通过 librtmp 启用 RTMP[E] 支持,默认为否
--enable-libshine 通过 libshine 启用定点 MP3 编码,默认为否
--enable-libsmbclient 通过 libsmbclient 启用 Samba 协议,默认为否
--enable-libsnappy 启用 Snappy 压缩,需要 hap 编码,默认为否
--enable-libsoxr 启用libsoxr 重采样,默认为否
--enable-libspeex 通过 libspeex 启用 Speex 解码/编码,默认为否
--enable-libsrt 通过 libsrt 启用 Haivision SRT 协议,默认为否
--enable-libssh 通过 libssh 启用 SFTP 协议,默认为否
--enable-libsvtav1 通过 SVT 启用 AV1 编码,默认为否
--enable-libtensorflow 启用TensorFlow作为基于DNN的过滤器的DNN模块后端,默认为否
--enable-libtesseract 启用 Tesseract,ocr 过滤器需要,默认为否
--enable-libtheora 通过 libtheora 启用 Theora 编码,默认为否
--enable-libtls 如果未使用openssl、gnutls或mbedtls,则启用https支持所需的LibreSSL,默认为否
--enable-libtwolame 通过 libttwolame 启用 MP2 编码,默认为否
--enable-libuavs3d 通过 libuavs3d 启用 AVS3 解码,默认为否
--enable-libv4l2 启用 libv4l2/v4l-utils,默认为否
--enable-libvidstab 使用 vid.stab 启用视频稳定,默认为否
--enable-libvmaf 通过 libvmaf 启用 vmaf 过滤器,默认为否
--enable-libvo-amrwbenc 通过 libvo-amrwbenc 启用 AMR-WB 编码,默认为否
--enable-libvorbis 通过 libvorbis 启用 Vorbis 编码/解码,默认为否
--enable-libvpx 通过 libvpx 启用 VP8 和 VP9 解码/编码,默认为否
--enable-libwebp 通过 libwebp 启用 WebP 编码,默认为否
--enable-libx264 通过 x264 启用 H.264 编码,默认为否
--enable-libx265 通过 x265 启用 HEVC 编码,默认为否
--enable-libxavs 通过 xavs 启用 AVS 编码,默认为否
--enable-libxavs2 通过 xavs2 启用 AVS2 编码,默认为否
--enable-libxcb 使用 XCB 启用 X11 抓取 [自动检测]
--enable-libxcb-shm 启用 X11 抓取 shm 通信 [自动检测]
--enable-libxcb-xfixes 启用 X11 抓取鼠标渲染 [自动检测]
--enable-libxcb-shape 启用 X11 抓取形状渲染 [自动检测]
--enable-libxvid 通过 xvidcore 启用 Xvid 编码,存在原生 MPEG-4/Xvid 编码器,默认为否
--enable-libxml2 使用 C 库 libxml2 启用 XML 解析,默认为否
--enable-libzimg 启用 z.lib,zscale 过滤器需要,默认为否
--enable-libzmq 启用通过 libzmq 传递消息,默认为否
--enable-libzvbi 通过 libzvbi 启用图文电视支持,默认为否
--enable-lv2 启用 LV2 音频过滤,默认为否
--disable-lzma 禁用 lzma [自动检测]
--enable-decklink 启用 Blackmagic DeckLink I/O 支持,默认为否
--enable-mbedtls 如果未使用openssl、gnutls或libtls,则启用https支持所需的mbedTLS,默认为否
--enable-mediacodec 启用 Android MediaCodec 支持,默认为否
--enable-mediafoundation 通过 MediaFoundation 启用编码
--enable-libmysofa 启用 libmysofa,需要 soflizer 过滤器,默认为否
--enable-openal 启用 OpenAL 1.1 捕获支持,默认为否
--enable-opencl 启用 OpenCL 处理,默认为否
--enable-opengl 启用 OpenGL 渲染,默认为否
--enable-openssl 如果未使用gnutls、libtls 或 mbedtls,则启用https支持所需的openssl,默认为否
--enable-pocketsphinx 启用 PocketSphinx,asr 过滤器需要,默认为否
--disable-sndio 禁用 sndio 支持 [自动检测]
--disable-schannel 禁用 SChannel SSP,需要 TLS 支持[自动检测]
--disable-sdl2 禁用 sdl2 [自动检测]
--disable-securetransport 禁用安全传输,需要 TLS 支持
--enable-vapoursynth 启用 VapourSynth 解复用器,默认为否
--enable-vulkan 启用 Vulkan 代码,默认为否
--disable-xlib 禁用 xlib [自动检测]
--disable-zlib 禁用 zlib [自动检测]以下库提供各种硬件加速功能:--disable-amf 禁用 AMF 视频编码代码 [自动检测]
--disable-audiotoolbox 禁用 Apple AudioToolbox 代码 [自动检测]
--enable-cuda-nvcc 启用 Nvidia CUDA 编译器,默认为否
--disable-cuda-llvm 使用 clang, 禁用 CUDA 编译[自动检测]
--disable-cuvid 禁用 Nvidia CUVID 支持 [自动检测]
--disable-d3d11va 禁用 Microsoft Direct3D 11 视频加速代码 [自动检测]
--disable-dxva2 禁用 Microsoft DirectX 9 视频加速代码 [自动检测]
--disable-ffnvcodec 禁用动态链接的 Nvidia 代码 [自动检测]
--enable-libdrm 启用 DRM 代码 (Linux),默认为否
--enable-libmfx 通过 libmfx 启用英特尔 MediaSDK(AKA 快速同步视频)代码,默认为否
--enable-libnpp 启用基于 Nvidia Performance Primitives 的代码,默认为否
--enable-mmal 通过 MMAL 启用 Broadcom 多媒体抽象层 (Raspberry Pi) ,默认为否
--disable-nvdec 禁用 Nvidia 视频解码加速(通过 hwaccel)[自动检测]
--disable-nvenc 禁用 Nvidia 视频编码代码 [自动检测]
--enable-omx 启用 OpenMAX IL 代码,默认为否
--enable-omx-rpi 为 Raspberry Pi 启用 OpenMAX IL 代码 ,默认为否
--enable-rkmpp 启用瑞芯微媒体处理平台代码 ,默认为否
--disable-v4l2-m2m 禁用 V4L2 mem2mem 代码 [自动检测]
--disable-vaapi 禁用视频加速 API(主要是 Unix/Intel)代码 [自动检测]
--disable-vdpau 禁用适用于 Unix 代码的 Nvidia Video Decode 和 Presentation API [自动检测]
--disable-videotoolbox 禁用 VideoToolbox 代码 [自动检测]
【10】Toolchain options 工具链选项
--arch=ARCH 选择架构
--cpu=CPU 选择所需的最小CPU(影响指令选择,可能会在较旧的 CPU 上崩溃)
--cross-prefix=PREFIX 编译工具使用 PREFIX
--progs-suffix=SUFFIX 程序名后缀
--enable-cross-compile 使能交叉编译器
--sysroot=PATH 交叉构建树的根
--sysinclude=PATH 交叉构建系统头文件的位置
--target-os=OS 编译器目标 OS
--target-exec=CMD 目标上运行可执行文件的命令
--target-path=DIR 在目标上查看构建目录的路径
--target-samples=DIR 目标样本目录的路径
--tempprefix=PATH 强制固定目录/前缀而不是 mktemp 进行检查
--toolchain=NAME 根据 NAME 设置工具默认值
--nm=NM 使用 nm 工具 NM [nm -g]
--ar=AR 使用存档工具 AR [ar]
--as=AS 使用汇编器 AS
--ln_s=LN_S 使用符号链接工具 LN_S [ln -s -f]
--strip=STRIP 使用剥离工具STRIP [strip]
--windres=WINDRES 使用windows资源编译器WINDRES [windres]
--x86asmexe=EXE 使用 nasm 兼容的汇编程序 EXE [nasm]
--cc=CC 使用 C 编译器 CC [gcc]
--cxx=CXX 使用 C 编译器 CXX [g++]
--objcc=OCC 使用 ObjC 编译器 OCC [gcc]
--dep-cc=DEPCC 使用依赖生成器 DEPCC [gcc]
--nvcc=NVCC 使用 Nvidia CUDA 编译器 NVCC 或 clang
--ld=LD 使用链接器 LD
--pkg-config=PKGCONFIG 使用 pkg-config 工具 PKGCONFIG [pkg-config]
--pkg-config-flags=FLAGS 将附加标志传递给 pkgconf
--ranlib=RANLIB 使用ranlib RANLIB
--doxygen=DOXYGEN 使用 DOXYGEN 生成 API doc [doxygen]
--host-cc=HOSTCC 使用主机 C 编译器 HOSTCC
--host-cflags=HCFLAGS 在为主机编译时使用 HCFLAGS
--host-cppflags=HCPPFLAGS 在为主机编译时使用 HCPPFLAGS
--host-ld=HOSTLD 使用主机链接器 HOSTLD
--host-ldflags=HLDFLAGS 链接主机时使用 HLDFLAGS
--host-extralibs=HLIBS 链接主机时使用库 HLIBS
--host-os=OS 编译器主机操作系统
--extra-cflags=ECFLAGS 将 ECFLAGS 添加到 CFLAGS
--extra-cxxflags=ECFLAGS 将 ECFLAGS 添加到 CXXFLAGS
--extra-objcflags=FLAGS 将 FLAGS 添加到 OBJCFLAGS
--extra-ldflags=ELDFLAGS 将 ELDFLAGS 添加到 LDFLAGS
--extra-ldexeflags=ELDFLAGS 将 ELDFLAGS 添加到 LDEXEFLAGS
--extra-ldsoflags=ELDFLAGS 将 ELDFLAGS 添加到 LDSOFLAGS
--extra-libs=ELIBS 添加 ELIBS
--extra-version=STRING 版本字符串后缀
--optflags=OPTFLAGS 覆盖优化相关的编译器标志
--nvccflags=NVCCFLAGS 覆盖 nvcc 标志
--build-suffix=SUFFIX 库名后缀
--enable-pic 构建与位置无关的代码
--enable-thumb 编译 Thumb 指令集
--enable-l 使用链接时优化
--env=“ENV=override” 覆盖环境变量
【11】Advanced options 高级选项
--malloc-prefix=PREFIX 前缀 malloc 和带有 PREFIX 的相关名称
--custom-allocator=NAME 使用支持的自定义分配器
--disable-symver 禁用符号版本控制
--enable-hardcoded-tables 使用硬编码表而不是运行时生成
--disable-safe-bitstream-reader 在位读取器中禁用缓冲区边界检查(更快,但可能会崩溃)
--sws-max-filter-size=N swscale 使用的最大过滤器大小 ,默认为256
【12】Optimization options 优化选项
--disable-asm 禁用所有程序集优化
--disable-altivec 禁用 AltiVec 优化
--disable-vsx 禁用 VSX 优化
--disable-power8 禁用 POWER8 优化
--disable-amd3dnow 禁用 3DNow!优化
--disable-amd3dnowext 禁用 3DNow!扩展优化
--disable-mmx 禁用 MMX 优化
--disable-mmxext 禁用 MMXEXT 优化
--disable-sse 禁用 SSE 优化
--disable-sse2 禁用 SSE2 优化
--disable-sse3 禁用 SSE3 优化
--disable-ssse3 禁用 SSSE3 优化
--disable-sse4 禁用 SSE4 优化
--disable-sse42 禁用 SSE4.2 优化
--disable-avx 禁用 AVX 优化
--disable-xop 禁用 XOP 优化
--disable-fma3 禁用 FMA3 优化
--disable-fma4 禁用 FMA4 优化
--disable-avx2 禁用 AVX2 优化
--disable-avx512 禁用 AVX-512 优化
--disable-aesni 禁用 AESNI 优化
--disable-armv5te 禁用 armv5te 优化
--disable-armv6 禁用 armv6 优化
--disable-armv6t2 禁用 armv6t2 优化
--disable-vfp 禁用 VFP 优化
--disable-neon 禁用 NEON 优化
--disable-inline-asm 禁用内联汇编
--disable-x86asm 禁用独立 x86 程序集
--disable-mipsdsp 禁用 MIPS DSP ASE R1 优化
--disable-mipsdspr2 禁用 MIPS DSP ASE R2 优化
--disable-msa 禁用 MSA 优化
--disable-msa2 禁用 MSA2 优化
--disable-mipsfpu 禁用浮点 MIPS 优化
--disable-mmi 禁用龙芯 SIMD 优化
--disable-fast-unaligned 考虑未对齐访问缓慢
【13】开发人员选项
--disable-debug 禁用调试符号
--enable-debug=LEVEL 设置调试级别
--disable-optimizations 禁用编译器优化
--enable-extra-warnings 启用更多编译器警告
--disable-stripping 禁用剥离可执行文件和共享库
--assert-level=level 0(默认),1或2,断言测试的数量,2 会导致运行时变慢
--enable-memory-poisoning 用任意数据填充堆未初始化的分配空间
--valgrind=VALGRIND 通过 valgrind 运行“make fate”测试以检测内存泄漏和错误,使用指定的 valgrind 二进制文件。不能与 --target-exec 结合使用
--enable-ftrapv 陷阱算术溢出
--samples=FATE 测试样本的路径位置
--enable-neon-clobber-test 检查 NEON 寄存器的破坏(应该是仅用于调试目的)
--enable-xmm-clobber-test 检查 XMM 寄存器的破坏(仅限 Win64;应仅用于调试目的)
--enable-random 随机启用/禁用组件
--enable-random=LIST 随机启用/禁用特定组件,LIST 是一个逗号分隔的列表 NAME[:PROB] 条目,其中 NAME 是一个组件(group) 和 PROB 相关的概率 名称(默认 0.5)。
--random-seed=VALUE --enable/disable-random 的种子值
--disable-valgrind-backtrace 在 Valgrind 下不打印回溯(仅适用于 --disable-optimizations 构建)
--enable-ossfuzz 启用构建模糊器工具
--libfuzzer=PATH libfuzzer 的路径
--ignore-tests=TESTS 被忽略的测试
--enable-linux-perf 启用 Linux 性能监视器 API
--disable-large-tests 禁用使用大量内存的测试
4、ffmpeg shell脚本
#!/bin/bashNDK_ROOT=/home/zhouyunchong/Android/Sdk/ndk/17.2.4988734
CPU=arm-linux-androideabi
TOOLCHAIN=$NDK_ROOT/toolchains/$CPU-4.9/prebuilt/linux-x86_64
# 打开一个NDK项目,找到build.ninja文件,可以找到FLAGS
# FLAGS="-g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -mstackrealign -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -std=c++11 -fno-limit-debug-info -fPIC"
FLAGS="-isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -O0 -fPIC"
INCLUDES=" -isystem $NDK_ROOT/sources/android/support/include"
PREFIX=./android/armeabi-v7a# 执行 configure 生成Makefile
# prefix 安装路径默认为/usr/local
# --enable-small 优化大小
# --disable-programs 不构建可执行文件
# --disable-avdevice 禁用 libavdevice 构建
# --disable-encoders 禁用所有编码器
# --disable-muxers 禁用所有混合器
# --disable-filters 禁用所有过滤器
# --enable-cross-compile 开启交叉编译器
# --cross-prefix 指定交叉编译的编译链
# --disable-shared 关闭动态库
# --enable-static 开启静态库
# -isystem 编译时查找头文件的路径
# --sysroot 指定头文件和库文件目录
# --extra-cflags 将 ECFLAGS 添加到 CFLAGS(传给gcc编译器的参数)
# --arch 选择架构
# --target-os 编译器目标 OS android、linux
# --disable-x86asm 生成编译相关的配置
./configure --disable-x86asm
./configure \
prefix=$PREFIX \
--enable-small \
--disable-programs \
--disable-avdevice \
--disable-encoders \
--disable-muxers \
--disable-filters \
--enable-cross-compile \
--cross-prefix=$TOOLCHAIN/bin/$CPU- \
--disable-shared \
--enable-static \
--sysroot=$NDK_ROOT/platforms/android-21/arch-arm \
--extra-cflags="$FLAGS $INCLUDES" \
--extra-cflags="-isysroot $NDK_ROOT/sysroot/" \
--arch=arm \
--target-os=android \make cleanmake install
以上脚本只能生成在Android端使用的静态库。
当然,修改下指定参数可以生成动态库或者可执行文件。
以上脚本的环境和条件:
【1】linux(ubuntu)系统
【2】ffmpeg版本:最新的release版本即可(当前最高版本是FFmpeg 5.1.2 "Riemann"),官网:http://ffmpeg.org/
【3】NDK版本,需要 < 19,19及19以上的版本已经去除了gcc和g++,所以不适用以上脚本
【4】脚本需要额外添加 ./configure --disable-x86asm
【5】prefix 前面不能添加 --
【6】当前ffmpeg支持clang编译,需要在configure中将cc_default="clang"
改成cc_default="gcc"
5、将编译出来的静态库在cmake项目中使用
新建一个cmake项目
MainActivity.java
class MainActivity : AppCompatActivity() {private lateinit var binding: ActivityMainBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding = ActivityMainBinding.inflate(layoutInflater)setContentView(binding.root)// Example of a call to a native methodbinding.sampleText.text = stringFromJNI()}/*** A native method that is implemented by the 'myplayer' native library,* which is packaged with this application.*/private external fun stringFromJNI(): Stringcompanion object {// Used to load the 'myplayer' library on application startup.init {System.loadLibrary("myplayer")}}
}
native-lib.cpp
#include <jni.h>
#include <string>extern "C"{
#include <libavcodec/avcodec.h>
}extern "C" JNIEXPORT jstring JNICALL
Java_com_android_myplayer_MainActivity_stringFromJNI(JNIEnv* env,jobject /* this */) {std::string hello = "Hello from C++";return env->NewStringUTF(av_version_info());
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.18.1)add_library(myplayerSHAREDnative-lib.cpp)include_directories("ffmpeg-include")set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}")
message("${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}")target_link_libraries(myplayeravcodecavfilteravformatavutilswresampleswscalelog)
build.gradle部分配置:
android {compileSdk 32defaultConfig {applicationId "com.android.xxxx"minSdk 21targetSdk 32versionCode 1versionName "1.0"externalNativeBuild {cmake {cppFlags ""abiFilters 'armeabi-v7a'}}ndk { // "armeabi-v7a", "arm64-v8a"abiFilters 'armeabi-v7a'}}externalNativeBuild {cmake {path file('src/main/cpp/CMakeLists.txt')version '3.18.1'}}}
将ffmpeg交叉编译出来的头文件和静态库放入项目中:
相关文章:

FFmpeg<第一篇>:环境配置
1、官网地址 http://ffmpeg.org/download.html2、linux下载ffmpeg 下载: wget https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2解压: tar xvf ffmpeg-snapshot.tar.bz23、FFmpeg ./configure编译参数汇总 解压 ffmpeg-snapshot.tar.bz2 之后&…...

深度学习:Sigmoid函数与Sigmoid层区别
深度学习:Sigmoid函数与Sigmoid层 1. Sigmoid神经网络层 vs. Sigmoid激活函数 在深度学习和神经网络中,“Sigmoid” 是一个常见的术语,通常用来表示两个相关但不同的概念:Sigmoid激活函数和Sigmoid神经网络层。这两者在神经网络…...
❤ Ant Design Vue 2.28的使用
❤ Ant Design Vue 2.28 弹窗 //按钮 <a-button type"primary" click"showModal">Open Modal</a-button>//窗口 <a-modal v-model:visible"visible" title"Basic Modal" ok"handleOk"><p>Some con…...
R语言02-R语言中的向量
概念 在R语言中,向量(Vector)是最基本的数据结构之一,用于存储相同类型的多个元素。向量可以包含数值、字符、逻辑值等,但其中的所有元素必须具有相同的数据类型。向量可以通过c()函数创建,也可以通过其他…...
windows linux 都可执行的脚本 bat, shell 共存
核心, 执行一行解析一行 windows:执行的地方进行解析, 可以任意跳转执行; bash从上往下解析执行; 一行行解析发现语法错误; 差异: windows可以部分不解析; linux需要从上往下解析合法; 总结:linux, windows可以一上一下共存 # linux code# windows code 关键: 脚本解析的差…...

MATLAB图论合集(二)计算最小生成树
今天来介绍第二部分,图论中非常重要的知识点——最小生成树。作为数据结构的理论知识,Prim算法和克鲁斯卡尔算法的思想此处博主不详细介绍,建议在阅读本帖前熟练掌握。 对于无向带权图,在MATLAB中可以直接以邻接矩阵的方式创建出来…...

unity 模型显示在UI上 并交互(点击、旋转、缩放)
项目工程:unity模型显示在UI上并交互(点击、旋转、缩放)资源-CSDN文库 1.在Assets创建 Render Texture(下面会用到),根据需要设置Size 2.创建UIRawImage,并把Render Texture赋上 3.创建相机&am…...

html实现页面切换、顶部标签栏(可删、可切换,点击左侧超链接出现标签栏)
一、在一个页面(不跨页面) 效果: 代码 <!DOCTYPE html> <html><head><style>/* 设置标签页外层容器样式 */.tab-container {width: 100%;background-color: #f1f1f1;overflow: hidden;}/* 设置标签页选项卡的样式…...

n-皇后问题(DFS)
n−皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n,请你输出所有的满足条件的棋子摆法。 输入格式 共一行,包含整数 n。 输出…...

漏洞利用和权限提升
使用Kali Linux进行漏洞利用和权限提升是渗透测试过程中的一部分,用于评估系统的安全性。 漏洞利用: 选择目标: 首先,确定 要进行漏洞利用的目标系统。这可能是一个具有已知漏洞的应用程序、服务或操作系统。 收集信息ÿ…...

开源网安受邀参加软件供应链安全沙龙,推动企业提升安全治理能力
8月23日下午,合肥软件行业软件供应链安全沙龙在中安创谷科技园举办。此次沙龙由合肥软件产业公共服务中心联合中安创谷科技园公司共同主办,开源网安软件供应链安全专家王晓龙、尹杰受邀参会并带来软件供应链安全方面的精彩内容分享,共同探讨…...

回归分析扫盲:为什么非线性模型不能直接用最优子集选择法
最近有人给我发了篇文章: 一个问题有一堆变量,我们要选取哪些变量来建模呢?我们来看看这篇文章是怎么做的: 这个方法简单来说就是:对于这一堆变量,我们每次尝试剔除其中一个变量,然后用剩下的变…...
单例模式简介
概念: 单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供全局访问点。单例模式的核心思想是限制某个类只能创建一个对象实例,并提供对该实例的全局访问。这样可以避免多个…...

WPF自定义命令及属性改变处理
1、项目建构 2、自定义命令 namespace WpfDemo.Base {public class MyCommand : ICommand{Action executeAction;public MyCommand(Action action){executeAction action;}public event EventHandler? CanExecuteChanged;public bool CanExecute(object? parameter){retu…...
macbook m1 docker中使用go
已经有一个centos8的镜像,本来打算在centos8中安装go 安装方法: # 1.下载go的安装包 mkdir install && cd install # 任意创建个文件夹 wget https://go.dev/dl/go1.20.2.linux-amd64.tar.gz# 2. 解压 tar -C xzf go1.20.2.linux-amd64.tar.g…...

【Hello Network】DNS协议 NAT技术 代理服务器
本篇博客简介:介绍DNS协议 NAT技术和代理服务器 网络各协议补充 DNSDNS背景DNS介绍DNS总结域名简介 NAT技术NAT技术背景NAT IP转换过程NAPTNAT技术缺陷NAT和代理服务器 网络协议总结应用层传输层网络层数据链路层 DNS DNS是一整套从域名映射到IP的系统 DNS背景 为…...

Android 使用模拟器模拟Linux操作系统
1. 简介 在Android手机上使用模拟器模拟ubuntu等操作系统,便于测试 2. 软件准备 Termux:是一款 Android 终端模拟器和 Linux 环境应用程序,无需 root 或设置即可直接运行。虽然酷安和谷歌菜市场都能下载,但这些渠道都很久没更新…...

机器学习基础之《分类算法(5)—朴素贝叶斯算法原理》
一、朴素贝叶斯算法 1、什么是朴素贝叶斯分类方法 之前用KNN算法,分类完直接有个结果,但是朴素贝叶斯分完之后会出现一些概率值,比如: 这六个类别,它都有一定的可能性 再比如,对文章进行分类:…...
# Go学习-Day6
文章目录 Go学习-Day6封装继承接口 Go学习-Day6 个人博客:CSDN博客 封装 类似java的类的封装,这里我们利用大小写和工厂模式来实现封装的功能略过 继承 相似的类具有相似的方法,反复绑定相同的方法,代码冗余,所以引…...

分布式 - 服务器Nginx:一小时入门系列之 HTTPS协议配置
文章目录 1. HTTPS 协议2. 生成 SSL 证书和私钥文件3. 配置 SSL 证书和私钥文件4. HTTPS 协议优化 1. HTTPS 协议 HTTPS 是一种通过计算机网络进行安全通信的协议。它是HTTP的安全版本,通过使用 SSL 或 TLS 协议来加密和保护数据传输。HTTPS的主要目的是确保在客户…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...

DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
CppCon 2015 学习:Time Programming Fundamentals
Civil Time 公历时间 特点: 共 6 个字段: Year(年)Month(月)Day(日)Hour(小时)Minute(分钟)Second(秒) 表示…...
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...