FFmpeg Android 学习(一):Android 如何调用 FFMPEG 编辑音视频
一、概述
在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'
下面主要介绍下该种方法的优缺点。
优点:
- 开发成本低,快速
- 学习成本低,只要掌握FFMPEG的命令调用即可
- 对一些简单的编辑操作,性能上没有太大额外的消耗
缺点:
- 支持库容量大,导致APK变大(可能要30M左右)
- 没法像NDK一样在源码层就组装成需求所需要的功能,而导致性能的额外消耗
- 不够灵活,可能会出现意想不到的错误。
- 开源库的维护不确定性
四、总结
对于在Android上使用FFMPEG的问题上,首先推荐使用NDK编译的方法。在时间不允许的情况下,可以使用开源库,当然必须忍受APK包变大这个问题。各位可以权衡自己的需求来做出选择。
FFmpeg Android 学习(一):Android 如何调用 FFMPEG 编辑音视频的更多相关文章
- [置顶] Android学习系列-Android中解析xml(7)
Android学习系列-Android中解析xml(7) 一,概述 1,一个是DOM,它是生成一个树,有了树以后你搜索.查找都可以做. 2,另一种是基于流的,就是解析器从头到尾解析一遍xml文件. ...
- Android多媒体框架总结(1) - 利用MediaMuxer合成音视频数据流程分析
场景介绍: 设备端通过服务器传向客户端(Android手机)实时发送视频数据(H.264)和音频数据(g711a或g711u), 需要在客户端将音视频数据保存为MP4文件存放在本地,用户可以通过APP ...
- Android——android学习(android目录与AndroidManifest解析)
res目录:存放android项目的各种资源文件 layout:存放界面布局文件 values:存放各种xml格式的资源文件 strings.xml:字符串资源文件: colors.xml:颜色资源文 ...
- Android学习路径——Android的四个组成部分activity(一)
一.什么是Activity? Activity简单的说就是一个接口.我们是Android手机上看到的每个界面就是一个activity. 二.Activity的创建 1.定义一个类继承activity, ...
- FFmpeg Basics学习笔记(1)ffmpeg基础
1 FFmpeg的由来 FFmpeg缩写中,FF指的是Fast Forward,mpeg是 Moving Pictures Experts Group的缩写.官网:ffmpeg.org 编译好的可执行 ...
- Android学习——在Android中使用OpenCV的第一个程序
刚開始学习Android,因为之前比較熟悉OpenCV,于是就想先在Android上执行OpenCV试试 =============================================== ...
- Android学习十---Android Camera
Android camera用来拍照和拍摄视频的先看一下最后实现的效果图 最后的效果图 一.准备 在你的应用程序上使用android拍照设备,需要考虑以下几个方面 1. 是否是 ...
- 【Android学习】android:layout_weight的用法实例
对于android:layout_weight的用法,用下面的例子来说明: <LinearLayout xmlns:android="http://schemas.android.co ...
- Android 学习之--android多线程断点下载
我们平时都用"迅雷"下载软件,当下载到一半的时候突然断网,下次开启的时候能够从上次下载的地方继续下载,而且下载速度很快,那么这是怎么做到的呢! 其实它的“快”其实就是多线程的下载实 ...
随机推荐
- nohup python 没有print输出
nohup python -u crake.py >run.log 2>&1 &
- mactype配置
配合 Firefox 小小设置(改了好多配置,似乎主要是修改了渲染的核心?是叫这个么?把那个Siera?删掉了,就好了)后,效果极佳,我在原有配置的基础上,加大了字重,显示更粗,更明显. 这里是原配置 ...
- Codeforces 766D. Mahmoud and a Dictionary 并查集 二元敌对关系 点拆分
D. Mahmoud and a Dictionary time limit per test:4 seconds memory limit per test:256 megabytes input: ...
- eclipse配置逆向工程
eclipse单行注释:ctrl + shfit + c 或者 Ctrl+/: 添加//注释 快速查找某个类:Ctrl+Shift +T 查找这个类的子类是ctrl+t eclips ...
- 一个小工具,利用php把指定目录文件递归上传到阿里云OSS
cp2oss(_GALLERY_DIR); function cp2oss($directory) { $mydir = dir($directory); while($file = $mydir-& ...
- Linux 下 Samba 服务器搭建
初学,分享 环境和条件--- 虚拟机:VMware虚拟机 系统:Linux ubuntu 4.4.0-31-generic #50~14.04.1-Ubuntu SMP Wed Jul 13 01:0 ...
- Jquery源码学习日记(1)
https://jquery.com/ 最新源码下载链接:jquery3.0 135-231定义了一些jquery的通用方法 233-301行定义了一些继承的方法 302-477定义了一些工具类方法 ...
- LoadRunner简单介绍----性能自动化测试工具
在做性能测试中,我认为技术可以说是武功心法,工具则是一把利剑,有一把好的利剑可以帮助自己更好的完成性能测试工作.在这里简单介绍一下LoadRunner,带大家一起来认识一下这把尚方宝剑. 一.性能测试 ...
- Java————迷宫问题
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线. package algorithm_java; import java. ...
- arduino 引脚作为输入时的不稳定 解决方案
问题描述: arduino引脚作为输入状态时,高低电平不稳定 出现的原因: arduino 引脚为输入时,引脚电平处于悬空状态,容易受外部电荷信号等干扰 解决的方案: 再程序配置为输入状态后 使用下拉 ...