当前位置: 首页 > news >正文

视频时间戳PTS和DTS的区别

目录

🎬 一、一句话总结

📦 二、为什么会不同(以视频帧为例)

📖 三、形象例子:I-B-P 顺序

🔄 详细对比表

🧠 四、总结与用途

🎨 五、通俗类比(生活版)


理解 PTS (Presentation Timestamp) 和 DTS (Decoding Timestamp) 是从“能播视频”到“会做播放器”的关键分水岭。

🎬 一、一句话总结

  • PTS(Presentation Timestamp):“这帧该什么时候显示”。

  • DTS(Decoding Timestamp):“这帧该什么时候解码”。

换句话说:

  • PTS“屏幕播放的顺序”

  • DTS“解码器处理的顺序”

在多数情况下它们相等,但当有 B 帧(双向预测帧)出现时,它们就会不同。

📦 二、为什么会不同(以视频帧为例)

视频压缩主要使用以下三种帧类型:

帧类型

含义

是否依赖其他帧

举例

I 帧

关键帧(完整图像)

一张完整图片

P 帧

预测帧(参考前面)

“只存前一帧的变化”

B 帧

双向预测帧(参考前后)

“既看前又看后”

B 帧的特性(需要参考“未来”的帧)是导致 PTS 和 DTS 不一致的根本原因。

📖 三、形象例子:I-B-P 顺序

假设视频的**播放顺序(PTS)**如下:

显示顺序 (PTS)

帧类型

1

I 帧

2

B 帧

3

P 帧

由于 B 帧(第 2 帧)需要参考后面的 P 帧(第 3 帧),所以它必须等 P 帧先解码完,才能自己被解码。

于是:

  • **解码顺序(DTS)**必须是:I → P → B

  • **播放顺序(PTS)**仍然是:I → B → P

🔄 详细对比表

解码顺序 (DTS)

显示顺序 (PTS)

说明

I 帧

1

1

关键帧,先解码先显示。

P 帧

2

3

要先解码(DTS=2),供 B 帧参考,但延迟显示(PTS=3)。

B 帧

3

2

等 P 帧解码完再解码(DTS=3),但按预期时间显示(PTS=2)。

🎯 关键点:

由于 B 帧依赖未来帧,导致封装(Demuxer)后的数据包,其解码顺序(DTS)会领先于其显示顺序(PTS)

🧠 四、总结与用途

时间戳类型

控制对象

用途

DTS

解码器(Decoder)

控制解码顺序(帧何时送入解码器处理)。

PTS

播放器(Player)

控制播放顺序(帧何时输出到屏幕/与音频同步)。

当 FFmpeg 或任何解码器输出一帧解码好的图像时,它会带上该帧的 frame->pts。播放线程会严格根据这个 PTS 来决定什么时候将图像渲染到屏幕上,并与音频同步,从而保证流畅的观看体验。

🎨 五、通俗类比(生活版)

想象你是个电影剪辑师,正在处理三段素材:A、B、C。

  1. 你想要的播放顺序(PTS)是: A → B → C

  2. 但是 B 片段 需要用到 C 片段中的一小部分镜头(双向预测)。

  3. 所以你必须先处理 C, 再回来做 B。

➡️ 这时:

  • 处理顺序 (DTS) = A → C → B

  • 播放顺序 (PTS) = A → B → C

http://www.dtcms.com/a/560723.html

相关文章:

  • 09-神经网络的结构:描述神经网络的层次化组成和设计
  • 【ComfyUI】Stable Audio 文本生成音频
  • 音视频入门核心概念:容器、编码、流与时间戳
  • 网站的域名每年都要续费建个什么网站赚钱
  • 建站之星破解版在下列软件中
  • RocketMQ之长轮训机制
  • 论文阅读-EfficientAD
  • 跟der包学习java_day6「面向对象编程(OOP)」
  • 好的企业管理网站深圳市中心
  • 阿克苏建设局网站wordpress app
  • 使用 Ksycopg2 驱动实现 Kingbase 数据库增删改查系统
  • released信号,windowIcon/setWindowIcon(QIcon),qrc机制
  • 等价多米诺骨牌对的数量(C语言)
  • Python pandas数据透视表(pivot_table)详解:从入门到实战,多维数据分析利器
  • 江西新余网站建设网站建设页面设计规格
  • ATPrompt:基于属性的视觉提示
  • 手机如何制作网站教程网站双线选择
  • upload文件上传漏洞浅析
  • GitHub 热榜项目 - 日榜(2025-11-02)
  • 网站稿件管理发布系统中山网站建设半江红
  • 【Qt开发】布局管理器(二)-> QHBoxLayout水平布局
  • Linux 6.17:最新的驱动程序、快速的网络和可靠的内存
  • 【Ubuntu】虚拟机 Ubuntu 挂载 宿主机 Windows文件夹
  • 将go-tcp项目部署到docker容器下运行
  • 华为OD机试双机位A卷 - 几何平均值最大的子数组 (C++ Python JAVA JS GO)
  • PostgreSQL死锁排查攻略:从日志分析到实时监控
  • 佛山响应式网站开发二级域名免费分发站
  • 【软考架构】案例分析-Web应用设计(应用服务器概念)
  • C++中的过滤器模式:原理、实现与应用
  • Kanass实践指南(4) - 测试团队如何通过kanass管理跟踪用例与缺陷