Android NDK 開發-FFmpeg播放視頻

1、編譯FFmpeg4.2.2

1.1、編譯環境

操作系統:linux,筆者用的是自己的服務器小水管centos7
NDK版本:r21 https://developer.android.google.cn/ndk/downloads/
FFmpeg版本:4.2.2 http://ffmpeg.org/download.html

1.2、配置

1.2.1、修改FFmpeg 配置文件

下載完的FFmpeg解壓後,進入解壓後的目錄即FFmpeg根目錄,找到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)'

1.2.2、編寫編譯腳本

在FFmpeg源碼根目錄新建shell腳本build_ffmpeg_android.sh

#!/bin/bash
#設置ndk目錄
NDK=/usr/ffmpeg/android-ndk-r21
API=21
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
SYSROOT=$TOOLCHAIN/sysroot

#armv7 arm64 x86 x86_64
ARCH=arm64
#arm aarch64  i686 x86_64
ARCH2=aarch64

#stat 以下不同平臺編譯選擇性註釋

#armv7a平臺
#PLATFORM=$ARCH2-linux-androideabi
#ANDROID_CROSS_PREFIX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-

#其他平臺
PLATFORM=$ARCH2-linux-android
ANDROID_CROSS_PREFIX=$TOOLCHAIN/bin/$PLATFORM$API-

#end

OS=android
CROSS_PREFIX=$TOOLCHAIN/bin/$PLATFORM-
#保存目錄
PREFIX=/usr/ffmpeg/ndk_output/$ARCH

./configure \
--prefix=$PREFIX \
--enable-cross-compile \
--cross-prefix=$CROSS_PREFIX \
--arch=$ARCH \
--target-os=$OS \
--pkg-config=$(which pkg-config) \
--cc=${ANDROID_CROSS_PREFIX}clang \
--cxx=${ANDROID_CROSS_PREFIX}clang++ \
--disable-asm \
--disable-x86asm \
--disable-stripping \
--sysroot=$SYSROOT \
--fatal-warnings \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--enable-pic \
--enable-jni \
--enable-shared \
--enable-mediacodec \
--enable-decoder=h264_mediacodec \
--enable-decoder=hevc_mediacodec \
--enable-decoder=mpeg4_mediacodec \
--enable-decoder=vp8_mediacodec \
--enable-decoder=vp9_mediacodec \
--enable-encoder=aac \
--enable-decoder=aac \
--enable-decoder=aac_latm \

make clean
make -j 4
make install

腳本編寫完成,直接運行build_ffmpeg_android.sh就可以了
以下需要注意幾點:

1、需要注意的是NDK r19後使用clang編譯器,設置工具鏈目錄有所區別

TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64

在linux直接使用linux-x86_64,macos需要改爲

TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64

2、以上腳本還有個需要注意的地方,編譯armv7a要特殊一點
舉個例子編譯armv7a平臺需要修改ARCH 和 ARCH2爲註釋對應平臺
還有需要把以下注釋打開

#armv7a平臺
#PLATFORM=$ARCH2-linux-androideabi
#ANDROID_CROSS_PREFIX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-

再把以下注釋掉

#其他平臺
PLATFORM=$ARCH2-linux-android
ANDROID_CROSS_PREFIX=$TOOLCHAIN/bin/$PLATFORM$API-

3、build_ffmpeg_android.sh腳本下的configure配置項根據需求配置需要的項目,可參考FFmpeg官方文檔

最後編譯完成會生成幾個文件夾:
在這裏插入圖片描述
lib生成的動態庫
include生成的頭文件
share演示demo

2、播放視頻

2.1、新建Android項目勾選支持NDK

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