FFmpeg中PTS与DTS详解

FFmpeg中PTS与DTS详解

    • 一、PTS与DTS简介
    • 二、时间基(time_base)简介
    • 三、ffmpeg分层结构与时间基(timebase)
    • 四、ffmpeg的分层结构

一、PTS与DTS简介

  1. Decode Time Stamp(DTS)是解码时间戳,解码器解码时相对于SCR(系统参考)的时间戳。
  2. Presentation Time Stamp(PTS)是渲染时间戳,解码器渲染时相对于SCR(系统参考)的时间戳。
  3. duration是视频时长,表示当前帧的持续时间,或者说两帧之间的时间间隔是多少。
    简单的理解就是PTS视频帧什么时候显示,dts视频帧什么时候解码。

二、时间基(time_base)简介

时间戳表示刻度,时间基表示秒/单位刻度,即一个刻度是多少秒。
封装格式不同、数据状态不同、时间基不同。例如原始数据(YUV)的时间基time_base = AVRational{1,25},压缩后的数据对应的时间基是time_base = AVRational{1,90000}。
时间基转换函数:
av_rescale_q_rnd(pts, in_tb, out_tb, (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));
函数实现将时间戳pts从in_tb时间基住转换到out_tb 时间戳:pts*in_tb/out_tb 。

三、ffmpeg分层结构与时间基(timebase)

时间基存在的意义:
1. 为了方便表示时间戳
当时间戳为很大或者很小的量级时,可以用正常的数字表示。
2. ffmpeg的分层结构
ffmpeg不同层时间戳量级不一样。

四、ffmpeg的分层结构

三种常用的模型

  1. 摄像头采集
    采集基本流程

  2. 转码(格式转换)
    转码基本流程

  3. 播放(解码)
    解码基本流程

ffmpeg的三层结构

mux/demux(封装层)
codec/decode层(编解码层)
raw data层(原始数据层)

时间基转换
timebase的理解

你可能感兴趣的:(FFmpeg)