Windows環境編譯FFmpeg
Windows環境編譯FFmpeg
Windows10下編譯FFmpeg。
MinGW下載
MinGW下載地址,我這裏安裝D盤。並添加到系統環境變量中
打開MinGW\bin\mingw-get.exe。打開後,點擊Basic Setup下載下圖的插件。
NDK下載
NDK下載地址,這裏下載android-ndk-r15c-windows-x86_64,不建議下載高的版本,最後的編譯可能出錯。下載到相關目錄,解壓即可。
FFmpeg下載
FFmpeg官網下載,這裏我下載的是FFmpeg 3.3.9版本。解壓到相關目錄下。
開始編譯
- 修改E:\ffmpeg-3.3.9下載configure文件,搜索到下面的代碼並修改。
將
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)'
2.E:\ffmpeg-3.3.9目錄下新建build_andorid.sh,輸入以下內容,注意修改相關的目錄
#!/bin/bash
export TMPDIR=E:/ffmpeg-3.3.9/tmpdir #新建的臨時目錄
NDK=E:/Android/android-ndk-r15c #Ndk目錄
SYSROOT=$NDK/platforms/android-14/arch-arm #選擇編譯版本
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
CPU=arm
PREFIX=E:/ffmpeg-3.3.9/output/$CPU #so輸出的目錄
ADDI_CFLAGS="-Os -fpic -marm"
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--enable-static \
--enable-asm \
--enable-neon \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--enable-pthreads \
--enable-small \
--enable-jni \
--enable-mediacodec \
--enable-runtime-cpudetect \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=android \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="$ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
build_one
read -p "Press any key to continue."
3.打開D:\MinGW\msys\1.0\msys.bat進入到ffmpeg3.3.9目錄下
大約10幾分鐘後,編譯完成
大約有7個so
編譯成一個ffmpeg.so
編譯成7個so,在配置時比較麻煩。我們修改build_android.sh文件,
#!/bin/bash
export TMPDIR=E:/ffmpeg-3.3.9/tmpdir
NDK=E:/Android/android-ndk-r15c
SYSROOT=$NDK/platforms/android-14/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
CPU=arm
PREFIX=E:/ffmpeg-3.3.9/build_output
ADDI_CFLAGS="-marm"
ADDI_LDFLAGS=""
function build_arm
{
./configure \
--prefix=$PREFIX \
--enable-static \
--disable-shared \
--disable-doc \
--disable-programs \
--disable-symver \
--disable-encoders \
--enable-encoder=aac \
--enable-encoder=mjpeg \
--enable-encoder=png \
--disable-decoders \
--enable-decoder=aac \
--enable-decoder=aac_latm \
--enable-decoder=h264 \
--enable-decoder=hevc \
--enable-decoder=mpeg4 \
--enable-decoder=mjpeg \
--enable-decoder=png \
--disable-demuxers \
--enable-demuxer=image2 \
--enable-demuxer=h264 \
--enable-demuxer=hevc \
--enable-demuxer=aac \
--enable-demuxer=avi \
--enable-demuxer=mpc \
--enable-demuxer=mov \
--disable-parsers \
--enable-parser=aac \
--enable-parser=ac3 \
--enable-parser=h264 \
--enable-parser=hevc \
--enable-small \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
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 \
$PREFIX/lib/libavcodec.a \
$PREFIX/lib/libavfilter.a \
$PREFIX/lib/libswresample.a \
$PREFIX/lib/libavformat.a \
$PREFIX/lib/libavutil.a \
$PREFIX/lib/libswscale.a \
$PREFIX/lib/libavdevice.a \
-lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker \
$TOOLCHAIN/lib/gcc/arm-linux-androideabi/4.9.x/libgcc.a
}
build_arm
運行./build_android.sh
編譯成功如下: