Android录屏并利用FFmpeg转换成gif(三) 在Android中使用ffmpeg命令

本文介绍如何在Android应用中实现录屏并利用FFmpeg将mp4转换为gif。分为录屏和利用FFmpeg转换两个部分,重点讲述在Android中使用ffmpeg命令的流程,包括将编译好的FFmpeg库集成到app,编写java接口和C代码来执行ffmpeg命令,以及解决集成过程中的问题。提供完整源码和作者联系方式。
摘要由CSDN通过智能技术生成

Android录屏并利用FFmpeg转换成gif(三)

写博客时经常会希望用一段动画来演示app的行为,目前大多数的做法是在电脑上开模拟器,然后用gif录制软件录制模拟器屏幕,对于非开发人员来讲这种方式还是比较困难的。本来我以为应该也有能直接在手机上录屏并生成gif文件这样的app,下载一个这样的APP来录gif要方便得多。结果发现目前几乎没有此类APP,我就想能不能自己写一个,然后查了查资料,感觉应该能做出来,于是就撸起袖子干起来了。总的来讲要实现这个功能可以分成两个部分(当然,如果有更好的实现方式欢迎大家提出来,谢谢!):

  1. 录屏,生成mp4文件
  2. 利用ffmpeg开源软件将mp4转换成gif

第一点比较容易实现,已有现成的开源代码供参考。难点在第二点,涉及到NDK开发相关的知识,及FFmpeg的集成,这方面知识我之前从未接触过,还是比较有挑战性的。

功能虽然很简单,但要讲解起来感觉还是要费点篇幅的,所以我分成了4篇文章来介绍,分别是:

  1. Android录屏并利用FFmpeg转换成gif(一) 录屏,讲讲怎样录屏生成mp4文件

  2. Android录屏并利用FFmpeg转换成gif(二) 交叉编译FFmpeg源码,说说如何根据我们的需求裁剪FFmepg并编译出可在android下运行的so包

  3. Android录屏并利用FFmpeg转换成gif(三) 在Android中使用ffmpeg命令,说说如何在Android中使用ffmpeg命令,简化C代码的编写难度

  4. Android录屏并利用FFmpeg转换成gif(四) 将mp4文件转换成gif文件,将2、3两步生成的so文件集成到android工程中,实现将mp4文件转换成gif文件,完成最终的工程。

本篇介绍如何将已经交叉编译好的FFmpeg相关的so包集成到app中来,至于so包是怎么编译的,请参看 Android录屏并利用FFmpeg转换成gif(二) 交叉编译FFmpeg源码。so包的集成流程也简单,遵循一般的NDK开发流程就可以了,不过说起来简单,做起来还是有不少细节要注意的,我就在集成的时候搞了很久才搞成功。大概有以下几个步骤:

  1. 把交叉编译FFmpeg源码生成的7个so文件拷过来

  2. 写一个带native方法的java类,作为调c代码的接口,并在该方法中传入字符串数组类型的ffmpeg命令。

  3. 写一个实现native方法的C类,在该类里调FFmpeg.c类中的main方法,并将从java传入的ffmpeg命令传给main方法,从而达到执行ffmppeg命令的目的。其中FFmpeg.c这个类是从ffmpeg源码中拷过来的,还关联到几个其它的c文件及头文件,都是要从ffmpeg源码中拷过来,就是这些文件在编译的时候老是报错花了我很多时间。

  4. 再就是写一个CMakeLists.txt文件,用来规定cmake如何进行编译。里面的内容主要包括指定引用的so包的路径,头文件的路径,要编译的源文件的路径等等

  5. 最后就是在app目录下的build.gradle文件中对NDK编译做点配置,等下会详细说

大概就这么个流程吧,顺利的话做完这些后就能把工程跑起来了,但是,但是,但是一般都没那么顺利的,嗷。。。

下面就按照以上几个步骤详细地挨个介绍一下,并将我遇到问题的地方指出来,避免再走弯路。

2.1 拷贝FFmpeg相关的so包

在main目录下新建jniLibs/armeabi-v7a目录,然后将

libavutil-55.so

libavcodec-57.so

libavformat-57.so

libavdevice-57.so

libswre

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值