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

2 篇文章 0 订阅
1 篇文章 0 订阅

    先说下,为什么不适用简单便捷的系统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层的代码,整理后也会开源出来)

   

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值