• 【音视频】ffplay解析-音视频同步


    音视频同步

    主要解析:以音频为基准,让视频同步音频


    思路

    • 视频慢了则丢掉部分视频帧(视觉->画⾯跳帧)

    • 视频快了则继续渲染上⼀帧


    具体实现

    一个国际标准:音频帧-视频帧时间戳的差值在-100ms~25ms内流畅
    1.差值=音频播放时间戳-视频播放时间戳----diff=pts_audio-pts_video(注意区分!!)
    2.判断逻辑:
    	(无法感知区间:min=-125ms,max=45ms)
    	- max
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ffplay具体源码

     /* if video is slave, we try to correct big delays by
        duplicating or deleting a frame
        通过重复帧或者删除帧来纠正延迟*/
     diff = get_clock(&is->vidclk) - get_master_clock(is);
    
     /* skip or repeat frame. We take into account the
        delay to compute the threshold. I still don't know
        if it is the best guess */
     sync_threshold = FFMAX(AV_SYNC_THRESHOLD_MIN,
                            FFMIN(AV_SYNC_THRESHOLD_MAX, delay));
     if (!isnan(diff) && fabs(diff) < is->max_frame_duration) { // diff在最大帧duration内
         if (diff <= -sync_threshold) {      // 视频已经落后了
             delay = FFMAX(0, delay + diff); // 上一帧持续的时间往小的方向去调整
         }
         else if (diff >= sync_threshold && delay > AV_SYNC_FRAMEDUP_THRESHOLD) {
             // 视频超前
             delay = delay + diff; // 上一帧持续时间往大的方向去调整
             av_log(NULL, AV_LOG_INFO, "video: delay=%0.3f A-V=%f\n",
                    delay, -diff);
         }
         else if (diff >= sync_threshold) {
             // 上一帧持续时间往大的方向去调整
             delay = 2 * delay; // 保持在 2 * AV_SYNC_FRAMEDUP_THRESHOLD内, 即是2*0.1 = 0.2秒内
         } else {
             // 音视频同步精度在 -sync_threshold ~ +sync_threshold
             // 其他条件就是 delay = delay; 维持原来的delay, 依靠frame_timer+duration和当前时间进行对比
         }
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  • 相关阅读:
    超详细讲解H5移动端适配
    hive sql 按照字段拆分之后(列转行)进行映射,再进行列转行
    火锅+自助+美蛙,青客宴如何从火锅细分渠道突破
    用MES系统预警监控
    IDEA 2023git提交和拉数据都出现问题,分支名一直有感叹号Rebasing
    溶出度质量标准的拟定注意事项
    【GlobalMapper精品教程】019:基于DSM提取离散随机点的高程信息
    SDL3 入门(3):三角形
    uni-app 经验分享,从入门到离职(五)——由浅入深 uni-app 数据缓存
    香橙派硬件PWM控制sg90舵机
  • 原文地址:https://blog.csdn.net/qq_43537701/article/details/133026632