查看原文
其他

NDK FFmpeg 编译

haohao 字节流动 2022-05-24



阅读本文大概需要 1.16 分钟。



互联网时代限制个人发展的不再是掌握知识和信息的多少,而是个人的认知水平。



本篇介绍一下 Linux 环境下 FFmpeg 的编译。

前期推送的 NDK 开发系列文章:


1. FFmpeg 是什么?


FFmpeg 全称(First Forward MPEG),是一款领先的开源多媒体框架,采用 LGPL 或 GPL 许可证,除了具有音视频编解码功能外,还有视频格式转换、视频抓图、视频水印、推流等功能。 FFmpeg 在 Linux 平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括 Windows 、Mac OS X 等。


FFmpeg的官方网站是:http://ffmpeg.org/



Windows 平台下,编译好的可用版本一般有三个: Static ,Shared ,Dev 。


Static 里面有 3 个应用程序:ffmpeg.exe ,ffplay.exe ,ffprobe.exe ,动态链接库都被编译在 exe 文件中,每个 exe 的体积都很大,可直接运行,如播放一段视频,命令行下执行:ffmpeg video.mp4。


Shared 里面除了 3 个应用程序:ffmpeg.exe ,ffplay.exe ,ffprobe.exe 之外,还有一些动态链接库,如 avcodec-54.dll 之类的,Shared 里面的 exe 体积较小。


Dev 版本主要用于开发的,里面包含了一些库文件 xxx.lib 和文件 xxx.h 。



Linux 平台下,本文选择的版本是 2.6.9,地址:http://ffmpeg.org/olddownload.html


2. 编译 FFmpeg


搭建 Linux 开发环境,安装 Ubuntu 虚拟机或者租一个低配的阿里云主机,文件传输工具推荐 FileZilla 或 XFTP 。


首先下载 Linux 环境下的 NDK (注意科学上网),如 

android-ndk-r11c-linux-x86_64.bin 。


执行如下命令进行解压缩:

./android-ndk-r11c-linux-x86_64.bin


配置环境变量,首先编辑 .bashrc 文件。
vim ~/.bashrc


在文件结尾添加两行代码:


export NDKROOT=( NDK 解压的根目录)如 、/usr/workspace/ndk/android-ndk-r11c
export PATH=$NDKROOT:$PATH


更新环境变量:
source ~/.bashrc


下载 FFmpeg ,地址:

http://ffmpeg.org/olddownload.html 


解压:

uzip ffmpeg-2.6.9.zip


然后编写用于编译的 Shell 脚本,在 ffmpeg-2.6.9 根目录下执行:vim build_android.sh


#!/bin/bash
make clean
export NDK=/home/wuhuannan/Android/Sdk/ndk-bundle
export SYSROOT=$NDK/platforms/android-14/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


然后修改根目录下的 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)'


修改文件权限:

chmod +x build_android.sh configure


执行一下脚本开始编译:

./build_android.sh


约几分钟后,编译生成的动态库文件如下:



后续我们将在 Android 环境下的音视频编解码中使用这些动态库。


PS:公众号后台回复 NDK 获取: 

android-ndk-r10e-linux-x86_64.bin

回复 ffmpeg 获取:

ffmpeg-2.6.9.zip








-- END --

迷茫的时候,选择最难走的那条路

Copyright © 2018 AndroidGeeks

本文由“135编辑器”提供技术支持




AndroidGeeks



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存