FFMEPG-詳解使用IOS版

1.FFmepg編譯環(huán)境及結(jié)構(gòu)

下載FFmepg

FFmpeg配置選項(xiàng)介紹

下載gas-preprocessor.pl及安裝

編寫(xiě)腳本代碼(執(zhí)行源碼)

執(zhí)行腳本結(jié)果一覽

編譯中出現(xiàn)的問(wèn)題

個(gè)人總結(jié)

2.下載FFmepg

首先呢,我們先下載音視頻框架

這里提供兩種下載方法:

一:官網(wǎng)下載(https://ffmpeg.org)

FFmpeg下載.png

二:執(zhí)行下面的FFmpeg-down(shell腳本文件)(可以到我的github下載)

ffmpeg-down.png

執(zhí)行結(jié)果:在終端執(zhí)行文件ffmpeg-down文件,就可以進(jìn)行下載FFmpeg,下圖正在下載...

ffmpeg_down_結(jié)果.png

注意:把下載后的解壓包放在與shell腳本同一目錄下

3.查看FFmpeg配置選項(xiàng)介紹

首先呢,我們進(jìn)入下載好的FFmpeg框架包中,打開(kāi)終端,cd到目錄下,執(zhí)行如下命令,就可以配置選項(xiàng)的組成

./configure --help

選項(xiàng)(options)介紹:

Help options:FFmpeg幫助選項(xiàng)(幫助文檔)

help options.png

--help 幫組信息(打印此消息)

--quiet? 抑制顯示信息輸出

--list-decoders? 顯示所有可用的解碼器

--list-encoders? 顯示所有可用的編碼器

--list-hwaccesl? 顯示所有可用的硬件加速器

--list-muxers 顯示所有可用的視音頻復(fù)用器

視音頻復(fù)用器(Muxer)即是將視頻壓縮數(shù)據(jù)(例如H.264)和音頻壓縮數(shù)據(jù)(例如AAC)合并到一個(gè)封裝格式數(shù)據(jù)(例如MKV)中去。如圖所示。在這個(gè)過(guò)程中并不涉及到編碼和解碼众眨。

視音頻復(fù)用器(Muxer).jpeg

--list-demuxers? 顯示所有可用的視音頻分離器

--list-parsers 顯示所有可用的解析器

--list-protocols? 顯示所有可用的協(xié)議

--list-bsfs? 顯示所有可用的比特流過(guò)濾

--list-indevs 顯示所有可用的輸入設(shè)備

--list-outdevs 顯示所有可用的輸出設(shè)備

--list-filters 顯示所有可用的過(guò)濾器

Standard options:標(biāo)準(zhǔn)選項(xiàng)

stanard options.png

--logfile=FILE? 記錄測(cè)試并輸出到ffbuild/config.log文件

--disable-logging 沒(méi)有日志配置調(diào)試信息

--fatal-warnigns? 致命的警告,配置警告生成

--prefix=PREFIX? 前綴默認(rèn)[/usr/local]

--bindir=DIR? 二進(jìn)制文件默認(rèn)[PREFIX/bin]

--datadir=DIR 數(shù)據(jù)文件默認(rèn)[PREFIX/share/ffmpeg]

--docdir=DIR? doc文檔默認(rèn)[PREFIX/share/doc/ffmpeg]

--libdir=DIR? 安裝庫(kù)到指定目錄[PREFIX/lib]

--shlibdir=DIR 指定共享庫(kù)路徑[LIBDIR]

--incdir=DIR 指定includes路徑[PREFIX/include]

--mandir=DIR 指定安裝手冊(cè)路徑[PREFIX/share/man]

--pkgconfigdir=DIR 指定配置文件路徑[LIBDIR/pkgconfig]

Licensing options:許可選項(xiàng)(侵權(quán))

licensing options.png

--enable-gpl? 允許使用GPL(默認(rèn)關(guān)閉)

--enable-version3? gpl升級(jí)到版本3(默認(rèn)關(guān)閉)

--enable-nonfree? 允許用戶使用非免費(fèi)代碼(默認(rèn)關(guān)閉)

Configuration options:配置備選選項(xiàng)

configuration options.png

--disable-static 不能編譯靜態(tài)庫(kù)(默認(rèn)關(guān)閉)

--enable-shared 編譯共享庫(kù)(默認(rèn)關(guān)閉)

--enable-small 啟用優(yōu)化文件尺寸大小(犧牲速度)

--disable-runtime-cpudetect? 在運(yùn)行時(shí)禁用cpu檢測(cè)功能

--enable-gray 灰度支持

--disable-swscale-alpha? 禁用在swscale alpha通道支持

--disable-all 禁止編譯組件,庫(kù),代碼

--disable-autodetect? 禁用自動(dòng)檢測(cè)外部庫(kù)(默認(rèn)關(guān)閉)

program options: 程序選項(xiàng)

program options.png

--disable-programs? 不能編譯命令行代碼

--disable-ffmpeg? ? ffmpeg禁止編譯

--disable-ffplay? ffplay禁止編譯

--disable-ffprobe? ffprobe禁止編譯

--disable-ffserver? ffserver禁止編譯

documentation options:文件選項(xiàng)

documentation options.png

--disable-doc 不能編譯文檔

--disable-htmlpages 不能編譯html文檔頁(yè)面

--disable-manpages 不能編譯操作手冊(cè)文檔頁(yè)面

--disable-podpages 不能編譯pod文檔頁(yè)面

--disable-txtpages 不能編譯文本文檔頁(yè)面

component options:組件選項(xiàng)

component options.png

--disable-avdevice? 禁止 libavcodec 構(gòu)造

--disable-avcodec? 禁止 libavcore 構(gòu)造

--disable-avformat? 禁止 libavformat 構(gòu)造

--disable-swresample? 禁止 libswresample 構(gòu)造

--disable-swscale 禁止libswscale構(gòu)造

--disable-postproc? 禁止libpostproc構(gòu)造

--disable-avfilter 禁止libavfilter 構(gòu)造

--enable-avresample? 開(kāi)啟libavresample構(gòu)造(默認(rèn)關(guān)閉)

--disable-pthreads? 禁用 pthreads [默認(rèn):自動(dòng)]

--disable-w32threads? 禁用 Win32 線程[默認(rèn):自動(dòng)]

--disable-os2threads? 禁用0S/2線程[默認(rèn):自動(dòng)]

--disable-network? 禁用網(wǎng)絡(luò)支持[默認(rèn):關(guān)閉]

--disable-dct? 禁用DCT代碼

--disable-dwt 禁用DWT代碼

--disable-error-resilience? 禁用錯(cuò)誤resilience 代碼

--disable-lsp? 禁用LSP代碼

--disable-lzo? 禁用LZO代碼

--disable-mdct 禁用MDCT代碼

--disable-rdft? 禁用RDFT代碼

--disable-fft 禁用FFT代碼

--disable-faan 禁用浮點(diǎn) AAN(I)DCT代碼

Individual component options:個(gè)人組件選項(xiàng)

individual component options.png

--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的硬件加速計(jì)

--enable-hwaccel=NAME 啟用NAME的硬件加速計(jì)

--disable-muxer=NAME 禁用NAME的復(fù)用器

--enable-muxer=NAME 啟用NAME的復(fù)用器

--disable-muxers 禁用所有的復(fù)用器

--disable-demuxer=NAME 禁用NAME的分離器

--enable-demuxer=NAME 啟用NAME的分離器

--disable-demuxers 禁用所有的分離器

--enable-parser=NAME 啟用NAME的解析器

--disable-parser=NAME 禁用NAME的解析器

--disable-parsers 禁用所有的解析器

--enable-bsf=NAME 啟用NAME的比特流過(guò)濾器

--disable-bsf=NAME 禁用NAME的比特流過(guò)濾器

--disable-bsfs 禁用所有的比特流過(guò)濾器

--enable-protocol=NAME 啟用NAME的協(xié)議

--disable-protocol=NAME 禁用NAME的協(xié)議

--disable-protocols 禁用所有的協(xié)議

--enable-indev=NAME 啟用NAME的輸入設(shè)備

--disable-indev=NAME 禁用NAME的輸入設(shè)備

--disable-indevs 禁用所有輸入設(shè)備

--enable-outdev=NAME 啟用NAME的輸出設(shè)備

--disable-outdev=NAME 禁用NAME的輸出設(shè)備

--disable-devices 禁用所有的輸出設(shè)備

--enable-filter=NAME 啟用NAME的過(guò)濾器

--disable-filter=NAME 禁用NAME的過(guò)濾器

--disable-filters 禁用所有的過(guò)濾器

--disable-v412_m2m 禁用V4L2 mem2mem代碼 [自動(dòng)]

External library support:外部庫(kù)支持(重點(diǎn))

externalLibrary Support_1.png

--disable-alsa? 禁止ALSA支持[自動(dòng)檢測(cè)]

--disable-appkit 禁止蘋(píng)果AppKit框架[自動(dòng)檢測(cè)]

--disable-avfoundation 禁止蘋(píng)果AVFoundation框架[自動(dòng)檢測(cè)]

--disable-avisynth? 啟用讀取AviSynth腳本文件[默認(rèn)關(guān)閉]

--disable-bzlib? 禁用 bzlib [自動(dòng)檢測(cè)]

--disable-coreimage? 禁用蘋(píng)果CoreImage框架[自動(dòng)檢測(cè)]

--enable-chromaprint? Chromaprint:可提供一個(gè)客戶端的公共庫(kù),能夠通過(guò)特定算法計(jì)算音頻文件的指紋纪铺,是AcoustID項(xiàng)目的核心。[默認(rèn)關(guān)閉]

--enable-freior? 啟用freior視頻過(guò)濾[默認(rèn)關(guān)閉]

--enable-gcrypt? 啟用gcrypt,需要rtmp(t)e支持,如果openssl,librtmp,gmp沒(méi)有被使用[默認(rèn)關(guān)閉]

--enable-gmp? 啟用gmp,需要rtmp(t)e支持,如果openssl或者librtmp沒(méi)有被使用[默認(rèn)關(guān)閉]

--enable-gnutls 啟用gnutls,需要https支持,如果opensll不能使用[默認(rèn)關(guān)閉]

--disable-iconv 禁用iconv[自動(dòng)檢測(cè)]

--disable-jack? 禁用libjack支持[自動(dòng)檢測(cè)]

--enable-jni 啟用JNI支持[默認(rèn)關(guān)閉]

--enable-ladspa 啟用LADSPA 視頻過(guò)濾[默認(rèn)關(guān)閉]

--enable-libass? 啟用libass字幕渲染,需要字幕和ass過(guò)濾[默認(rèn)關(guān)閉]

externalLibrary Support_2.png

--enable-libbluray? 啟用藍(lán)光,使用libbluray [默認(rèn)關(guān)閉]

--enable-libbs2b? 啟用bs2b DSP庫(kù)[默認(rèn)關(guān)閉]

--enable-libcaca 啟用文本顯示,使用libcaca[默認(rèn)關(guān)閉]

--enable-libcelt 啟用CELT通過(guò)解碼libcelt[默認(rèn)關(guān)閉]

--enable-libcdio 啟用視頻CD,使用libcdio[默認(rèn)關(guān)閉]

--enable-libdc1394? 啟用 IIDC-1394 ,使用libdc1394和libraw1394[默認(rèn)關(guān)閉]

--enable-libfdk-aac 啟用AAC 編碼/解碼通過(guò)libfdk-aac[默認(rèn)關(guān)閉]

--enable-libflite 啟用過(guò)濾器支持通過(guò)libflite

--enable-libfontconfig? 啟用libfontconfig,用于drawtext過(guò)濾器[默認(rèn)關(guān)閉]

--enable-libfreetype 啟用libfreetype,需要darwtext過(guò)濾器[默認(rèn)關(guān)閉]

--enable-libfribidi 啟用libfribidi ,優(yōu)化darwtext過(guò)濾器[默認(rèn)關(guān)閉]

--enable-libgme 啟用游戲音樂(lè)通過(guò)libgme[默認(rèn)關(guān)閉]

--enable-libgsm 啟用GSM 編碼/解碼 通過(guò)libgsm[默認(rèn)關(guān)閉]

--enable-libiec61883 啟用 iec61883 通過(guò)使用libiec61883[默認(rèn)關(guān)閉]

--enable-libilbc 啟用iLBC 編碼/解碼通過(guò)libilbc[默認(rèn)關(guān)閉]

--enable-libkvazaar 啟用HEVC 編碼通過(guò)使用libkvazaar[默認(rèn)關(guān)閉]

--enable-libmodplug 啟用ModPlug 通過(guò)libmodplug[默認(rèn)關(guān)閉]

--enable-libmp3lame 啟用MP3編碼通過(guò)libmp3lame[默認(rèn)關(guān)閉]

--enable-libopencore-amrnb 啟用AMR-NB 編碼/解碼通過(guò)使用libopencore-amrnb[默認(rèn)關(guān)閉]

--enable-libopencore-amrwb 啟用AMR-WB編碼通過(guò)libopencore-amrwb[默認(rèn)關(guān)閉]

--enable-libopnecv 啟用視頻過(guò)濾器通過(guò)使用libopencv[默認(rèn)關(guān)閉]

--enable-libopenh264 啟用H.264編碼通過(guò)OpenH264[默認(rèn)關(guān)閉]

--enable-libopenjpeg 啟用 JPEG 2000 編碼/解碼通過(guò)OpenJPEG[默認(rèn)關(guān)閉]

--enable-libopenmpt 啟用編碼追蹤文件通過(guò)libopenmpt[默認(rèn)關(guān)閉]

--enable-libopus 啟用Opus 編碼/解碼通過(guò)libpulse[默認(rèn)關(guān)閉]

--enable-libpulse 啟用音頻脈沖輸入通過(guò)使用libpulse[默認(rèn)關(guān)閉]

--enable-librsvg 啟用SVG 柵格化通過(guò)使用librsvg[默認(rèn)關(guān)閉]

--enable-librubberband 啟用拖框需要拖框過(guò)濾器[默認(rèn)關(guān)閉]

--enable-librtmp 啟用RTMP[E]支持通過(guò)使用librtmp[默認(rèn)關(guān)閉]

--enable-libshine 啟用固定點(diǎn)MP3編碼通過(guò)使用librsvg[默認(rèn)關(guān)閉]

--enable-libsmbclient 啟用Samba協(xié)議通過(guò)使用libsmbclient[默認(rèn)關(guān)閉]

--enable-libsnappy 啟用Snappy壓縮,需要hap編碼[默認(rèn)關(guān)閉]

--enable-libsoxr 啟用libsoxr重采樣[默認(rèn)關(guān)閉]

--enable-libspeex 啟用speex 編碼/解碼通過(guò)使用libspeex[默認(rèn)關(guān)閉]

--enable-libssh 啟用SFTP協(xié)議通過(guò)使用libspeex[默認(rèn)關(guān)閉]

--enable-libtesseract 啟用Tesseract,需要ocr過(guò)濾器[默認(rèn)關(guān)閉]

--enable-libtheora 啟用Theora編碼通過(guò)使用libtheora[默認(rèn)關(guān)閉]

--enable-libtwolame 啟用MP2編碼通過(guò)使用libtwolame[默認(rèn)關(guān)閉]

--enable-lib412 啟用libv412/v4l-utils[默認(rèn)關(guān)閉]

--enable-libvidstab 啟用基于視頻圖像穩(wěn)定,通過(guò)使用vid.stab[默認(rèn)關(guān)閉]

--enable-libvmaf 啟用vmaf過(guò)濾器通過(guò)使用libvmaf[默認(rèn)關(guān)閉]

--enable-libvo-amrwbenc 啟用AMR-WB編碼通過(guò)使用libvo-amrwbenc[默認(rèn)關(guān)閉]

--enable-libvorbis 啟用Vorbis編碼/解碼通過(guò)libvorbis,本地已經(jīng)實(shí)現(xiàn)[默認(rèn)關(guān)閉]

--enable-libvpx 啟用VP8和VP9編碼/解碼通過(guò)使用libvpx[默認(rèn)關(guān)閉]

--enable-libwavpack 啟用wavpack編碼通過(guò)使用libwavpack[默認(rèn)關(guān)閉]

--enable-libwebp 啟用WebP編碼通過(guò)使用libwebp[默認(rèn)關(guān)閉]

--enable-libx264 啟用H.264編碼通過(guò)使用x264[默認(rèn)關(guān)閉]

--enable-libx265 啟用HEVC編碼通過(guò)使用x265[默認(rèn)關(guān)閉]

--enable-libxavs 啟用AVS編碼通過(guò)使用xavs[默認(rèn)關(guān)閉]

--enable-libxcb? 啟用X11抓取XCB[自動(dòng)檢測(cè)]

--enable-libxcb-shm 啟用X11抓取shm交互[自動(dòng)檢測(cè)]

--enable-libxcb-xfixes 啟用X11抓取mouse渲染[自動(dòng)檢測(cè)]

--enable-libxcb-shape 啟用X11抓取圖像渲染[自動(dòng)檢測(cè)]

--enable-libxvid 啟用Xvid編碼通過(guò)使用xvidcore,本地MPEG-4/Xvid編碼已經(jīng)存在[默認(rèn)關(guān)閉]

externalLibrary Support_3.png

--enable-libxml2 啟用XML解析,使用C語(yǔ)言庫(kù)libxml2[默認(rèn)關(guān)閉]

--enable-libzimg 啟用z.lib 需要zscale過(guò)濾器[默認(rèn)關(guān)閉]

--enable-libzmq 啟用消息傳遞通過(guò)使用libzmq[默認(rèn)關(guān)閉]

--enable-libzvbi 啟用點(diǎn)在文本支持通過(guò)使用llibzvbi[默認(rèn)關(guān)閉]

--disable-lzma 禁用lzma[自動(dòng)檢測(cè)]

--enable-decklink? 啟用黑魔法 DeckLind I/O支持[默認(rèn)關(guān)閉]

--enable-libndi_newtek 啟用Newteck NDI I/O支持[默認(rèn)關(guān)閉]

--enable-mediacodec 啟用安卓媒體編解碼器支持[默認(rèn)關(guān)閉]

--enable-libmysofa 啟用libmysofa,需要sofalizer過(guò)濾器[默認(rèn)關(guān)閉]

--enable-openal 啟用OpenAL 1.1 捕獲支持[默認(rèn)關(guān)閉]

--enable-onencl 啟用OpenCl代碼

--enable-opengl 啟用OpenGL渲染[默認(rèn)關(guān)閉]

--enable-openssl 啟用openssl,需要https支持,如果沒(méi)有使用[默認(rèn)關(guān)閉]

--disable-sndio 禁用sndio支持[自動(dòng)檢測(cè)]

--disable-schannel 禁用 schannel SSP,需要TLS支持在Windows,如果openssl 和gnutls沒(méi)有使用[自動(dòng)檢測(cè)]

--disable-sdl2 禁用sdl2[自動(dòng)檢測(cè)]

--disable-securetransport 禁用 安全傳輸,需要TLS支持在OSX如果openssl和gnutls沒(méi)有使用[自動(dòng)檢測(cè)]

--disable-xlib 禁用xlib[自動(dòng)檢測(cè)]

--disable-zlib 禁用zlib[自動(dòng)檢測(cè)]

--disable-audiotoolbox 禁用蘋(píng)果AUdioToolbox代碼[自動(dòng)檢測(cè)]

--disable-cuda? 禁用動(dòng)態(tài)鏈接Nvidia CUDA代碼[自動(dòng)檢測(cè)]

--enable-cuda-sdk 啟用CUDA特性,需要CUDA SDK[自動(dòng)檢測(cè)]

--disable-cuvid 禁用 Nvidia CUVID 支持[自動(dòng)檢測(cè)]

--disable-d3d11va 禁用Microsof Direct3D 11 視頻加速器代碼[自動(dòng)檢測(cè)]

--disable-dxva2 禁用Microsof DirectX 9 視頻加速器代碼[自動(dòng)檢測(cè)]

--enable-libdrm? 啟用DRM代碼(Linux)[默認(rèn)關(guān)閉]

--enable-libmfx 啟用Intel MediaSDK代碼通過(guò)時(shí)會(huì)用libmfx[默認(rèn)關(guān)閉]

--enable-libnpp 啟用Nvidia性能基本代碼[默認(rèn)關(guān)閉]

--enable-mmal 啟用多媒體抽象層通過(guò)使用MMAL[默認(rèn)關(guān)閉]

--disable-nvenc 禁用Nvidi視頻編碼代碼[自動(dòng)檢測(cè)]

--enable-omx 啟用OpenMAX IL 代碼[默認(rèn)關(guān)閉]

--enable-omx-rpi 啟用OpenMAX IL 代碼樹(shù)莓派[默認(rèn)關(guān)閉]

--enable-rkmpp 啟用媒體平臺(tái)代碼[默認(rèn)關(guān)閉]

--disable-vaapi 禁用視頻加速器API代碼[自動(dòng)檢測(cè)]

--disable-vda 禁用蘋(píng)果視頻解碼加速器代碼[自動(dòng)檢測(cè)]

--disable-vdpau 禁用Nvidia視頻解碼和展示Unix代碼的API[自動(dòng)檢測(cè)]

--disable-videotoolbox 禁用VideoToolbox代碼[自動(dòng)檢測(cè)]

Toolchain options:工具鏈選項(xiàng)(指定需要編譯平臺(tái)CPU架構(gòu)類型,arm64,x86,arm7等等)

toolchain options.png

--arch=ARCH 選擇體系結(jié)構(gòu)

--cpu=CPU 選擇最小需要的CPU

--cross-prefix=PREFIX 使用前綴為編譯的工具

--progs-cross-compile? 程序名后綴

--sysroot=PATH 根交叉構(gòu)建樹(shù)

--sysinclude=PATH 編譯系統(tǒng)頭文件的路徑

--target-os=OS 編譯平臺(tái)系統(tǒng)

--target-exec=CMD 執(zhí)行的目標(biāo)文件

--target-path=DIR 編譯母的的路徑

--target-samples=DIR 樣例目錄的路徑

--tempprefix=PATH? 固定目錄/前綴代替mktmep的檢查

--toolchain=NAME 設(shè)置tool默認(rèn)名

--nm=NM 使用nm工具NM[nm -g]

--ar=AR? 使用歸檔工具AR[ar]

--as=AS 使用匯編程序AS

--ln_s=LN_S 使用特殊符號(hào)鏈接工具LN_S[ln -s -f]

--strip=STRIP? 使用帶工具條工具STRIP[strip]

--windres=WINDRES 使用windows資源編譯WINDRES[windres]

--x86asmexe=EXE 使用nasm-compatible匯編程序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[nvcc]

--ld=LD 使用鏈接者LD[]

--pkg-config=PKGCONFIG 使用包配置工具PKGCONFIG[pkg-config]

--pkg-config-flags=FLAGS 通過(guò)額外的標(biāo)志到pkgconf []

--ranlib=RANLIB 使用ranlib RANLIB[ranlib]

--doxygen=DOXYGEN 使用DOXYGEN生成API文檔[doxygen]

--host-cc=HOSTCC 使用host C 編譯HOSTCC

--host-cflags=HCFLAGS? 使用HCFLAGS編譯host

--host-cpflags= HCPPELAGS 使用HCPPELAGS編譯host

--host-ld=HOSTLD 使用host鏈接HOSTLD

--host-ldflags=HLDFLAGS 使用HLDFLAGS 鏈接host

--host-libs=HLIBS? 使用庫(kù)HLIBS鏈接host

--host-os=OS? 編譯host系統(tǒng)[]

--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-ldlibflags=ELDFLAGS 添加ELDFLAGS 到LDLIBFLAGS []

--extra-libs=ELIBS 添加ELIBS []

--extra-version=STRING 版本字符串后綴[]

--optflags=OPTFLAGS 重載優(yōu)化相關(guān)的編譯器

--nvccflags=OPTFLAGS 重載nvcc [-gencode arch=compute_30,code=sm_30 -02]

--build-suffix=SUFFIX 庫(kù)名的后綴 []

--enable-pic 編譯位置獨(dú)立的代碼

--enable-thumb 編譯thumb指令集

--enable-lto? 使用鏈接時(shí)優(yōu)化

--env="ENV=override" 重載環(huán)境變量

Advanced options:高級(jí)選項(xiàng)

advanced options.png

--malloc-prefix=PREFIX? 分配內(nèi)存與相關(guān)名字的前綴

--custom-allocator=NAME? 使用受支持的自定義分配程序

--disable-symver 禁用符號(hào)版本控制

--enable-hardcoded-tables? 使用硬編碼表代替運(yùn)行時(shí)生成

--disable-safe-bitstream-reader? 在bitread時(shí),禁止緩沖器邊界check

--sws-max-filter-size=N? 最大過(guò)濾size[默認(rèn)256]

Optimization options (experts only):優(yōu)化選項(xiàng)

optimization options.png

--disable-asm 禁止所有優(yōu)化

--disable-altivec 禁止單指令流多數(shù)據(jù)流優(yōu)化

--disable-vsx 禁止VSX優(yōu)化

--disable-power8 禁止POWER8優(yōu)化

--disable-amd3dnow 禁止3DNow!優(yōu)化

--disable-amd3nowext? 禁止3DNow!擴(kuò)展優(yōu)化

--disable-mmx 禁止MMX優(yōu)化

--disable-mmxext 禁止MMXEXT優(yōu)化

--disable-sse 禁止SSE優(yōu)化

--disable-sse2 禁止SSE2優(yōu)化

--disable-sse3 禁止SSE3優(yōu)化

--disable-sse4 禁止SSE4優(yōu)化

--disable-sse42 禁止SSE4,2 優(yōu)化

--disable-avx 禁止AVX優(yōu)化

--disable-xop 禁止XOP優(yōu)化

--disable-fma3 禁止FMA3優(yōu)化

--disable-fma4 禁止FMA4優(yōu)化

--disable-avx2 禁止AVX2優(yōu)化

--disable-aesni 禁止AESNI優(yōu)化

--disable-armv5te 禁止armv5te 優(yōu)化

--disable-armv6 禁止armv6優(yōu)化

--disable-armv6t2 禁止armv6t2優(yōu)化

--disable-vfp 禁止VFP優(yōu)化

--disable-neon 禁止NEON優(yōu)化

--disable-inline-asm? 禁止使用內(nèi)聯(lián)匯編

--disable-x86asm 禁止使用獨(dú)立的x86匯編

--disable-mipsdsp 禁止MIPS DSP ASE R1優(yōu)化

--disable-mipsdspr2 禁止MIPS DSP ASE R2 優(yōu)化

--disable-msa 禁止MSA優(yōu)化

--disable-mipsfpu 禁止浮點(diǎn)MIPS優(yōu)化

--disable-mmi 禁止處理器SIMD優(yōu)化

--disable-fast-unaligned 考慮未對(duì)齊的訪問(wèn)緩慢

Developer options:開(kāi)發(fā)者選項(xiàng)

developer options.png

--disable-debug 禁止調(diào)試

--enable-debug=LEVEL 設(shè)置調(diào)試等級(jí)

--disable-optimizations 禁止編譯器優(yōu)化

--enable-extra-warnings 啟用多個(gè)編譯器警告

--disable-stripping 刪除可執(zhí)行文件和共享庫(kù)

--assert-level=level 0(默認(rèn)),1或者2,斷言測(cè)試的數(shù)量,2導(dǎo)致運(yùn)行時(shí)減速

--enable-memory-poisoning? 用任意的數(shù)據(jù)運(yùn)行填充未初始化的空間碟渺,通過(guò)valgrind進(jìn)行測(cè)試鲜锚,以使用指定的valgrind二進(jìn)制代碼來(lái)檢測(cè)內(nèi)存泄漏和錯(cuò)誤。

--valgrind=VALGRIND 運(yùn)行測(cè)試通過(guò)valgrind檢測(cè)內(nèi)存泄漏和錯(cuò)誤,使用指定的valgrind二進(jìn)制

--enable-ftrapv 算術(shù)溢出

--samples=PATH? 測(cè)試樣品路徑,如果在調(diào)用是時(shí)間沒(méi)有設(shè)置$FATE_SAMPLES

--enable-neon-clobber-test? 檢查NEON寄存器(僅用于調(diào)試目的)

--enable-xmm-clobber-test? 檢查XMM寄存器(僅僅Win64,僅用于調(diào)試目的)

--enable-random? 任意地啟用組件

--disable-random 任意地禁用組件

--enable-random=LIST 隨機(jī)啟用特定組件或組件組,列表是一個(gè)以逗號(hào)分隔的名稱[:PROB],PROB與組件名相關(guān),默認(rèn)值是0.5

--disable-random=LIST 隨機(jī)禁用特定組件或組件組,列表是一個(gè)以逗號(hào)分隔的名稱[:PROB],PROB與組件名相關(guān),默認(rèn)值是0.5

--random-seed=VALUE 根據(jù)值來(lái)啟用/禁用random

--disable-valgrind-backtrace? 不能在Valgrind下輸出向后追蹤

--enable-osfuzz 支持構(gòu)建fuzzer工具

--libfuzzer=PATH libfuzzer的路徑

--ignore-tests=TESTS 測(cè)試列表的結(jié)果是可以忽略

--enable-linux-perf? 使用Linux性能監(jiān)視器API

把這些options(選項(xiàng))終于翻譯完了,到這一步,筆者確實(shí)累了.

1.要把英文翻譯過(guò)來(lái),

2.結(jié)合技術(shù)詞匯進(jìn)行翻譯.

這里選項(xiàng)大家根據(jù)自己需要各取所需,加入到自己編譯shell中.

4.下載gas-preprocessor.pl及安裝

下載

同樣有兩種辦法:

一: github地址:https://github.com/libav/gas-preprocessor

二: 到我的github下載:請(qǐng)查看文章底部

把gas-preprocessor.pl文件與執(zhí)行sh文件放到同一目錄下.

sh_pl同一目錄.png

安裝

同樣兩種辦法:

一:

1. 下載最新的gas-preprocessor.pl

2.右鍵點(diǎn)Finder->前往文件夾苫拍,輸入/usr芜繁,

在里面新建local文件夾,進(jìn)入local文件夾中![C compiler test failed.png]

(http://upload-images.jianshu.io/upload_images/2960658-41ad8a2bf4758ada.png?

imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

再新建bin文件夾绒极,

拷貝下載的gas-preprocessor.pl到該目錄下浆洗;

3. 打開(kāi)終端,輸入 chmod 777 /usr/local/bin/gas-preprocessor.pl

二:

1.下載gas-preprocessor安裝包

2.復(fù)制gas-preprocessor.pl到/usr/sbin下

3.chmod 777 /usr/local/bin/gas-preprocessor.pl

5.編寫(xiě)腳本代碼

定義下載庫(kù)名稱

source="ffmpeg-3.4"

定義".h/.mm/.c文件編譯的結(jié)果目錄"

cache="cache"

定義.a靜態(tài)庫(kù)保存目錄

staticdir=`pwd`/"lk-ffmpeg-iOS"

添加FFmpeg配置選項(xiàng)->默認(rèn)配置

Toolchain options:工具鏈選項(xiàng)(指定我們需要編譯平臺(tái)CPU架構(gòu)類型)

--enable-cross-compile:交叉編譯

--enable-pic:允許建立與位置無(wú)關(guān)代碼

Developer options:開(kāi)發(fā)者選項(xiàng)

--disable-debug:禁止使用調(diào)試模式

Program options選項(xiàng)

--disable-programs:禁用程序(不允許建立命令行程序)

Documentation options:文檔選項(xiàng)

--disable-doc:不需要編譯文檔

configure_flags="--enable-cross-compile --disable-debug --disable-programs

--disable-doc --enable-pic"

定義默認(rèn)CPU平臺(tái)架構(gòu)類型

arm64 armv7->真機(jī)->CPU架構(gòu)類型

x86_64 i386->模擬器->CPU架構(gòu)類型

archs="arm64 armv7 x86_64 i386"

指定我們的這個(gè)庫(kù)編譯系統(tǒng)版本-iOS系統(tǒng)7.0以及以上版本使用這個(gè)靜態(tài)庫(kù)

targetversion="7.0"

接受命令后輸入?yún)?shù)

動(dòng)態(tài)接受命令輸入CPU平臺(tái)架構(gòu)類型

if [ "$*" ]

then

#存在輸入?yún)?shù),也就說(shuō):外部指定需要編譯CPU架構(gòu)類型

archs="$*"

fi

安裝匯編器->yasm

下載yasm最新版本:http://www.tortall.net/projects/yasm/releases/

首先判斷是否存在匯編器,然后通過(guò)軟件管理器,下載安裝匯編器

if [? ! `which yasm` ]

then

if [ ! `which brew` ]

then

echo "安裝brew"

ruby -e "$(curl -fsSL

https://raw.githubusercontent.com/Homebrew/install/master/install)" || exit 1

fi

echo "安裝yasm"

brew install yasm || exit 1

fi

for循環(huán)編譯FFmpeg靜態(tài)庫(kù)

currentdir=`pwd`

for arch in #archs

do

echo "開(kāi)始編譯"

#創(chuàng)建目錄

mkdir -p "$cache/$arch"

#進(jìn)入這個(gè)目錄

cd "$cache/$arch"

#配置編譯CPU架構(gòu)類型->指定當(dāng)前編譯CPU架構(gòu)類型

archflags="-arch $arch"

#判定一下是編譯的模擬器.a靜態(tài)庫(kù),還是真機(jī).a靜態(tài)庫(kù)

if [ "$arch" = "i386" -o "$arch" = "x86_64"]

then

#模擬器

platform="iPhoneSimulator"

#支持最小系統(tǒng)版本->iOS系統(tǒng)

archflags="$archflags -mios-simulator-version-min=$targetversion"

else

#真機(jī)(mac,iOS都支持)

platform="iPhoneOS"

#支持最小系統(tǒng)版本->iOS系統(tǒng)

archflags="$archflags -mios-version-min=$targetversion -

fembed-bitcode"

#優(yōu)化處理

#如果架構(gòu)類型是"arm64",那么

if [ "$arch" = "arm64" ]

then

#程序運(yùn)行時(shí),變量訪問(wèn)越界問(wèn)題

EXPORT="GASPP_FIX_XCODE5=1"

fi

fi

編譯

將platform->轉(zhuǎn)成大寫(xiě)或者小寫(xiě)

XCRUN_SDK=`echo $platform | tr '[:upper:]''[:lower:]'`

編譯器->編譯平臺(tái)

CC="xcrun -sdk $XCRUN_SDK clang"

架構(gòu)類型->arm64

if [ "$arch" = "arm64" ]

then

#preprocessor.pl幫助我們編譯FFmpeg->arm64位靜態(tài)庫(kù)

AS="gas-preprocessor.pl -arch aarch64 -- $CC"

else

#默認(rèn)編譯平臺(tái)

AS="$CC"

fi

--target-os:目錄系統(tǒng)->darwin(mac系統(tǒng)早期版本)

--arch:CPU平臺(tái)架構(gòu)類型

--cc:指定編譯器類型選項(xiàng)

--as:匯編程序

$configure_flags最初配置

--extra-cflags

--prefix:靜態(tài)庫(kù)輸出目錄

TMPDIR=${TMPDIR/%\/} $currentdir/$source/configure \

--target-os=darwin \

--arch=$arch \

--cc="$CC" \

--as="$AS" \

$configure_flags \

--extra-cflags="$archflags" \

--extra-ldflags="$archflags" \

--prefix="$staticdir/$arch" \

|| exit 1

#執(zhí)行命令 安裝導(dǎo)出靜態(tài)庫(kù)

make -j3 install $EXPORT || exit 1

#回到了我們的腳本文件目錄

cd $currentdir

done

6.執(zhí)行腳本結(jié)果一覽

執(zhí)行成功后,這里需要等待一小會(huì)時(shí)間,此時(shí),你可以放首音樂(lè)聽(tīng)聽(tīng),等待一下

我們可以在文件夾中看到

運(yùn)行結(jié)果1.jpg

運(yùn)行結(jié)果2.jpg

運(yùn)行結(jié)果_3.png

運(yùn)行結(jié)果_4.png

7.編譯過(guò)程中遇到的問(wèn)題

執(zhí)行文件報(bào)警告

執(zhí)行shell提示.png

這里需要您給腳本授權(quán)

一.

chmod +x 腳本名

二.

chmod 777 腳本名

把我的源碼下載后,編譯時(shí)出錯(cuò)了

編譯報(bào)錯(cuò).png

沒(méi)有這樣的文件和路徑

此時(shí)文件夾內(nèi)容.png

你沒(méi)有把下載的MMpage壓縮包放在該目錄下,可見(jiàn)不報(bào)錯(cuò)都難.

語(yǔ)法錯(cuò)誤

特別注意:雖然把代碼寫(xiě)完了,進(jìn)行編譯的時(shí)候老是出錯(cuò),你又很難檢查出錯(cuò)誤.注意下圖語(yǔ)法變動(dòng),正確的使用,確保你的編譯通過(guò),否則反反復(fù)復(fù)修改,還是找不到問(wèn)題的關(guān)鍵.

語(yǔ)法錯(cuò)誤1.jpg

語(yǔ)法錯(cuò)誤2.jpg

GNU assembler not found, install/update gas-preprocessor

GNU assembler not found, install:update gas-preprocessor.png

如果這一步出錯(cuò),因?yàn)闆](méi)有把pl文件放在同一目錄下,才導(dǎo)致的錯(cuò)誤.

所以您可以最新下載的pl文件,放在同一目錄下進(jìn)行編譯.

那就需要您查看第四步操作進(jìn)行下載和安裝

C compiler test failed

C compiler test failed.png

1.打開(kāi)終端集峦。

輸入并回車

cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.

platform/developer/SDKs/

然后輸入

ls

可以查看到你當(dāng)前iOS SDK的版本

2.修改iOS SDK版本。

3.再次執(zhí)行腳本

8.個(gè)人總結(jié)

好了,到這里呢?

您就完成了FFmepg--靜態(tài)庫(kù)的編譯,

容易出錯(cuò)的地方呢?

文件未授權(quán)

語(yǔ)法錯(cuò)誤

下載的文件并沒(méi)有放在同一目錄下

gas-preprocessor.pl

FFmepg解壓包

...

當(dāng)您完成這些操作,還是蠻有成就的,

編譯自己想要的靜態(tài)庫(kù),需要花費(fèi)時(shí)間,需要靜心等待,

編譯出錯(cuò)就需要您想辦法解決,

個(gè)人覺(jué)得寫(xiě)編譯腳本不是一件困難的事,關(guān)鍵是遇到了編譯出錯(cuò)的問(wèn)題,你是否可以自己解決.

考驗(yàn)了一下個(gè)人能力時(shí)候到了,如果您覺(jué)得對(duì)您有幫助,請(qǐng)您來(lái)一波鮮花和贊.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抠刺,一起剝皮案震驚了整個(gè)濱河市塔淤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌速妖,老刑警劉巖高蜂,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異罕容,居然都是意外死亡备恤,警方通過(guò)查閱死者的電腦和手機(jī)稿饰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)露泊,“玉大人喉镰,你說(shuō)我怎么就攤上這事〔研Γ” “怎么了侣姆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)沉噩。 經(jīng)常有香客問(wèn)我捺宗,道長(zhǎng),這世上最難降的妖魔是什么川蒙? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任蚜厉,我火速辦了婚禮,結(jié)果婚禮上畜眨,老公的妹妹穿的比我還像新娘昼牛。我一直安慰自己,他們只是感情好胶果,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布匾嘱。 她就那樣靜靜地躺著,像睡著了一般早抠。 火紅的嫁衣襯著肌膚如雪霎烙。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天蕊连,我揣著相機(jī)與錄音悬垃,去河邊找鬼。 笑死甘苍,一個(gè)胖子當(dāng)著我的面吹牛尝蠕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播载庭,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼看彼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了囚聚?” 一聲冷哼從身側(cè)響起靖榕,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎顽铸,沒(méi)想到半個(gè)月后茁计,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谓松,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年星压,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了践剂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡娜膘,死狀恐怖逊脯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情劲绪,我是刑警寧澤男窟,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站贾富,受9級(jí)特大地震影響歉眷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜颤枪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一汗捡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧畏纲,春花似錦扇住、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至票灰,卻和暖如春女阀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背屑迂。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工浸策, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惹盼。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓庸汗,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親手报。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚯舱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容