原标题:技术共享|安卓系统的完美转身 Android FFmpeg 编译和使用

2017年,智能手机修罗场,国产手机华为、OPPO、vivo、小米等纷纷出大招,跻身全球销量前10名单,华为推出荣耀旗舰版更是赢得人心。在9月苹果新品发布后,没有预料中的畅销,也侧面印证安卓系统不再对IOS系统俯首称臣,安卓在后期的市场也会更大。

下面为大家共享Android FFmpeg 编译和使用,技术干货,记得收藏!

下载源文件

以下两种方式:

1、登录“www.ffmpeg.org”官方网站,下载最新版本到本地;

2、使用命令

修改配置

打开configure文件,找到如下配置:

修改为:

编译FFmpeg

可以单独只编译FFmpeg,也可以加入x264一起编译。

1、单独编译FFmpeg

在FFmpeg目录下新建build_android_arm.sh文件,然后编辑如下内容:

在命令窗口中进入当前目录,执行编译脚本,会在配置的目录下生成 include和lib文件夹。其中lib里面存放的生成的so文件,include里面存 放的是相关头文件。

2、编译x264和FFmpeg

首先下载x264的包,官网地址:http://www.videolan.org/developers/x264.html。

下载FFmpeg

配置脚本

将x264解压后的文件夹移到FFmpeg目录下,创建build_android_ffmpeg_with_x264.sh,编辑内容如下:

3、脚本说明

NDK的安装目录:

NDK=/Users/zhouchaolin/software/NDK/android-ndk-r12b

Android支持最低版本以及编译so库的架构平台:

SYSROOT=$NDK/platforms/android-14/arch-arm/

如果想编译支持x86架构,选择arch_x86路径

指定编译所使用的工具链的目录:

TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64

配置编译结果的目录:

编译x264结果的目录

PREFIX=$DIR/android-lib

结果输出目录

OUT_PREFIX=$DIR/264fflib

配置最终打包结果:

正常的情况,编译会生成8个so库,为了后期引用导入方便,加入脚本的最后一段,将8个so库打包成一个ffmpeg.so

注意事项:

(1)可以自行根据需要去配置configure里面的选项,进编译的组件进行增减,通过--enable和--disable去控制

(2)编译的时候要注意配置的路径参数,特别是引用x264库文件,EXTRA_CFLAGS,EXTRA_LDFLAGS,$PREFIX/lib/libx264.a这几个配置路径一定要核实好,不然会报找不到相关文件的异常

(3)FFmpeg默认没打开RTSP模块,在编译脚本中打开相关组件,不然读取RTSP流时,会报“Protocol not found”

这样准备工作完成后,运行脚本,不出意外,FFmpeg的编译工作就算完成了,你在之前设置的输出目录下可以找到libffmpeg.so和include的文件。

FFmpege 使用

编译好了FFmpeg,我们需要验证下编译的结果,同时也要尝试下如何去使用它,下面我们写一个简单的例子去调用相关的接口

1、编写JNI代码

在java层,新建个FFmpegUtil类,申明native方法。

make project ,在build 目录下找到对应的FFmpeg.class,使用javah命令生成相应的.h文件

在工程src/main目录,NEW---Folder---JNI Folder,新建jni目录,将生成的.h文件拷贝到此目录,同时创建同名的.c文件,编辑如下:

2、JNI编译配置

将之前编译的so库和include文件拷贝到当前目录下,创建Android.mk文件和Application.mk 其中Android.mk配置如下:

Application.mk配置如下:

3、so库生成与引用

可以直接通过demo工程生成libFFmpegTest.so、libffmpeg.so

具体做法就是,在jni目录下,执行ndk-build命令,会生成jni统计的libs目录和obj目录,将libs目录直接引入工程或者拷贝到工程的相关路径,然后gralde配置引用

这样做有点麻烦,后期如果jni调试和更新需要来回倒腾,不太方便。

直接使用gradle配置

“使用 Android Studio 2.2 或更高版本与 Android Plugin for Gradle 版本 2.2.0 或更高版本时,您可以将 C 和 C++ 代码编译到 Gradle 与 APK 一起打包的原生库中,将这类代码添加到您的应用中。”

这是android studio用户指南里面介绍的,可以使用Cmake和ndk-build去编译原生代码。具体说明可以查看https://developer.android.com/studio/projects/add-native-code.html#create-sources

Cmake比较麻烦又难懂,我直接使用ndk-build,可以手动配置,也可以在工程里面添加生成,结果如下:

通过命令行编译然后拷贝so库到引用路径

这个方法我尝试过,没有成功,做法就是gradle里面配置task去编译和拷贝

4、java层的调用

so库的load

结果的展示

5、FFmpeg c层日志打印

Android adb logcat无法直接看到,使用av_log_set_callback(log_callback_android)

万里长征走完第一步,现在才刚开始。“物联科技”会不定期推送技术型干货贴,欢迎各位技术大牛围观点评...返回搜狐,查看更多

责任编辑:

ffmpeg android 编译选项,技术共享|安卓系统的完美转身 Android FFmpeg 编译和使用相关推荐

  1. android uiautomator 截屏,安卓系统手机用uiautomatorviewer.bat截图失败或者用adb截的图片打不开...

    安卓系统手机用uiautomatorviewer.bat截图失败或者用adb截的图片打不开 2020年07月23日 | 萬仟网IT编程 | 我要评论 很多没有root过的手机经常在使用uiautoma ...

  2. android 重新开始服务,安卓系统梦想城镇如何删除数据重新开始 | 手游网游页游攻略大全...

    发布时间:2015-12-05 黑莓手机一直使用的都是自家的操作系统,这次黑莓将会推出运行安卓系统的手机,这款黑莓安卓手机怎么样呢?99安卓网小编根据最新的消息显示黑莓安卓手机外形设计采用双曲面滑盖的 ...

  3. android版本怎么设置,安卓系统手机怎么用

    安卓系统手机怎么用 本文主要介绍android手机的简单设置及游戏和软件如何下载,希望通过本课程对广大的安卓新手们有所帮助 设置桌面 Android的桌面管理功能是十分强大的,不仅能够通过各种第三方主 ...

  4. Android 快速修复功能,安卓系统修复工具(ReiBoot for Android)v2.1.0免费版

    通过ReiBootforAndroid用户可以解决自己手机的大部分问题并将其快速回复到最佳状态,ReiBootforAndroid一款非常好用的安卓手机系统修复软件.像是黑屏.卡在下载界面或者顺序解体 ...

  5. android os感染病毒,安卓系统能感染win系统病毒吗?

    [分享交流] 安卓系统能感染win系统病毒吗? 12756 电梯直达 mate7迷123 登堂入室 发表于 2014-12-13 16:46:29 来自:浏览器 最新回复 2014-12-13 19: ...

  6. google android 市场份额,谷歌公布安卓系统市场占有率份额 碎片化依然严重

    ­ 近日,谷歌官方公布了8月份的安卓市场份额报告.根据最新的资料显示,目前市面上大部分的安卓手机,仍然搭载Android 6.0系统(棉花糖),市场占有率比上月略有提升,达到32.3%.排名第二的是A ...

  7. android打印doc文件,安卓系统APP打印开发实例.doc

    S&PS Solution Tips PAGE 5 | Page 主题 安卓系统APP打印开发实例 适用范围 带网口Honeywell系列 intermec系列 解决方案 当你想要在安卓DPA ...

  8. android 版本升级8.0,安卓系统怎么升级8.0版本 Android O正式版更新教程

    如今安卓系统的设备也越来越多了,智能手机也已经成为人们生活中必不可少的设备.而安卓系统也在不断的升级更新,如今不少小伙伴还不清楚安卓系统怎么升级8.0版本,今天UU就为大家带来了Android O正式 ...

  9. 安卓系统蓝牙服务com.android.bluetooth的使能

    蓝牙系统服务层的使能流程分析 蓝牙服务层的使能基础是其初始化完成,也就是AdapterService通过onBind()将AdapterServiceBinder上报给bind该服务的调用者.我们现在 ...

最新文章

  1. 比特币脚本及交易分析 - 智能合约雏形
  2. 异步备份和还原数据库:.NET发现之旅(六)
  3. 英文版Windows XP操作系统的中文支持设置
  4. tomcat 软连接
  5. python3.7怎么设置中文_解决 Bug · Python3.7.3官方文档 简体中文 · 看云
  6. oracle中制作副本,创建表的副本并在创建时为其提供约束
  7. java(18) - 枚举类型和静态导入
  8. 【LeetCode】【字符串】题号:*49. 字母异位词分组
  9. linux下编译yacc命令,Lex/Yacc的学习——《编译原理及实践》附录B tiny编译器源码在linux下编译实现...
  10. 深入浅出 — 数据分析
  11. IT项目管理的三个约束条件、五个实施步骤
  12. 数据结构c语言版ppt答案,《数据结构(C语言版)》习题答案.ppt
  13. 计算机科学与技术高校毕业生要求,计算机科学与技术专业 毕业要求(2016)
  14. 显示器和计算机主机的接口标准,显示器接口有几种 显示器各种接口知识扫盲 (3)...
  15. 用户名片 3:页面实现
  16. 【耀杨闯荡华儿街】(面试官)曹阿门:给我讲讲多线程;耀杨:md心态崩了~
  17. 对抛物线准线与焦点弦的思考与总结
  18. keepalived高可用(脑裂)
  19. IMP-00017 Oracle数据库imp命令导入时1659错误处理
  20. [软件人生]也谈谈支付宝五福

热门文章

  1. 1-appium-初识
  2. 购物车retrofit+ok+rxjava
  3. 一文教你轻松搞定 ANR 异常捕获与分析方法
  4. c语言课程设计计算器软件,C语言课程设计简单计算器程序.docx
  5. oracle 多列 累加,oracle 累加功能,累加百分比
  6. 修改msyql的my.ini文件后重启mysql服务,服务无法启动
  7. vue3项目的创建和git提交规范,eslint ,cz,hooks
  8. SiteSucker Pro Mac(Mac网站数据下载神器)
  9. k2p一直亮红灯搜不到信号_#苹果商店藏下载骗局#,苹果APPStore“绝地求生13天”背后的信号(ASOer必看)...
  10. 使用 SAP ABAP 代码生成 PDF 文件,填充以业务数据并显示在 SAPGUI 里试读版