您的位置:首页 > 移动开发 > Android开发

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

2016-09-12 18:57 218 查看
上一篇文章是初步接触Andorid多媒体开发时,以使用纯开源的方式实现的基础效果,效率上有很大问题。经过半年多的继续学习,解决了其中部分有效率问题的地方。

(1)编解码部分

编解码部分之前文章采用的X264+FFMPEG的开源方案,而继续学习之后,找到了android上特有的实现方案。

版本<4.4:x264+ffmpeg  or 私有API(libstagefright.so)。

版本=4.4:jni反调android.media.MediaCodec or 或者在java层开发。

版本>4.4:NdkMediaCodec(android.media.MediaCodec 的 jni接口)。

(2)AAC更优开源方案

AAC开源方案FDKAAC一直在更新,效率有提升,而faac早就不更新了。so...你懂的。

AAC也可以使用MediaCodec或者NdkMediaCodec

(3)OpenGL之framebuffer数据的回读

GLES版本<3.0:使用glReadPixels 或者 EGLImageKHR(eglCreateImageKHR,glEGLImageTargetTexture2DOES)

GLES版本=3.0:Pixel Pack Buffer + glMapBufferRange。

Android版本>=4.2:还有一个android平台化的回读FrameBuffer的方案,那就是新建SurfaceTexture和Surface,然后新创建一个OpenGL Context,一比一再渲染一次,即可将FrameBuffer渲染到这个SurfaceTexture上面,surface还可以作为编码器的输入。这样不仅可以快速从渲染结果传递数据到编码器,还能实现跨线程传递纹理数据,属于android平台本身提供的功能,非opengl自带能力。之所以是4.2,是因为SurfaceTexture在4.2以后才基本完善,之前各种不稳定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息