1. 程式人生 > >ffmpeg3.3.7原始碼編譯

ffmpeg3.3.7原始碼編譯

本文介紹在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