ffmpeg3.3.7原始碼編譯
阿新 • • 發佈:2019-01-11
本文介紹在mac os環境下編譯ffmpeg3.3.7原始碼: 建議下載ffmpeg3.3.7和ndk-r14b進行原始碼編譯,否則其它版本可能需要修改編譯指令碼才能成功。當然,如果你比較熟悉shell指令碼或者特定ffmpeg版本的話請自便。
1.下載ffmpeg3.3.7原始碼
2.下載ndk-r14b.
3.將下載ndk和ffmpeg原始碼解壓,放到同一目錄下
4.切換到ffmpeg目錄下修改congfigure檔案,目的是去掉預設生成的.so庫檔案後的版本號。
將這四行:
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR) '
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
改成如下四行:
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME ='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
5.configure 檔案為編譯ffmpeg的配置檔案。終端configure –help可以檢視配置引數說明。為了方便設定配置引數,我們建立一個指令碼檔案ffmpegconfig.sh用來配置所有引數。如下是配置引數及解釋。
#!/bin/bash
NDK=/Users/hongenit/ffmpeg_test/android-ndk-r14b
NDK_VERSION=android-21
ARCH=arm
CPU=arm
PREFIX=$(pwd)/android/$CPU
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-
SYSROOT=$NDK/platforms/$NDK_VERSION/arch-$ARCH
function build_one {
./configure \
--target-os=linux \
--arch=$ARCH \
--prefix=$PREFIX \
--disable-shared \
--enable-ffplay \
--disable-ffprobe \
# 產生除錯資訊的選項,開啟的話會使所有模組的庫體積大很多(4倍左右)。
--disable-debug \
# 開啟所有解碼器,對應libavcodec
--disable-decoders \
--enable-decoder=h264 \
--enable-decoder=aac \
--enable-encoders \
--enable-encoder=rawvideo \
# 開啟所有格式封裝器
--enable-muxers \
--enable-muxer=mp4 \
--enable-muxer=rawvideo \
# 開啟濾鏡功能,libavfilter
--enable-filters \
--enable-static \
--disable-doc \
--disable-ffserver \
--enable-cross-compile \
--cross-prefix=$CROSS_COMPILE \
--sysroot=$SYSROOT \
--extra-cflags="-fpic"
}
build_one
make -j8
make install
$TOOLCHAIN/bin/arm-linux-androideabi-ld -rpath-link=$SYSROOT/usr/lib -L$SYSROOT/usr/lib -L$PREFIX/lib -soname libffmpeg.so -shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavfilter/libavfilter.a libswresample/libswresample.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a libavdevice/libavdevice.a -lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker $TOOLCHAIN/lib/gcc/arm-linux-androideabi/4.9.x/libgcc.a