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的主要目的是确保在客户…...
探秘Linux系统性能监控神器!Linux和Python技术持续学习者必看!
引言 作为Linux运维工程师,我们经常需要对服务器的性能进行监控和调优。而Python作为一门强大的脚本语言,可以帮助我们轻松实现各种系统性能监控任务。本文将介绍几个实用的Python库和工具,帮助我们监控Linux系统的CPU、内存、磁盘和网络等性…...
文心一言续写太监小说《名侦探世界的巫师》
《名侦探世界的巫师》是我的童年回忆,总是想着续写一下,但是又没有时间和文笔,文心一言出了,由于目前大模型貌似可以联网,可以尝试搞一波~ 目录 文章1【前六个故事还能看,后面就是在重复】故事2【辣眼睛】…...
Solidity 合约安全,常见漏洞(第三篇)
Solidity 合约安全,常见漏洞(第三篇) ERC20 代币问题 如果你只处理受信任的 ERC20 代币,这些问题大多不适用。然而,当与任意的或部分不受信任的 ERC20 代币交互时,就有一些需要注意的地方。 ERC20&#…...
Linux安装Redis数据库,无需公网IP实现远程连接
文章目录 1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 保留一个固定tcp地址4.2 配置固定TCP地址4.3 使用固定的tcp地址连接 Redis作为一款高速缓存的key value键值对的数据库,在…...
智慧政务,长远布局——AIGC引领,加速推进数字化政府建设
在人工智能、虚拟现实等领域迅猛发展且日益成熟的背景下,AI行业正迈向蓬勃发展的全新阶段,市场规模持续扩张。与此同时,数字服务也正在蓬勃兴起,新一代信息技术为数字政府构建了坚实支撑,重塑了政务信息化管理、业务架…...
中央处理器(CPU):组成、指令周期、数据通路、控制方式、控制器、指令流水线,补充(多处理器系统、硬件多线程)
中央处理器(CPU,Central Processing Unit),计算机控制和运算的核心,是信息处理和程序运行的执行单元。 CPU主要功能:处理指令、执行操作、控制时间、处理中断、处理数据。 其中,处理指令、执行…...
开源微服务如何选型?Spring Cloud、Dubbo、gRPC、Istio 详细对比
作者:刘军 不论您是一名开发者、架构师、CTO, 如果您曾深度参与在微服务开发中,那么相信您一定有过开源微服务框架或体系选型的疑问:Apache Dubbo、Spring Cloud、gRPC 以及 Service Mesh 体系产品如 Istio,到底应该选…...
Nginx的HTTPS部署与安全性能优化
Nginx作为一款高性能的Web服务器和反向代理服务器,被广泛用于应用部署和负载均衡。在安全环保意识的逐渐提高下,HTTPS也成为现代Web应用中必不可少的一环。本篇文章将重点介绍Nginx的HTTPS部署和安全性能优化。 一、Nginx的HTTPS部署 证书申请 首先需要去…...
5.8. Trusted Board Boot
5.8. Trusted Board Boot启动 Trusted Board Boot(TBB) 功能通过验证所有固件镜像(包括正常世界引导加载程序)来防止恶意固件在平台上运行。它通过使用公钥加密标准 (PKCS) 建立信任链来实现这一点。 本文介绍了可信固件-A (TF-A) TBB 的设计,它是Trusted Board Boot(TBBR…...
微信小程序——van-field中的left-icon属性自定义
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
第一次做愛有网站吗/优化教程网
故障前提ElasticSearch 版本:5.2集群节点数:5索引主分片数:5索引分片副本数:1线上环境ES存储的数据量很大,当天由于存储故障,导致一时间 5个节点的 ES 集群,同时有两个节点离线,一个…...
wordpress 多产品主图/连云港百度推广总代理
使用 MySQL自带命令 mysqldumpslow 查看 OPTIONS -s ORDER ORDER, 主要有 c, t, l, r 和 ac, at, al, ar, 分别是按照 query次数, 时间, lock的时间和返回的记录数来排序, 前面加了a时倒序.-t NUM top NUM, 即为返回前面多少条的数据.-g PATTERN grep: 后边可以写一个正则匹配模…...
网站开发站点的文件夹/网络营销的方法有哪些?
如何选择合适的图表类型和使用场景 以QUICK BI 来介绍常见基本图形以及应用场景...
广宁城乡建设网站/代码编程教学入门
点击上方“AI派”,选择“设为星标”最新分享,第一时间送达!作者:郑明卓,Python研发工程师,在Python开发与爬虫方面涉猎较广,拥抱新技术。目前负责应用技术调研与开发维护。Now is better than n…...
西安企业网站建设哪家好/可以下载新闻视频的网站
题目 给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。 例如, 给定二叉搜索树: 4/ \2 7/ \ 1 3和值: 2 你应该返回如下子树: 2 …...
企企网官网/seo排名怎么做
原博文 2019-07-18 16:19 − 符号 描述 运算规则 ...013780 相关推荐 2019-09-28 21:13 − Python python是一种跨平台的计算机程序设计语言,是一种面向对象的动态类型语言。 最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加…...