一、概述

在Android开发中,我们对一些音视频的处理比较无力,特别是编辑音视频这部分。而且在Android上对视频编辑方面,几乎没有任何API做支持,MediaCodec(硬编码)也没有做支持。那怎么办呢?在FFmpeg命令行工具学习(三):媒体文件转换工具ffmpeg中我们知道ffmpeg命令行能够编辑音视频。感觉对于编辑音视频这方面的需求貌似只能使用FFMPEG来实现了(肯定还有别的办法,但是FFMPEG绝对是最普遍的解决方案)。然而在Android上使用FFMPEG也不是一件容易的事情,比较正统的办法就是使用NDK来变异,但是NDK编译的成本实在是太高,而且开发难度极大。本文提供了一个比较靠谱的方法来实现在Android上使用FFMPEG编辑音视频。

二、NDK编译

虽然使用NDK编译是难度极高的方案,但是得说明一下NDK编译FFMPEG才是最合适与优秀的解决方案。

介绍下NDK编译FFMPEG所需要具备的要求:

  • C语言
  • 熟练地使用NDK
  • 了解FFMPEG源码,至少源码中的API得熟悉
  • 音视频知识

有了这些技术知识,那么你就能可以开始尝试用NDK编译FFMPEG了。

三、使用开源项目(WritingMinds/ffmpeg-android-java)

首先上链接 https://github.com/WritingMinds/ffmpeg-android-java

具体的使用方法在GitHub上已经有比较详细的介绍了,不作过多赘述了。

在自己项目中使用只要在gradle中引用如下类库即可。

compile 'com.writingminds:FFmpegAndroid:0.3.2'

下面主要介绍下该种方法的优缺点。

优点:

  1. 开发成本低,快速
  2. 学习成本低,只要掌握FFMPEG的命令调用即可
  3. 对一些简单的编辑操作,性能上没有太大额外的消耗

缺点:

  1. 支持库容量大,导致APK变大(可能要30M左右)
  2. 没法像NDK一样在源码层就组装成需求所需要的功能,而导致性能的额外消耗
  3. 不够灵活,可能会出现意想不到的错误。
  4. 开源库的维护不确定性

四、总结

对于在Android上使用FFMPEG的问题上,首先推荐使用NDK编译的方法。在时间不允许的情况下,可以使用开源库,当然必须忍受APK包变大这个问题。各位可以权衡自己的需求来做出选择。

FFmpeg Android 学习(一):Android 如何调用 FFMPEG 编辑音视频的更多相关文章

  1. [置顶] Android学习系列-Android中解析xml(7)

    Android学习系列-Android中解析xml(7) 一,概述 1,一个是DOM,它是生成一个树,有了树以后你搜索.查找都可以做. 2,另一种是基于流的,就是解析器从头到尾解析一遍xml文件.   ...

  2. Android多媒体框架总结(1) - 利用MediaMuxer合成音视频数据流程分析

    场景介绍: 设备端通过服务器传向客户端(Android手机)实时发送视频数据(H.264)和音频数据(g711a或g711u), 需要在客户端将音视频数据保存为MP4文件存放在本地,用户可以通过APP ...

  3. Android——android学习(android目录与AndroidManifest解析)

    res目录:存放android项目的各种资源文件 layout:存放界面布局文件 values:存放各种xml格式的资源文件 strings.xml:字符串资源文件: colors.xml:颜色资源文 ...

  4. Android学习路径——Android的四个组成部分activity(一)

    一.什么是Activity? Activity简单的说就是一个接口.我们是Android手机上看到的每个界面就是一个activity. 二.Activity的创建 1.定义一个类继承activity, ...

  5. FFmpeg Basics学习笔记(1)ffmpeg基础

    1 FFmpeg的由来 FFmpeg缩写中,FF指的是Fast Forward,mpeg是 Moving Pictures Experts Group的缩写.官网:ffmpeg.org 编译好的可执行 ...

  6. Android学习——在Android中使用OpenCV的第一个程序

    刚開始学习Android,因为之前比較熟悉OpenCV,于是就想先在Android上执行OpenCV试试 =============================================== ...

  7. Android学习十---Android Camera

    Android camera用来拍照和拍摄视频的先看一下最后实现的效果图             最后的效果图 一.准备 在你的应用程序上使用android拍照设备,需要考虑以下几个方面 1. 是否是 ...

  8. 【Android学习】android:layout_weight的用法实例

    对于android:layout_weight的用法,用下面的例子来说明: <LinearLayout xmlns:android="http://schemas.android.co ...

  9. Android 学习之--android多线程断点下载

    我们平时都用"迅雷"下载软件,当下载到一半的时候突然断网,下次开启的时候能够从上次下载的地方继续下载,而且下载速度很快,那么这是怎么做到的呢! 其实它的“快”其实就是多线程的下载实 ...

随机推荐

  1. linux回顾

    linux内容回顾: centos6.9  ubuntu12  麒麟linux  suse(德国linux)  depin xshell(连接工具) vmware workstation(个人学习) ...

  2. BIF

    list()把一个可迭代对象转化为列表 tuple()把一个可迭代对象转化为元祖 str()把参数对象转化为字符串 len()返回参数的长度 max()返回序列或者参数集合中的最大值 min()返回序 ...

  3. vmware 挂起后不能恢复

    报错:未能锁定主内存文件,还原虚拟机状态时出错 虚拟机目录下有一个文件夹,xxx.vmem.lck,里面的lck文件是很久以前的,把它删掉重新恢复就可以了.

  4. EL表达式、JSTL标签库

    一.EL(Expression Language)表达式 语法结构:${var} 若要停用对EL表达式的评估的话,需要使用page指令将isELIgnored属性值设为true: <%@ pag ...

  5. VUE(相关简介及初始)

    1.什么是vue Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层, ...

  6. Java高级应用简笔

    1. Annotation 使用范围: package, class, method, field 常用: @Override, @Deprecated, @SuppressWarnings 自定义注 ...

  7. java 日志体系(四)log4j 源码分析

    java 日志体系(四)log4j 源码分析 logback.log4j2.jul 都是在 log4j 的基础上扩展的,其实现的逻辑都差不多,下面以 log4j 为例剖析一下日志框架的基本组件. 一. ...

  8. MySQL学习入门安装和启动及常见问题解决方法(一)

    1.下载MySQL 官网地址:https://www.mysql.com/downloads/ 2.个人学习使用,只有下面这个是免费的 3.下载之后解压到目录中,并加入环境变量,如下 创建MYSQL_ ...

  9. Finance版本计划

    2.0.0.3 1. 支持自定义报表 提供页面自定义报表,根据存储过程,前端页面传参调用 根据存储过程数据集控制简单样式(数字靠右,列宽) 2. 支持报表公式可修改 定义公式规则(文档) 2.0.0. ...

  10. java中的 java.util.concurrent.locks.ReentrantLock类中的lockInterruptibly()方法介绍

    在java的 java.util.concurrent.locks包中,ReentrantLock类实现了lock接口,lock接口用于加锁和解锁限制,加锁后必须释放锁,其他的线程才能进入到里面执行, ...