ts流中的时间概念: pcr,pts,dts 实例解说

article/2025/10/9 9:12:34

ts流中的时间概念: pcr,pts,dts 实例解说
----------------------------------------
PCR OPCR
----------------------------------------
ts流包头4字节,第5字节为适配域长度,若不为0,第六字节为适配域标志.
适配域有5个标志,这里先说两个,节目参考时钟,原始节目参考时钟
所谓的时钟参考信息就是从适配域中获取的. 对dvb播放很重要. 调谐接受时钟用的
其它3个标志是什么?应该不重要,暂时也没有碰到.

PCR (Program Clock Reference) 节目参考时钟
PCR 占用42bit, 分两部分,33bit + 9 bits
program_clock_reference_base: 33bit , :后跟6bits 1,保留字段
program_clock_reference_extension: 9bit

时钟=base*300 + ext; //ext < 300, 就是这么怪,前面一个数顶300,后面一个顶1个

33bits 是90Khz时钟的计数值, 42bits 是27M时钟的计数值. 这就是300的来历(27M/90K=300).

内存存储方式: 占用6bytes


(gdb) x/7b adapt
  0x7ffff7c5ea29:    0x50    0x00    0x03    0x8e    0x8c    0x7e    0x00


第一个字节是适配域标志字节,后面跟6bytes PCR 字节

获取代码:
  if (adapt[0] & 0x10)  // We have a PCR
  {
    *got_pcr = TRUE;
    // The program_clock_reference_base
    // NB: Force the first byte to be unsigned 64 bit,
    *pcr = ((uint64_t)adapt[1] << 25) | (adapt[2] << 17) | (adapt[3] << 9) |
      (adapt[4] << 1) | (adapt[5] >> 7);
    // Plus the program clock reference extension
    *pcr = ((*pcr) * 300) + ((adapt[5] & 1) << 8) + adapt[6];
  }

pcr 是什么?
pcr是一个42bit表示的长整形,而且其数值是前33bit*300 + 后9bit(<300),

pcr时间单位是什么?  
答:不是us, PCR是针对27M时钟产生的,其时间单位是1/27M, 是小于1us的

pcr 表示的最大时间是多少?
由于pcr_low是被300求余的,则其最大值为299=0x12B,
那么pcr_va[0-5]数组的值分别为:0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 2B
pcr = 0x1ffffffff*300+299
tms = pcr/27000000
用python 工具求其数值
>>> print ("%f"%((0x1ffffffff*300+299)/27000000))
95443.717689 (s)

可以算得pcr最大值为95443.717689/3600s = 26.5h ,一天多一点.

pcr 是干什么用的?
PCR用来同步头端和终端的27M时钟,并借此同步头端和终端的色度平衡和帧率。
从实现方式上,编码器内部维护一个PCR的计数器,以这个计数器为时间,DVB要求每40ms必须有一个PCR,所以要把PCR 发送到码流里
在数字电视终端设备上,都有一个压控振荡器和一个内部的计数器,这个内部的计数器会对本地压控振荡器的时钟进行计数,并且和TS流内部的PCR数字进行比较,
若本地计数器的变化率高于PCR的变化率,表征本地的27M时钟比头端27M时钟快,应该调整压控振荡器的电压,降低压控振荡器的频率;反之则提高本地振荡器的振荡频率。
ASI发出的时钟也是27M.
如果我没有调频头,只是ts文件或udp数据流, 那pcr 应该不用了??!!

OPCR.
不是输出参考时钟呢. 而是原始节目参考时钟 (Origin program clock reference),其作用及数值参考PCR

----------------------------------------
PES 及 pts dts
----------------------------------------
PES: 打包的es 主要是为了在es流中加入pts,dts时间戳信息,当然还要加别的信息.
pes 头部有6bytes, 分析一个具体的实例:


47 41 00 30 07 50 00 00 7B 0C 7E 00 00 00 01 E0
00 00 80 C0 0A 31 00 09 10 A1 11 00 07 D8 61 00
00 00 01 09 F0 00 00 00 01 06 05 FF ......

47 41 00 30: ts 头部,pid=0x100,有适配域,有负载
07: 适配域长度
50 00 00 7B 0C 7E 00:适配域 PCR , PCR用来调整接收端频率的,见pcr描述

pes 层大致为 pes_header(6b)+option_pes_header(3-259b)+Payload(最大65526)

00 00 01 : 固定pes头部
E0 00 00 : 流ID为E0,视频流,PES包长度0。 音频流ID范围从0xC0到0xDF,视频流ID范围从0xE0到0xEF。

80 C0 0A
80: '10'(固定位)+加扰控制(2)+优先级(1)+数据定位指示(1)+版权(1)+原始或复制(1)
c0: 七个标志, 先认识其中的一个,前2bits是PTS_DTS_FLAG, '11':都有,'10':仅有pts, 其它几个标志不重要也很少见.
0A: 后面数据长度

pts,dts 是如何存储的?
pts,dts 是33bits 数据,但占5bytes数据,其存储为:

PTS_DTS_flags == '11',同时有 DTS 和 PTS
    constvalue0(4bits):固定为 '0011'。
    PTS [32..30](3bits)
    constvalue1(1bit):固定为 '1'
    PTS [29..15](15bits)
    constvalue1(1bit):固定为 '1'
    PTS [14..0](15bits)
    constvalue1(1bit):固定为 '1'
    dts(33bits):为 0,封装格式与 pts 一致,除了开始的 4 bits 固定为 '0001'。

pts 代码获取:
  part1 = (data[0] & 0x0E) >> 1; //3bits
  part2 = (data[1] << 7) | ((data[2] & 0xFE) >> 1); //15bits
  part3 = (data3 << 7) | ((data4 & 0xFE) >> 1);    //15bits
  pts = (part1 << 30) | (part2 << 15) | part3;

pts,dts 是干什么用的?
PTS(presentation time)显示时间戳和DTS(decoding time stamp)解码时间戳,是用来音视频同步的,
DTS/PTS是相对SCR(系统参考)的时间戳,是以 90000为单位,
系统时钟频率为 90Khz,所以转换到秒为 PTS/90000。

31 00 09 10 A1: pts = 133200
11 00 07 D8 61: dts = 126000

剩余的为视频流负载.


参考: 1. tsreport.c 代码(ubuntu)
参考: 2. ISO/IEC 13818-1 标准
参考: 3. 网络

参考图片:ts包格式

参考图片: pes 包格式


http://chatgpt.dhexx.cn/article/xjQHlIR7.shtml

相关文章

TS流解析【PCR】自己的总结

http://www.cnblogs.com/ztteng/articles/3166025.html http://blog.csdn.net/liuhongxiangm/article/details/8981032 http://blog.sina.com.cn/s/blog_6b94d5680101ton7.html http://blog.csdn.net/jl2011/article/details/47044647 二.TS流包含的内容 一段TS流&#xf…

ES流、PES流、PS流和TS流介绍

流媒体系统结构 整个传输过程为&#xff1a;音视频数据分别通过图像声音编码器打包成ES&#xff08;elemental stream 基本数据流&#xff09;&#xff0c;在通过PES打包器打包成PES&#xff08;packet elemental stream分组的基本数据流&#xff09;&#xff0c;之后通过PS复用…

TS流基本知识【HI3798 AVPLAY播放TS流】

目录 一、TS流相关知识 1.1 TS流、PS流、PES流和ES流都是什么&#xff1f; 1.2 TS流是如何产生的&#xff1f; 1.3TS流的格式 二、从TS流到PAT、PMT 2.1 PAT表&#xff08;Program Association Table&#xff0c;节目关联表&#xff09; 2.1.1PAT表的描述&#xff08;表…

TS流

TS流的健壮性很好&#xff0c;所以适合用在无线视频传输。但是&#xff0c;TS流一帧数据的格式较为复杂&#xff0c;所以需要有优秀的分析工具。 比如&#xff0c;EasyICE。&#xff08;此软件仅供非商业使用&#xff0c;而且每次开打都需要联网验证是否是最新版本&#xff09…

ts流格式

1.ts简介 ts流最早应用于数字电视领域&#xff0c;其格式非常复杂包含的配置信息表多大十几个&#xff0c;视频格式主要是mpeg2。苹果公司发明的http live stream流媒体是基于ts文件的&#xff0c;不过他大大简化了传统的ts流&#xff0c;只需要2个最基本的配置表PAT和PMT&…

ts流格式详解

ts介绍 ts文件为传输流文件&#xff0c;视频编码主要格式h264/mpeg4&#xff0c;音频为acc/MP3。 ts文件分为三层&#xff1a;ts层Transport Stream、pes层 Packet Elemental Stream、es层 Elementary Stream. es层就是音视频数据&#xff0c;pes层是在音视频数据上加了时间戳…

MPEG-2 TS流结构浅析

一、概述 MPEG-2是MPEG&#xff08;Moving Picture Experts Group&#xff0c;运动图像专家组&#xff09;组织制定的视频和音频有损压缩标准之一&#xff0c;它的正式名称为“基于数字存储媒体运动图像和语音的压缩标准”。MPEG-2标准是在1994年11月为数字电视而提出来…

RTSP中TS流结构分析

RTSP中TS流结构分析 UDP数据包整体结构RTP Header结构TS Header结构PAT结构PMT结构PES Header结构ES层Wireshark抓取TS包 UDP数据包整体结构 在使用UDP传输TS流时&#xff0c;整个数据包结构如下&#xff1a; RTP Header结构 RTP结构如下图&#xff1a; 各字段的含义如下&…

TS流理论分析

TS&#xff08;Transport Stream&#xff09;流由TS包组成&#xff0c;而每个TS包的⻓度&#xff1a;固定为188 Bytes或204 Bytes&#xff0c;204 Bytes⻓度是在188Bytes后⾯增加了16 Bytes的CRC校验数据。 ts 层的内容是通过 PID 值来标识的&#xff0c;主要内容包括&#xff…

TS流详细解析

1、PAT表的TS包 0x47&#xff1a;包头识别符 Sync_code 0x40 0x00&#xff1a;0100 0000 0000 0000 0b&#xff1a;transport_error_Indicator 为1的包丢弃 1b&#xff1a;payload_unit_start_indicator是否忽略头部后的第一个字节 0b&#xff1a;transport_priority 传输优先级…

ts 流基础(白话讲解).

---------------------------------------- author: hjjdebug date: 2022年 09月 27日 星期二 ---------------------------------------- ts 流就是188个字节构成的流数据. 先来点最简单的. ts 头部&#xff0c;4字节 ts 流是47开头的,以188字节为单位的打包流&#xff0…

什么是TS流?

前言 什么是TS流&#xff1f; 百度说&#xff1a;transport stream&#xff08;传送流&#xff09;简称TS流&#xff0c;是根据ITU-T Rec.H.222.0|ISO/IEC 13818-2 和ISO/IEC 13818-3协议定义的一种数据流&#xff0c;防止有可能发生严重错误时进行一道或多道程序编码数据的传…

hls之m3u8、ts流格式详解

2019独角兽企业重金招聘Python工程师标准>>> HLS&#xff0c;Http Live Streaming 是由Apple公司定义的用于实时流传输的协议&#xff0c;HLS基于HTTP协议实现&#xff0c;传输内容包括两部分&#xff0c;一是M3U8描述文件&#xff0c;二是TS媒体文件。 1、M3U8文件…

TS流概述(ES流-基本流,PES流-打包基本码流,PS流-节目流,TS流-传输流)

一、TS流概述 ES流(Elementary Stream&#xff0c;基本流)&#xff1a;数字电视各组成部分编码后所形成的直接表示基本元素内容的流&#xff0c;包含视频、音频或数据的连续码流。 PES流&#xff08;Paketized Elementary Stream&#xff0c;打包基本码流):是将基本的码流ES流…

网络流媒体(四)———TS流

1. 数字视频压缩MPEG-2标准 MPEG-2是MPEG&#xff08;Moving Picture Experts Group&#xff0c;运动图像专家组&#xff09;组织制定的视频和音频有损压缩标准之一&#xff0c;它的正式名称为“基于数字存储媒体运动图像和语音的压缩标准”。与MPEG-1标准相比&#xff0c;MPEG…

Segmentation笔记4-Boundary-Aware Network for Fast and High-Accuracy Portrait Segmentation

创新点 1.提出了BANet 2.提出了refine loss 总结 图片引起不适。。。 网络流程如下&#xff1a; 图片经过语义分支得到1/4大小的特征图。将其上采样到原图大小&#xff0c;c 1作为边界特征挖掘分支的边界注意力图。注意力图由BA loss监督。将原图与注意力图拼接&#xff…

diffusion medical image segmentation

1、Diffusion Models for Implicit Image Segmentation Ensembles code&#xff1a;https://github.com/JuliaWolleb/Diffusion-based-Segmentation 2、MedSegDiff: Medical Image Segmentation with Diffusion Probabilistic Model code: https://github.com/WuJunde/MedS…

weakly supervised semantic segmentation

Weakly Supervised Semantic Segmentation by Pixel-to-Prototype Contrast CVPR2022 北京大学 Though image-level weakly supervised semantic segmentation (WSSS) has achieved great progress with Class Activation Maps (CAMs) as the cornerstone, the large supervis…

16. Segmentation

Segmentation 1. Segmentation: Generalized Base/Bounds 我们可以看一下&#xff08;Figure 16.1&#xff09;&#xff0c;尽管每个CPU都有一对硬件寄存器&#xff08;base register和bounds register&#xff09;&#xff0c;但是还是不可避免的会产生内存浪费&#xff08;阴…

segmentation_models.pytorch实战:使用segmentation_models.pytorch图像分割框架实现对人物的抠图

文章目录 摘要二分类语义分割的常用做法数据集segmentation_models.pytorch简介与使用一、安装二、创建模型 训练测试总结 摘要 在前面的文章中&#xff0c;我提到过segmentation_models.pytorch语义分割框架&#xff0c;今天这篇文章向大家展示如何使用segmentation_models.p…