zoukankan      html  css  js  c++  java
  • AV时间戳dts,pts。图析ffmpeg解码序列。

    解码过程中,dts由媒体流读入的包推动(解码包中的dts标记),dts在前进。pts是在dts前进到某处(截点)而进行动作的标记。

    物理时间自然流逝,dts可以被控制同步与物理时间同一脚步节奏,也可以不。

    一个节目的各条流(一般就一视频一音频,再加一字幕)共同参照dts。

    流的各帧正确在物理世界呈现,pts必须参照物理时间与物理时间同步。

    上图是mp4文件的解码,由于P,B要参考I,B需要正向参考P,所以某一帧被解码呈现的时候,已经被安排读入前前后后的几帧(这里的帧不专指主帧),所以pts会编排成dts之后。上图所示,pts:133的主帧安排在dts:0时加载,pts:333的B帧安排在dts:66时加载,pts:266的B帧安排在dts:133时加载。

    又由于音频各帧独立,所以可以直接读入直接进行解码,pts和dts编排成一致。

    上图在dts进行至133时(图中最右一个AVPacket编码帧),对pts=133的视频帧(图中最左一个AVPacket编码帧)解码。

    解码出的帧dts打上当前的dts。在下面的AVFrame结构中,pkt_pts和pkt_dst是从AVPacket解码出来的时间截,而pts用于编码成AVPacket。

    2020补充:

    dts,理解成正在流逝的时钟时间。当然不是物理时钟时间。

    pts,理解成计划任务时间,dts到点了就执行任务。

    dts排序成一条时间轴,可以控制前进后退。

    pts排序成一条队列,dts到达时触发执行。

  • 相关阅读:
    laravel队列
    php程序内存优化之数组操作优化
    swoole4创建Mysql连接池
    MySQL创建索引
    mysql索引命中规则
    Redis数据类型及使用场景
    Redis高可用集群-哨兵模式(Redis-Sentinel)
    网站架构优化性能
    PHP实现Redis分布式锁
    微软公司面试题
  • 原文地址:https://www.cnblogs.com/bbqzsl/p/6002003.html
Copyright © 2011-2022 走看看