阅读背景:

【分享】性能比肩美拍秒拍的Android视频录制编辑特效解决方案【1】

来源:互联网 

前言

本人接触Android的时间有限,如果您有更好的解决方案,欢迎吐槽。

众所周知,Android平台开发分为Java层和C++层,即Android SDK和Android NDK。常规产品功能只需要涉及到Java层即可,除非特殊需要是不需要引入NDK的。但如果是进行音视频开发呢?Android系统Java层API对音视频的支持在MediaCodec之前,还停留在非常抽象API的级别(即只提供简单的参数和方法,可以控制的行为少,得不到中间数据,不能进行复杂功能的开发,更谈不上扩展)。而在MediaCodec在推出之后,也未能彻底解决问题,原因有这些:1、MediaCodec出现的Android版本并不低,使用则无法兼容低版本机器和系统版本;2、由于Android的开源和定制特性,各大厂商实现的MediaCodec也不尽相同,也导致同一段代码A机器跑着是这个样,B机器跑着就是另一个样了。所以程序员童鞋们就把目光转向了NDK,但是NDK里面谷歌并没有提供什么关于音视频处理的API(比如解析生成文件,编解码帧),于是童鞋们又想着使用开源的C/C++框架,首当其冲的当然是最出名的ffmpeg、x264、mp3lame、faac这些了。问题又来了,ffmpeg最早对x86支持是最好的,arm平台或者mips平台支持就不这么好了(笔者调研ffmpeg2.0以后情况有所好转)。那就只能使用软解软编,速度跟不上是个什么体验亲们知道吗?举个栗子,假设要录制640x480的视频,音频视频全部使用软编码,x264如果纯软编码加上手机CPU的处理性能50毫秒甚至100毫秒一帧都说不定,总之就是慢,还要算上音频还要压缩编码。如果想录制25帧率的视频,一帧的编码时间是不能超过40毫秒的,否则速度就跟不上了,算上其他业务功能花的时间,这个时间起码要降到30毫秒以下,然后再使用多线程异步编码的方式优化一下应该勉强能达到边获取画面边生成视频文件。正是因为有这样那样的不方便,笔者才经过几个月的研究,找到了一个还不算太完美的解决方案供大家参考,本文将全面介绍各个环节的技术实现方案,最后并附上工程源码。顺便声明一下,笔者在进行这项工作之前Android开发经验基本上算是1(不是0是因为以前写过helloworld),但是C/C++,Java都已经掌握,还在ios上使用objc开发过项目,所以我想Android也差异不大,语言不一样,平台不一样,API不一样,系统机制不一样,其他应该就一样了。众所周知,




你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: