android不依赖系统API录制小视频mp4 解决android API碎片化兼容性问题

    先说下,为什么不适用简单便捷的系统API去录制mp4呢。

    使用android系统api常用的方案有,MediaRecoder,或者MediaCodec和MediaMuxer来完成,但是这样做的时候,大家可能会发信,由于android系统层各个厂商的高度定制,很难保证这些api可以稳定的工作。从而要写很多适配特殊设备的代码,即便这样,还是难以保证稳定性,经常会遇见某款手机调用api时崩溃,或者录制的mp4文件不能播放的问题。所以,如何不依赖这些API来完成mp4文件的录制呢,就是本文要介绍的内容。

    解决方案:使用mp4v2及x264开源库的native方案,将camera回调的视频数据先通过x264编译位h264帧,然后通过mp4v2将帧装入mp4的box中,通过AudioRecord回调的PCM音频数据,native库进行编码,放入mp4中。

    可能有些人会说,纯软件方案虽然兼容性得到了保证,但是编码速度肯定没有MediaCodec的硬编码块,从而性能难以保证。软编码确实没有硬编码效率高,但是以目前市面上千元机的性能来看,软编码720P甚至1080P的视频,也会非常流畅。而且,目前很多大厂的小视频方案也都是基于纯软件的方式去做的。

   如何从camera获取YUV及如何使用AudioRecoder获取饮品,因为比较简单,就不写了。

   YUV如何编码成h264,请看我的其他文章,

软编码代码仓库:https://github.com/sszhangpengfei/android_x264_encoder

硬编码代码仓库(兼容android6.0以上有问题有时间会修改):https://github.com/sszhangpengfei/MediaCodecEncodeH264

   mp4协议的具体规范也不多说了,估计大家也不爱看,如果想了解的可以网上搜索。


   So , Talk is cheap , show me the code  

https://github.com/sszhangpengfei/AndroidMp4v2

   (native层的代码,整理后也会开源出来)

你可能感兴趣的:(android不依赖系统API录制小视频mp4 解决android API碎片化兼容性问题)