Linux环境下使用Android NDK编译FFmpeg源码为so库

序言

短视频、直播、视频会议等的出现让音视频在移动端出现爆发式的增长。然而音视频在移动端应用方面入门的门槛一向都比较高。由此心里萌发学习音视频方面技术的想法。

笔记系列如下:

Linux环境下 FFmpeg源码使用Android NDK 编译so库

一、FFmpeg源码下载

下载地址:http://www.ffmpeg.org/download.html

二、NDK下载:

下载地址:https://developer.android.google.cn/ndk/downloads

三、执行脚本准备

#!/bin/bash
echo "进入FFmpeg编译"
#将NDK的下载路径替换成你自己的NDK路径,我下载的r20b版本
NDK=/home/zhangqingfa/ndk/android-ndk-r20b
PLATFORM=$NDK/platforms/android-21/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
#指定目标cpu的架构 armv7a aarch64 i686 x86_64
CPU= armv7-a
#设置编译产物的输出目录,这里表示在当前目录下新建android目录
PREFIX=./android/$CPU
function buildFF
{
  echo "开始编译ffmpeg"
  ./configure \
  --prefix=$PREFIX \
  --target-os=android \
  --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
  --arch=arm \
  --cpu=armv7-a
  --sysroot=$PLATFORM \
  --extra-cflags="-I$PLATFORM/usr/include -fPIC -DANDROID -mfpu=neon -mfLoat-abi=softfp " \
  --cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \
  --nm=$TOOLCHAIN/bin/arm-linux-androideabi-nm \
  --enable-shared \
  --enable-runtime-cpudetect \
  --enable-gpl \
  --enable-small \
  --enable-cross-compile \
  --enable-asm \
  --enable-neon \
  --enable-jni \
  --enable-mediacodec \
  --enable-decoder=h264_mediacodec \
  --enable-hwaccel=h264_mediacodec \
  --disable-debug \
  --disable-static \
  --disable-doc \
  --disable-ffmpeg \
  --disable-ffplay \
  --disable-ffprobe \
  --disable-ffserver \
  --disable-postproc \
  --disable-avdevice \
  --disable-stripping \
  --disable-symver \
  make -j 4
  make install
  echo "编译结束!" 
}

buildFF

四、执行脚本得到so库

修改sh文件权限并且执行,编译期间需要一段时间:

五、最终结果如下:

FFmpeg编译得到的so库简介说明(后面实战会有详细记录)

libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;音视频的格式解析协议,为 libavcodec 分析码流提供独立的音频或视频码流源。

libavcodec:用于各种类型声音/图像编解码。该库是音视频编解码核心,实现了市面上可见的绝大部分解码器的功能, libavcodec 库被其他各大解码器 ffdshow, Mplayer 等所包含或应用。

libavfilter:filter(FileIO、 FPS、 DrawText) 音视频滤波器的开发,如宽高比 裁剪 格式化 非格式化 伸缩。

libavutil:包含一些公共的工具函数的使用库,包括算数运算 字符操作。

libavresample:音视频封转编解码格式预设等。

libswscale:(原始视频格式转换) 用于视频场景比例缩放、色彩映射转换;图像颜色空间或格式转换,如 rgb565、rgb888 等与 yuv420 等之间转换。

libswresample:原始音频格式转码。

 

后面的笔记会有记录在android中如何使用FFmpeg编译的so库做一些实战。如有问题可留言讨论。欢迎指教。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆流的剑客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值