问题描述
在做视频录制时,采用MediaCodec编码、MediaMuxer来合成MP4,发现在某些手机上,向MediaMuxer写入三、四帧视频画面后再调用writeSampleData方法就阻塞住了,也不报错也不返回任何东西就一直阻塞着。
后来通过打印log发现,原来是编码后的视频数据的时间戳有问题,时间戳错乱了,错误的时间戳顺序:444087 、447108、441066、450129 。正常的时间戳应该是有序且升序排序的。既然找到原因就好解决问题了。
解决方案
方案1:
记录上一次的时间戳,并与当前的时间戳进行比对,发现小于上一次的时间戳则丢弃当前数据进行下一帧比对
方案2:
找到导致时间戳错乱的根本原因,原来是在配置MediaCodec参数时在某些手机上不适用导致的,后来去掉一些配置参数就没有出现时间戳错乱的问题了,具体是那些配置参数不适用需要根据具体情况来定。