【Android 音视频开发打怪升级:FFmpeg音视频编解码篇】一、FFmpeg so库编译

本文详细介绍了如何在Android上交叉编译FFmpeg库,包括使用CLANG和GCC的步骤,从配置环境、下载NDK、配置脚本到启动编译,帮助读者理解编译过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【声 明】

首先,这一系列文章均基于自己的理解和实践,可能有不对的地方,欢迎大家指正。
其次,这是一个入门系列,涉及的知识也仅限于够用,深入的知识网上也有许许多多的博文供大家学习了。
最后,写文章过程中,会借鉴参考其他人分享的文章,会在文章最后列出,感谢这些作者的分享。

码字不易,转载请注明出处!

教程代码:【Github传送门

目录

一、Android音视频硬解码篇:
二、使用OpenGL渲染视频画面篇
三、Android FFmpeg音视频解码篇
  • 1,FFmpeg so库编译
  • 2,Android 引入FFmpeg
  • 3,Android FFmpeg视频解码播放
  • 4,Android FFmpeg+OpenSL ES音频解码播放
  • 5,Android FFmpeg+OpenGL ES播放视频
  • 6,Android FFmpeg简单合成MP4:视屏解封与重新封装
  • 7,Android FFmpeg视频编码

本文你可以了解到

使用 GCCCLANG 交叉编译出Android平台可以使用的FFmpeg so库。为了很好的迈出 FFmpeg 开发的第一步,不仅要知其然,更要知其所以然。不仅要知道怎么样能成功编译,更要知道为什么能成功编译。在开始动手之前,建议先通读整篇文章,相信本文定可以让你有所感悟。

一、前言

网上其实已经有很多的关于FFmpeg so库编译的分享,但是大部分都是直接把配置文件的内容贴出来。我想大部分取搜索 「如何编译FFmpeg so库」的人,对交叉编译这个东东都是比较陌生的。

特别对于移动端开发者来说,大部分人大多数时候都是在Java层做开发,很少接触到NDK层的东西。如果直接去看一份交叉编译的配置,估计会很上头。

通常情况下,在一篇FFmpeg编译的文章下面都会有很多的类似「为什么按照楼主的配置还是无法编译成功?」的评论,那为什么人家可以编译成功,我们copy下来却不可以呢?

原因有非常多,大部分其实集中在以下几个方面:

1. 无脑copy,祈求有一个傻瓜式的配置可以成功编译;
2. FFmpeg版本和NDK版本很多,每一个版本都可能需要不一样的配置;
3. 不了解每个配置项的意义,即使好运配置对了, 但是稍微一修改,又无法正常编译了。

为什么FFmpeg让人觉得很难搞?

我想主要是因为迈出第一步就很困难,连so库都编译不出来,后面的都是扯淡了。

二、什么是交叉编译

定义

引自百度百科的定义:交叉编译,是在一个平台上生成另一个平台上的可执行代码。

什么意思呢?说白了,就是在一个机器上生成一个程序,这个程序可以跑在另外一个机器上。举栗:在PC上编译一个apk,这个apk可以跑在Android手机上,这其实就是一个交叉编译的过程。

为什么要交叉编译

我们知道,PC上的软件是直接在PC上编译生成的,那为什么Android上的软件不能在Android上自己编译生成呢?

理论上是可以,但是Android手机上的资源有限啊,在PC上编译一个apk都要那么久,你可以想象在Android手机上编译一个apk要多久吗?或者你能想象在手机上敲代码的情景吗?

那我们会想既然PC上资源那么丰富,那可不可以利用PC来编译出在手机上可以运行的软件呢?

于是,交叉编译出现。

交叉编译需要的什么
编译环境

我们知道PC上的环境和手机上的运行环境是绝然不同的,如果使用PC上的环境直接编译的话,可以想象这个编译出来的App,分分钟就会挂掉。

所以,交叉编译最重要的是,要配置好编译过程中使用到的相关的环境,而这个环境其实就是目标机器(比如Android手机)正在运行的环境。

编译工具链

对于C/C++的编译,通常有两个工具 GCCCLANG

GCC 可能大家都有听说过,这是一个老牌的编译工具,不仅可以编译C/C++,也可以编译Java,Object-C,Go等语言。

CLANG 则是一个效率更高的C/C++编译工具,并且兼容GCC,Google在很早以前就开始建议使用clang进行编译,并且在 ndk 17 以后,把 GCC 移除了,全面推行使用 CLANG

三、如何交叉编译FFmpeg

FFmpeg是什么

鼎鼎大名的FFmpeg,不说在音视频界如雷贯耳,就算一个不开发音视频的开发者也都是略有耳闻。

官方简介

A complete, cross-platform solution to record, convert and stream audio and video.

翻译过来就是:FFmpeg是一套集录制、转换以及流化音视频的完整的跨平台解决方案。

从这段简介可以看到FFmpeg有以下特点:

  1. 功能强大:录制、解码、编码、编辑、推流等等
  2. 跨平台
编译流程

从前面的介绍,基本上可以总结出FFmepg编译的基本流程:

  1. 选择编译工具
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

开发的猫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值