Android FFmpeg(一)、Windows編譯So

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版本。解壓到相關目錄下。

開始編譯

  1. 修改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
編譯成功如下:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章