MediaCodec编码后视频时长不正确的问题

使用MediaCodec对相h机数据进行编码,存储为h264文件之后发现播放的视频长度与实际相比或变长或变短(跟机型有关高端手机会变长)。

尝试在初始化时改变帧率:mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, mFrameRate);

或者在编码时对presentationTimeUs时间戳做调整:mMediaCodec.queueInputBuffer(int index, int offset, int size, long presentationTimeUs, int flags)都不能解决。

经查发现原因及解决方案如下:

原因:

https://stackoverflow.com/questions/36114808/android-setting-presentation-time-of-mediacodec
这是stackoverflow上的解释,简单来说由于输出的是纯H264的文件,是没有时间戳概念的,就是一堆流文件,所以如果手机配置低的话,由于编码时间过长(大于两次帧刷新间隔的话),会导致很多帧数据丢掉,所以最终的流文件播放出来就会短。反之高端手机由于处理时间短而且相机帧率又高的话就会导致播放时间变长。

解决方案:
1、使用MediaMuxer即混合器进行时间戳对齐;
2、把每一帧相机数据都存储在一个池子里,每帧都不遗漏,编码时每次去池子里取;这样的缺点是,由于时间差会导致池子里数据会越来越多,在点击“录制结束”时池子中的很多数据其实还没取完,即编码要在录制结束操作之后很长时间才完成。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值