查看: 131|回复: 0

基于Android平台的ffmpeg编译

[复制链接]
  • TA的每日心情
    奋斗
    2022-7-25 00:26
  • 签到天数: 1 天

    [LV.1]初来乍到

    5万

    主题

    5万

    帖子

    16万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    167889
    发表于 2022-9-2 13:57:16 | 显示全部楼层 |阅读模式

    前面介绍了Android jni 相关知识,但jni最终还是要调用的第三方的C/C++库,这里我们以ffmpeg为例,介绍第三方C/C++如何编译成android 版本。

    一、基本原理

    关于Android平台C/C++代码编译的方法:

    1) 自己开发的C/C++代码,直接在android studio开发和编译,与jni代码操作方法一致,jni本质就是C/C++代码,只不过调用关于jni的特殊函数,遵守JNI的某些规范而已。

    2) 第三代码。对应第三方代码,直接拷贝到 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的工具链来编译)。可以将配置变量,configure工程,make写成一个shell脚本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

    回复

    使用道具 举报

    懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    客服QQ/微信
    921439866 周一至周日:09:00 - 21:00
    致力打造互联网创业第一品牌,学习网上创业赚钱,首选泓嘉网络创业,值得信赖! 泓嘉网络科技 版权所有!

    本站内容均转载于互联网,并不代表泓嘉网立场! 拒绝任何人以任何形式在本站发表与中华人民共和国法律相抵触的言论!。

    信息产业部备案号 豫ICP备2022016396号-1

    QQ|免责声明|广告服务|手机版|小黑屋|泓嘉网创 ( 豫ICP备2022016396号-1 )|网站地图

    GMT+8, 2024-12-22 19:59 , Processed in 0.063208 second(s), 25 queries .

    快速回复 返回顶部 返回列表