美文网首页
播放器缓冲、同步策略

播放器缓冲、同步策略

作者: 野码道人 | 来源:发表于2020-01-02 20:58 被阅读0次

    1、缓冲策略

    ffmpeg有自带缓存区,由于不对外暴露,无法很好的控制,经常出现播放花屏问题,当然我们可以修改源码,但通常做法是,忽略ffmpeg本身缓存区,自己实现缓冲队列,通常播放器底层会有两个队列解码队列(压缩数据) 渲染队列(非压缩数据)由于渲染队列通常有3帧左右的缓存就够了,所以当我们计算播放器的downloadSize的时候,通常说的是解码队列的数据总和,当解码队列为空的时候向上层抛开始缓冲消息,渲染器停止消费,为了播放器顺畅播放(减小卡顿率)当队列里有一定数据的时候抛出缓冲结束消息,渲染器再开始消费

    点播:

    点播场景一般会在端上架一套缓存系统,我们称之为localserver,作用是实时缓存播放的数据,省端上的流量,由于内存原因播放器会设置解码队列最大值,通常设置为15~20s,即当到达门限的时候不在调用av_read_frame(fmtCtx, &pkt)

    直播:

    直播场景由于数据是实时产生,通常不会有很多冗余数据,所以解码队列不会设置门限

    2、同步

    • 什么是同步播放?
    • 为什么会有不同步现象?
    • 如何实现同步播放?
    • 同步所带来的的问题
    • 同步策略
    • 什么是同步播放?

    不同媒体流按照时间戳对齐顺序播放

    • 为什么会有不同步现象?

    点播场景媒体文件容器的格式中音视频流并不是严格顺序存储,直播场景采集端音视频不均匀等原因都会导致不同步问题

    • 如何实现同步播放?

    由于人体对声音更加敏感,即音频稍有不连续就会被感知,所以音频需要连续播放,视频同步到音频,算法写在视频渲染线程里,核心逻辑实现了音视频同步,视频帧率控制,通过计算Apts、Vpts之间的差值动态调整视频渲染的sleepTime,A-V绝对值控制在60ms以内就能达到同步,帧率控制比较简单,就是根据fps控制两次渲染的时间间隔

    • 同步所带来的的问题

    同步会造成延时,由于按音频进行同步,当音频帧间隔较大的时候会造成视频过多堆积,当音频时间戳不连续的时候会造成视频跳帧,因此保证音视频打上正确的时间戳和音视频均匀尤为重要

    • 同步策略

    播放器一会有三种同步模式:流畅模式 低延时模式 智能追帧模式

    流畅模式:即播放器不丢帧、不追帧,特点是延时高,卡顿率低

    低延时模式:丢帧,特点是延时很低可以控制在1秒以内,但是卡顿率会高些

    智能追帧模式:不丢帧、追帧,特点是延时稍微高、卡顿率稍微低些

    相关文章

      网友评论

          本文标题:播放器缓冲、同步策略

          本文链接:https://www.haomeiwen.com/subject/poxaoctx.html