OpenCore音视频同步分析

    OpenCore作为Android系统的多媒体框架,在音视频编解码及播放功能上起着至关重要的作用。OpenCore的音视频同步相对来说比较简单。在播放引擎初始化的时候,会在ParserNode里创建一个时钟,这个时钟里有两个时间,一个是绝对时间,即系统时间,另一个是相对时间,即相对于播放起始点的时间。系统时间是一直在走的,而相对时间跟绝对时间的映射并不是一成不变的。比如说播放暂停时,相对时间不走了,而绝对时间还在走,这样当恢复播放的时候,二者之间的映射关系要重新设置。还有做Seek的时候也会发生变化。

    时钟是以音频的播放为起始点的,意思就是说,当音频解完一个数据包,通过解码Node和输出Node之间的Port将数据发送到输出Node,输出Node又写入AudioTrack的缓冲区时,时钟才开始启动,由于时钟的精度有限,累计一段时间会有误差,当误差累积到一个阈值时,时钟会校对一次,设置成音频的PTS。视频解完码之后会将视频的PTS同这个时钟的相对时间比较,如果比时钟小说明视频慢了,如果差值在50ms之内,输出Node还是会将视频数据发送到SurfaceOutput输出显示,如果大于50ms就丢弃视频数据。反过来,如果PTS大于时钟时间,说明视频提前了,要等一段时间才能播放,这时就启动一个定时器,等到与pts时间一致了才送去播放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值