Android 音视频开发之自己动手编译 FFmpeg

【Android 音视频开发打怪升级:FFmpeg音视频编解码篇】一、FFmpeg so库编译 make -j12build这个shell脚本,大体上其实还是很容易懂的,比如分别用于禁止输出静态库,以及输出动态库;--arch--cpu用于配置输出的so库是什么架构的;--prefix用于配置输出的so库的存放路径。接下来重点来讲一下几个选项:target-os:在旧版本的FFmpeg中,对Android平台的支持并不是很完善,并没有android这个target,所以在一些比较老的文章中都会提到,编译Android平台的so库,需要对configure做以下修改,否则会按照linux。 阅读详情
前言

ffmpeg 一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,对于音视频领域,有着极为重要的地位。作为一名 Android developer,如要涉足音视频领域,编译使用 ffmpeg 是不可少的进阶旅程。下面带你一步步实现 ffmpeg 的编译,在此之前,需要准备具有 Linux 环境的系统,如 Ubuntu、Mac,可以弄一个云服务器,也可以装个虚拟机,读者自行斟酌。编译使用到的 ndk 和 ffmpeg,ndk 使用的版本是 android-ndk-r16b,ffmpeg 使用的版本是 ffmpeg-3.3.9。在此建议读者使用上述文中使用的版本,其他版本会遇到其他问题,编译流程也本文不同。

1. 配置环境变量

下载好了 ndk 和 ffmpeg linux 版本后,将解压后的 ffmpeg 放置于 /lib 目录下,在 /lib 下新建目录 ndk,将 ndk 解压到 /lib/ndk 目录下,然后配置 ndk 环境变量。

ndk 和 ffmpeg 路径

配置 ndk 环境变量,需要在 /etc/profile 文件中进行配置

vegen@vegen-virtual-machine:/lib/ndk/android-ndk-r16b$ sudo vim /etc/profile
[sudo] vegen 的密码:

开启文件编辑模式,在最末端进行 ndk 路径的配置

/etc/profile

# 最末端配置 ndk 路径
export NDK_PATH=/lib/ndk/android-ndk-r16b
export PATH=$NDKPATH:$PATH

编辑后 按 Esc 键 输入 :wq保存

然后刷新系统环境,使用 echo $NDK_PATH 命令查看 ndk 路径,若输出结果如下,则配置成功

vegen@vegen-virtual-machine:/lib/ndk/android-ndk-r16b$ source /etc/profile
vegen@vegen-virtual-machine:/lib/ndk/android-ndk-r16b$ echo $NDK_PATH
/lib/ndk/android-ndk-r16b

2. 编写 ffmpeg 配置脚本
vegen@vegen-virtual-machine:/lib/ffmpeg-3.3.9$ vim ffmpeg_build.sh

ffmpeg_build.sh

# 用于编译 android 平台的脚本
#!/bin/bash
. /etc/profile

# 定义几个变量
ARCH=arm
CPU=armv7-a
PREFIX=$(pwd)/android/$ARCH/$CPU
ANDROID_TOOLCHAINS_PATH=$NDK_PATH/android-toolchains/android-19/arch-arm
CROSS_PREFIX=$ANDROID_TOOLCHAINS_PATH/bin/arm-linux-androideabi-
SYSROOT=$ANDROID_TOOLCHAINS_PATH/sysroot

 build(){
        # 执行 .configure 文件
        ./configure --prefix=${PREFIX} \
        --enable-gpl \
        --disable-static \
        --enable-shared \
        --enable-small \
        --disable-programs \
        --disable-ffmpeg \
        --disable-ffplay \
        --disable-ffprobe \
        --disable-ffserver \
        --disable-doc \
        --arch=$ARCH \
        --cpu=$CPU \
        --cross-prefix=${CROSS_PREFIX} \
        --enable-cross-compile \
        --sysroot=$SYSROOT \
        --target-os=linux \
        --extra-cflags="-fpic" \

        # makefile 清除,就是执行了 makefile 文件里面的 clean 命令
        make clean
        # 运行 Makefile
        make
        # 安装到指定 prefix 目录下
        make install
        # make clean
}


# 执行 build 函数
build

ffmpeg 工程代码量很多,有时候我们只需要一些不太复杂的音视频处理,这时就可以有针对性需求地选择编译。

3. 修改 ffmpeg 的 configure 文件
vegen@vegen-virtual-machine:/lib/ffmpeg-3.3.9$ vim configure

在 configure 输入 /SLIBNAME_WITH_MAJOR= 进行搜索,按 n 查找到下面的代码段

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='$(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)'

保存退出后,需要安装 gcc 和 yasm

vegen@vegen-virtual-machine:/lib/ffmpeg-3.3.9$ sudo apt install gcc
vegen@vegen-virtual-machine:/lib/ffmpeg-3.3.9$ sudo apt install yasm

待安装完成之后,执行 如下命令

vegen@vegen-virtual-machine:/lib/ffmpeg-3.3.9$ sudo ./configure
4. 执行编译脚本
vegen@vegen-virtual-machine:/lib/ffmpeg-3.3.9$ ./ffmpeg_build.sh

至此,编译 ffmpeg 完成,若成功,你将看到 android 目录和如下 so 库,然后我们将需要的 so 库和 include 文件引入到我们的项目中就可以愉快地开发啦。

 android 目录

so 库

5. 后话

编译 ffmpeg 过程中,可能会遇到很多问题,读者需要检查代码有没有敲错,相关的程序有没有安装,如 Linux 基础欠缺的,需要读者自行去学习。如有疑问,可在下方评论反馈,后面将推出一些机遇 ffmpeg 的音视频处理文章,敬请期待。

Android音视频开发入门(6)Windows下编译FFmpeg4 平台具体信息开发者概述GitFFmpeg自动化测试环境。2. 在Windows10、NDK r20下编译FFmpeg在Windows下编译FFmpeg需要准备工具MSYS2和YasmMSYS2集成了 Pacman、MinGW-w64的CygwinYasm是一个汇编器。,下载对应的.exe文件,下载完后放入到 Windows\System32文件夹下就行了。至于265的可以考虑先装。在这个地方(使用WIN10编译)我踩坑无数,花了几天的休息时间终于编译出来了。 阅读详情

相关推荐

【Android音视频】自编译FFMpeg-kit添加硬件编码支持并升级FFMpeg版本

上次解决了FFMpeg-kit编译的问题,但直接编译出来是没有硬件编码支持的,只有软件编解码,软编特别特别慢。所以这次还得继续改代码,让它支持在安卓上使用硬件编码。

天枢破军的博客 1659

自己动手编译android ffmpeg

自己动手编译android ffmpeg

流星雨的博客 2463

FFmpeg 开发(01):FFmpeg 编译和集成

尽管 FFmpeg 功能强大,但是由于其采用的是带有传染性的 LGPL/GPL 开源协议,所以一些大厂基本上都是自己独立开发类似的音视频处理库,甚至在接口和组织模块上模仿 FFmpeg 。

字节流动 1万+

编译Android平台FFMPEG库

在宿主机上编译,在目标机上执行。从事嵌入式系统或者单片机朋友再熟悉不过了。所有的嵌入系统都是在PC机上编译(宿主机),在单板上执行(目标机)。也就是在一个平台上生成另一个平台上的可执行代码,再简单来说,就是在一个机器上生成一个程序,这个程序可以跑在另外一个机器上。因为PC上的环境和手机上的运行环境是绝然不同的,所以,交叉编译最重要的是,要配置好编译过程中使用到的相关的环境,而这个环境其实就是目标机器(比如Android手机)正在运行的环境。

lalala_hey的博客 2117

android-ffmpeg项目:Android NDK编译FFmpeg源代码指南

FFmpeg是一个强大的多媒体框架,用于处理几乎所有的音视频格式。其诞生于2000年,旨在为开发者提供一套可编程的命令行工具,用于记录、转换以及流化音频和视频数据。FFmpeg之所以在IT行业受到青睐,是因为它具备高度的灵活性和丰富的功能,能够满足从基础到复杂的多种媒体处理需求。Android NDK(Native Development Kit)是谷歌发布的一个工具集,它允许开发者使用C和C++语言编写性能密集型部分的Android应用。

weixin_33750664的博客 1461

【Android音视频开发】FFmpeg库编译详解(2022最新版)

前两篇文章分别介绍了音频和视频的编码原理,接下来进入开发阶段。进入到音视频开发阶段后,有个库是绕不开的,那就是有名的FFmpeg(读作ef ef em peg,也有人读作ef em peg)开源库,它十分强大,提供了很多功能API,包括但不限于:音视频重采样、音视频编码格式转换、音视频播放、素材(字幕等)添加、视频转场动画、音视频推拉流、录像等等,音视频开发过程中需要用到的功能它基本都有。这篇文章会就对FFmpeg库的编译进行详细讲解。

欢迎进入JesseAndroid的博客 9193

告别C盘爆红!手把手教你将WSL2下的Ubuntu 22.04完整迁移到D盘(附清理指南)

本文详细指导如何将WSL2下的Ubuntu 22.04从C盘无损迁移到D盘,包括导出备份、注销原系统、导入新位置等关键步骤,并提供迁移后的优化配置、开发环境衔接及长期维护技巧,帮助用户彻底解决C盘空间不足问题。

weixin_28698059的博客 472

基于Android平台的ffmpeg编译

前面介绍了Android jni 相关知识,但jni最终还是要调用的第三方的C/C++库,这里我们以ffmpeg为例,介绍第三方C/C++如何编译成android 版本。 一、基本原理 关于Android平台C/C++代码编译的方法: 自己开发的C/C++代码,直接在android studio开发和编译,与jni代码操作方法一致,jni本质就是C/C++代码,只不过调用关于jni的特殊函数,遵守JNI的某些规范而已。 第三代码。对应第三方代码,直接拷贝到 android studio 开发...

江海细流的专栏 2571

电子电器架构刷写方案——General Flash Bootloader

### 文章大体有如下内容: ### 1、简介 ### 2、刷写系统概述 ### 3、Flash Bootloader刷写流程 ### 4、Flash Bootloader架构介绍 ### 5、关于刷写的思考

Soly_kun的博客 2209

Python 爬虫实战:华尔街见闻精选文章爬取(反反爬 + 投资情绪分析)

Python 爬虫实战:华尔街见闻精选文章爬取(反反爬 + 投资情绪分析)

yansideyucsdn的博客 969

Android下编译FFmpeg

之前在android下编译过ffmpeg.由于ffmpeg和ndk之前的差异会导致编译不出来so文件。这里特地记录一下,ffmpeg版本为4.4.4,ndk版本为android-ndk-r19c。有时间再更新下其他ffmpeg版本从、记录下来。以上是编译ffmpeg android主要步骤.后续个人更新版本再作记录。以上仅为个人学习所用,如有侵权请邮箱联系1157301659@qq.com。如果提示无法执行,则先执行 sudo apt-get install yasm.1.修改configure文件。

心如止水 857

Pointnet++环境配置(Windows11和ubuntu)及训练教程

PS:前两行命令是数据处理的命令,主要是进行数据读取和生成相应的训练数据格式,在Ubuntu上是正常运行的,在Windows上运行会失败,无法生成训练用的数据格式,所以最好在Ubuntu上训练,如果一定要用Windows,可以ubuntu上生成数据格式在导到Windows上,数据生成不需要安装torch。通过anaconda配置的环境,在官网找的命令安装的,版本是2.1.0+cu118。训练命令:我使用的pycharm,直接在pycharm中打开终端,运行命令。Python版本:3.7。

AIcurator的博客 2558

自己编译android视频,Android 音视频开发之自己动手编译 FFmpeg

前言ffmpeg 一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,对于音视频领域,有着极为重要的地位。作为一名 Android developer,如要涉足音视频领域,编译使用 ffmpeg 是不可少的进阶旅程。下面带你一步步实现 ffmpeg 的编译,在此之前,需要准备具有 Linux 环境的系统,如 Ubuntu、Mac,可以弄一个云服务器,也可以装个虚拟机,读者自行斟...

weixin_42138545的博客 302

刚体转动欧拉方程:从理论到卫星姿态控制的实践

刚体转动欧拉方程是描述刚体旋转运动的基本动力学方程,在卫星姿态控制、机器人学、航空航天等领域有着广泛应用。本文将详细讲解欧拉方程的物理概念、数学推导、数值计算方法,并重点分析其在卫星姿态控制系统中的具体应用。

ScilogyHunter的博客 642

DOTS 性能基石:为什么传统 Unity 代码难以满足现代游戏需求?(DOTS 系列教程 · 第1篇)

本文探讨了Unity游戏开发中的性能优化问题,指出性能问题不应在最后才考虑,而应贯穿整个开发过程。文章分析了性能问题的三大表现(渲染开销、物理模拟、游戏逻辑),并解释了依赖硬件升级的不可行性。重点剖析了传统Unity代码性能低下的六大根源:垃圾回收卡顿、编译器优化不足、多核利用不足、数据结构和代码缓存不友好、过度抽象等问题。最后指出Unity项目中常见的反模式,如主线程垄断、内存碎片化等,为后续学习DOTS高性能架构解决方案奠定基础。

分享知识,拥抱变化 150

Android平台FFmpeg音视频开发深度指南

FFmpeg在Android开发中具有核心价值,提供了跨平台支持、完整功能链和灵活扩展性,帮助开发者突破系统原生API限制,实现专业音视频处理。环境搭建包括FFmpeg编译和Android项目集成,编译时需优化安全性和性能,项目集成则通过CMake配置。核心开发流程涵盖初始化、媒体文件解析和解码引擎优化,确保高效、安全地处理音视频数据。

健健的博客 2136

【Unity Shader】Special Effects(十二)Glow 外发光(UI)

Properties_GlowColor ("外发光颜色", Color) = (0, 0, 0, 1)_GlowIntensity("外发光强度", Range(0, 1)) = 1参数详解:_GlowColor:外发光颜色,指定外发光的显示颜色。_GlowIntensity:外发光强度,指定外发光的显示强度,0为不可见,1为最强强度。

神码编程 931

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

make -j12build这个shell脚本,大体上其实还是很容易懂的,比如分别用于禁止输出静态库,以及输出动态库;--arch--cpu用于配置输出的so库是什么架构的;--prefix用于配置输出的so库的存放路径。接下来重点来讲一下几个选项:target-os:在旧版本的FFmpeg中,对Android平台的支持并不是很完善,并没有android这个target,所以在一些比较老的文章中都会提到,编译Android平台的so库,需要对configure做以下修改,否则会按照linux。

2401_84149845的博客 989

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android开发-使用FFmpeg-Android进行音视频处理

随着移动互联网的飞速发展,音视频处理技术在现代应用中的地位越来越重要。FFmpeg 是一款强大的开源多媒体处理框架,广泛应用于视频编辑、转换等领域。本文将介绍基于 FFmpeg n4.0 版本编译运行在 Android 平台的音视频处理框架 FFmpeg-Android 。

_彼岸雨敲窗_的博客 2371

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: NDK 开发之使用 OpenCV 实现银行卡号识别
下一篇: 工厂设计模式在Android开发中的应用
胡小明同学
博客等级 码龄10年 35粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值