Android 使用FFmpeg播放视频(一)编译FFmpeg

在现今这个阶段,越来越多的app会涉及到音视频,那么学会使用ffmpeg就很有必要了。在这个系类中将讲解如何把ffmpeg编译成动态库,以及使用ffmpeg实现音视频播放和音视频的采集。

编译环境

Linux/Ubuntu/centos都行
在windows环境下可以安装虚拟机或者购买一个云主机,作者在金山云购买的一个Ubuntu主机。

准备工作

下载配置ndk,下载ffmpeg并解压。

这里面注意一下ndk版本不要太高,高版本ndk,ffmpeg是不兼容的,编译成so的时候会有很多问题。

这里建议使用ndk版本 10e ffmpeg版本是3.3

vim ~/.bashrc//进入环境变量配置
export NDKROOT=/home/ndk_build/android-ndk-r10e//配置你的安装路径
export PATH=$NDKROOT:$PATH//配置路径
:wq!//保存退出
source ~/.bashrc//执行环境变量
ndk-build//查看是否安装成功,只要不是显示ndk-build not found,则表示安装成功

下载编译ffmpeg

下载ffmpeg并解压.png

wget http://ffmpeg.org/releases/ffmpeg-3.3tar.gz
tar -xzf  ffmpeg-3.3tar.gz

修改ffmpeg configure文件 

 

修改configure,如果你不修改的话,编译出来过后的.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)'

这里直接双击运行configure,看看是否有提示错误,若有提示错误可能是ndk版本问题,也可能是其他系统配置问题,

根据提示进行相应的系统配置升级。

 

新建android_build.sh文件,编辑android_build.sh

这里注意一下,会经常出错,例如多了空格少了空格之类,建议直接复制ffmpge中的version文件进行编写

#!/bin/bash
make clean
export NDK=/home/ndk_build/android-ndk-r14b
export SYSROOT=$NDK/platforms/android-9/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
export CPU=arm
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"
./configure --target-os=linux \
--prefix=$PREFIX --arch=arm \
--disable-doc \
--enable-shared \
--disable-static \
--disable-yasm \
--disable-symver \
--enable-gpl \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install

编译.sh文件
···
./android_build.sh
···
当编译成功过后会在文件夹中出现android文件夹,

Android 使用FFmpeg播放视频(一)编译FFmpeg

 

修改build_android文件

 --enable-shared \
--disable-static \

替换成

 --disable-shared \
--enable-static \

运行 build_android文件

编译后ffmpge文件结构

Android 使用FFmpeg播放视频(一)编译FFmpeg

 

 到此ffmpge已经编译完成。

上一篇:nginx编译选项


下一篇:Chrome浏览器跨域设置