生活随笔
收集整理的這篇文章主要介紹了
ffmpeg系列之编译安卓版ffmpeg库
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 前言
- 正文
- 準備資源
- 配置解壓后的文件夾ffmpeg中的configure
- 編寫Android編譯的腳本
- 編譯
前言
FFmpeg是一個autoconf項目,cmake那套編譯方法就沒辦法用了,因為autoconf只支持Unix-like的系統。所以最好在linux下編譯、。網上有各種教程,但是跟著弄的時候又跑不通,關鍵問題在于ndk的版本,和build_android.sh腳本要對應,以下內容是采用ndk21版本編譯出來的,不適用其他版本
正文
準備資源
準備ffmpeg源碼
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
準備安卓ndk21
wget https://dl.google.com/android/repository/android-ndk-r21b-linux-x86_64.zip
unzip android-ndk-r21b-linux-x86_64.zip
配置解壓后的文件夾ffmpeg中的configure
cd ffmpeg
vim configure
3921行左右.將如下內容
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)'
這一步的主要目的是生成Android能夠使用的 名稱-版本.so文件的格式,不然的話生成的是Linux上使用庫,Android不能用。
編寫Android編譯的腳本
ps:注意以下腳本只能配合ndk21使用
cd ffmpeg
vim build_android.sh
#!/bin/bash
# 清空上次的編譯
make clean
#你自己的NDK路徑.
PREFIX=build_android
NDK=/home/anjoiner/Android/Sdk/ndk-bundle
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
SYSROOT=$TOOLCHAIN/sysroot
API=21function build_android
{
echo "Compiling FFmpeg for $CPU"
./configure \--prefix=$PREFIX \--disable-static \--disable-doc \--disable-ffmpeg \--disable-ffplay \--disable-ffprobe \--disable-doc \--disable-symver \--enable-nonfree \--enable-gpl \--enable-small \--enable-neon \--enable-hwaccels \--enable-avdevice \--enable-postproc \--enable-shared \--enable-jni \--enable-mediacodec \--enable-decoder=h264_mediacodec \--cross-prefix=$CROSS_PREFIX \--target-os=android \--arch=$ARCH \--cpu=$CPU \--nm=$NM \--strip=$STRIP \--cc=$CC \--cxx=$CXX \--enable-cross-compile \--sysroot=$SYSROOT \--extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \--extra-ldflags="$ADDI_LDFLAGS" \$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
echo "The Compilation of FFmpeg for $CPU is completed"
}#armv8-a
ARCH=aarch64-linux-android-
VERSION=arm64
CPU=armv8-a
CROSS_PREFIX=$TOOLCHAIN/bin/${ARCH}
CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++
NM=$TOOLCHAIN/bin/${ARCH}nm
STRIP=$TOOLCHAIN/bin/${ARCH}strip
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU"
build_android#armv7-a
ARCH=arm-linux-androideabi-
VERSION=arm
CPU=armv7-a
CROSS_PREFIX=$TOOLCHAIN/bin/${ARCH}
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++
NM=$TOOLCHAIN/bin/${ARCH}nm
STRIP=$TOOLCHAIN/bin/${ARCH}strip
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=neon -march=$CPU"
build_android
編譯
一定要sudo執行,否則無法再/usr/local/share目錄下創建文件
./configure --disable-x86asm
sudo chmod +x build_android.sh
sudo ./build_android.sh
總結
以上是生活随笔為你收集整理的ffmpeg系列之编译安卓版ffmpeg库的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。