基于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 开发不太现实,因为这些第三方代码可能非常庞大,而且依赖很多其他库,其他库又依赖其他库,最通用的解决的方案是利用Android NDK的工具链进行交叉编译。
交叉编译:在宿主机上编译,在目标机上执行。从事嵌入式系统或者单片机朋友再熟悉不过了。所有的嵌入系统都是在PC机上编译(宿主机),在单板上执行(目标机)。而Android系统的手机,平板,电视等本身就是一个带Linux内核的嵌入系统。所以我们在Linux PC机上利用Android NDK的工具链编译C/C++代码生成一个so供jni调用就显得更通用更自然的做法。
二、认识Android的交叉工具链
交叉工具链
这个是一个经典的交叉工具链,bin目录是二进制工具。包含常用Android支持的各硬件平台的编译器,链接器,readelf,nm,skip,ar,objectdump,ldd等。
二进制工具
值得关注的Android NDK里面编译器,不再是传统的gcc,g++编译器,考虑编译效率,ndk已经将编译器切换到clang,clang++编译器。sysroot是一个交叉工具链的典型根文件系统,它包括编译所引用的头文件,库(C/C++库,其他函数库等)。
工具链中的头文件与库文件
由此可见,ndk编译Android的 so库本质就是使用交叉工具链交叉编译,与常规的嵌入系统开发流程没有啥区别。
三、编译基于andorid的ffmepg的库
准备unix环境(Linux系统,mac系统,cygwin等),本文编译环境为linux 系统。
1、下载Linux版本的Android NDK
下载地址:https://developer.android.google.cn/ndk/downloads
2、下载ffmpeg
下载地址:http://www.ffmpeg.org/download.html
3、编写编译脚本
编译脚本的基本思路:配置交叉编译相关的变量,在configure生成makefile时指定交叉编译工具链来编译,而不是默认采用宿主机的自带的gcc来编译(如不是自动configure生成的makefile,可以直接修改makefile的工具链来编译)。我们可以将配置和编译写成一个ffmpeg_build.sh脚本。
4、进入ffmpeg根目录采用ffmpeg_build.sh编译即可
chmod +x ffmpeg_build.sh //修改可执行权限
./ ffmpeg_build.sh //执行编译
5、生成的android 版本的so库如下:
交叉编译生成的ffmpeg库
四、总结
以上就是关于交叉编译ffmpeg生成Android C/C++的so库的完整步骤,更多更新信息请关注微信公众号:AV_Chat
基于Android平台的ffmpeg编译相关推荐
- 使用NDK20编译Android平台的ffmpeg
使用NDK编译Android平台的ffmpeg 编译环境 安装 编译 避坑 如何添加h264支持 编译环境 注意选择Linux版本的包下载 Ubuntu 16 下载 ndk20 下载 ffmpeg4. ...
- 基于NDK编译Android平台的FFmpeg动态库
需求 FFmpeg在Linux平台(如Ubuntu)上的支持已经比较完善了,如前述文章介绍 http://blog.csdn.net/ericbar/article/details/73702061, ...
- 基于Android平台的流媒体播放器的设计
from: 基于Android平台的流媒体播放器的设计 1引 言 随着移动通信技术和多媒体技术的迅速发展,融合手机.网络.多媒体技术为一体的视频监控技术也有了长足的进步,通过移动通信网络提供流媒体服务 ...
- YUVPlayer: 基于Android平台的YUV视频原始数据播放器
基于Android平台的YUV视频原始数据播放器 编译环境 FFmpeg版本: 4.2.2 NDK版本:r17c 运行环境 x86(模拟器) arm64-v8a(64位手机) 功能点 从文件中读取YU ...
- 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...
- android app攻击与防范论文,基于Android平台的应用程序安全保护研究与应用
摘要: 随着Android操作系统的广泛使用和移动互联网时代的到来,Android系统的安全问题也不断出现,给用户和开发者造成了许多困扰.Android应用程序面临着知识产权被侵犯.被二次打包.应用程 ...
- 基于android平台的语音机器人服务娱乐系统
分 类 号:TP311 学校代码:11460 学 号:10130920 本科生毕业论文 基于android平台的语音机器人服务娱乐系统 Robot Entertainment Service Syst ...
- android手势识别国内外研究现状,基于Android平台的视觉手势识别研究
摘要: 本文研究基于Android平台的视觉手势检测.手势分割和识别技术,实现了在Android平台上对规定的六种静态手势的识别,为Android平台的人机交互应用提供了新的技术手段. 首先,本文采用 ...
- android 流播放器开发,GitHub - youcoding98/FastVideo: 基于Android平台的移动流媒体播放器的开发...
基于Android平台的移动流媒体播放器的开发 主页界面如下 第一部分 课题相关介绍 与普通播放器相比,流媒体播放器最主要的不同点在于其能够实现实时的视频播放,用户可以实现边加载边播放,不需要一次全下 ...
最新文章
- Reg Infomation
- 计算机中位运算的一些性质与技巧
- linux rpm mysql mysql_config,Linux CentOS6 mysql rpm安装
- php no route to host,java.net.NoRouteToHostException: No route to host解决方法
- python中如何调用类takes no arguments_关于python中的 take no arguments 的解决方法
- VS各种工程文件说明
- Excel中的变量 「 Ctrl + F3 」 查看
- 如何打造领英朋友圈_领英点赞,请摆好姿势!
- python学习 数据类型之序列
- php sockets有什么用,PHP中Sockets与流有什么关系啊!!!!!
- 【VC++类型转换】CString和System::String类型的转换
- C语言volatile关键字
- win7 蓝牙4.0 ble驱动_Android FrameWorkamp;HAL视频最新进度: 蓝牙更新6节(更新时间2019年3月27日)...
- 矩阵快速幂 斐波那契数列
- Windows系统备份
- 微信公众号如何推广自己的小程序以及操作步骤
- 一款专为APP设计的后台管理系统平台
- 系统,工具,源码,语言组成的数字世界-2021-
- 如何将docx文本转换成使用微信小程序rich-text能编译的格式
- 内分泌6项检查费用_内分泌6项检查费用是多少 详解内分泌6项检查是什么