TS流理论分析

article/2025/10/9 13:17:17
TS(Transport Stream)流由TS包组成,而每个TS包的⻓度:固定为188 Bytes或204 Bytes,204 Bytes⻓度是在188Bytes后⾯增加了16 BytesCRC校验数据
ts 层的内容是通过 PID 值来标识的,主要内容包括:PAT 表、PMT 表、音频流、视频流。解析 ts 流要先找到 PAT 表,只要找到 PAT 就可以找到 PMT,然后就可以找到视频流了。PAT 表和 PMT 表需要定期插入ts 流,因为用户随时可能加入ts 流,这个间隔较小,通常每隔几个视频帧就要加入PAT和 PMT。PAT 和 PMT 表是必须的,还可以加入其它表如 SDT(业务描述表)等,不过 hls 流只要有PAT 和 PMT 就可以播放了
PAT表:主要的作用就是指明了 PMT 表的 PID 值。能找到PAT。PAT的pid默认值是0。通过PAT能够解析出当前ts流包含的节目数量以及对应节目PMT的PID
PMT表:主要作用就是指明了音视频流的PID值。通过PMT的PID值就可以区分那个包是视频数据,那个包是音频数据。
音频流:编码好的音频数据。
视频流:编码好的视频数据。
TS包的详细字段
1、TS头
TS包的payload:音频PES包,视频PES包,节目专用信息PSI ,空包,PAT,PMT。

 

字段说明:
sync_byte (同步字节):固定为0100 0111 (0x47);该字节由解码器识别,使包头和有效负载可相互分离。
transport_error_indicator(传输错误指示):‘1’表示在相关的传输包中至少有一个不可纠正的错误位。当被置1后,在错误被纠正之前不能重置为0。
payload_unit_start_indicator(开始指示):为1时,在前4个字节之后会有一个调整字节,其的数值为后面调整字段的长度length。因此有效载荷开始的位置应再偏移1+[length]个字节。transport_priority(传输优先级):‘1’表明优先级比其他具有相同PID 但此位没有被置‘1’的分组高
PID指示存储与分组有效负载中数据的类型。PID 值 0x0000—0x000F 保留。其中
    0x0000为PAT;
    0x0001为CAT;
    0x0002为PMT
    0x1fff为分组保留,即空包。
transport_scrambling_control(加扰控制):表示TS流分组有效负载的加密模式。空包为‘00’,如果传输包包头中包括调整字段,不应被加密。
adaptation_field_control(适配域控制):表示包头是否有调整字段或有效负载。‘00’为ISO/IEC未来使用保留;‘01’仅含有效载荷,无调整字段;‘10’ 无有效载荷,仅含调整字段;‘11’ 调整字段后为有效载荷,调整字段中的前一个字节表示调整字段的长度length,有效载荷开始的位置应再偏移[length]个字节。空包应为‘10’。
continuity_counter(连续性计数器):随着每一个具有相同PID的TS流分组而增加,当它达到最大值后又回复到0。范围为0~15,检查数据掉失
PID对应表

 

2、PAT(Program Association Table) 节目关联表(最关键数据PAT和PMT,没有无法解码)
typedef struct TS_PAT  
{  
    unsigned table_id                     : 8; //固定为0x00 ,标志是该表是PAT表  
    unsigned section_syntax_indicator     : 1; //段语法标志位,固定为1  
    unsigned zero                         : 1; //0  
    unsigned reserved_1                   : 2; // 保留位  
    unsigned section_length               : 12; //表示从下一个字段开始到CRC32(含)之间有用的字节数  
    unsigned transport_stream_id          : 16; //该传输流的ID,区别于一个网络中其它多路复用的流       
    unsigned reserved_2                   : 2;// 保留位  
    unsigned version_number               : 5; //范围0-31,表示PAT的版本号  
    unsigned current_next_indicator       : 1; //发送的PAT是当前有效还是下一个PAT有效  
    unsigned section_number               : 8; //分段的号码。PAT可能分为多段传输,第一段为00,以后每个分段加1,最多可能有256个分段  
    unsigned last_section_number          : 8;  //最后一个分段的号码  
    std::vector<TS_PAT_Program> program;  
    unsigned reserved_3                    : 3; // 保留位  
    unsigned network_PID                    : 13; //网络信息表(NIT)的PID,节目号为0时对应的PID为network_PID  
    unsigned CRC_32                        : 32;  //CRC32校验码  
} TS_PAT;   
3、 PMT(Program Map Table)节目映射------由PAT指定PID值
PMT在传送流中用于指示组成某一套节目的视频、音频和数据在传送流中的位置,即对应的TS包的PID值,以及每路节目的节目时钟参考(PCR)字段的位置。

 

字段说明
Table id :固定为0x02,标志该表是PMT 表。
Section syntax indicator:对于PMT表,设置为1 。
Section length:表示这个字节后面有用的字节数,包括CRC32 。
Program number:它指出该节目对应于可应用的Program map PID 。
Version number:指出PMT 的版本号。
Current next indicator:当该位置’1’时,当前传送的Program map section可用;当该位置’0’时,指示当前传送的Program map section不可用,下一个TS流的Programmap section 有效。
Section number:总是置为0x00(因为PMT表里表示一个service的信息,一个section 的长度足够)。
Last section number:该域的值总是0x00 。
PCR PID:节目中包含有效PCR字段的传送流中PID 。
Program info length:12bit域,前两位为00。该域指出跟随其后对节目信息的描述的byte 数。
Stream type:8bit域,指示特定PID的节目元素包的类型。该处PID由elementary PID 指定。下表所示为对应原始流的类型。
原始流的类型
描述
0x00
ITU-T|ISO/IEC保留
0x01
ISO/IEC 11172视频
0x02
ITU-T Rec.H.262|ISO/IEC 13818-2视频
0x03
ISO/IEC 11172音频
0x04
ISO/IEC 13818-3音频
0x05
ITU-T Rec.H.222.0|ISO/IEC 13818-1私用分段
0x06
含有私用数据的ITU-T Rec.H.222.0|ISO/IEC 13818-1分组
0x07
ISO/IEC 13522 MHEG
0x08
ITU-T Rec.H.222.0|ISO/IEC 13818-1 DSM CC
0x09
ITU-T Rec.H.222.0|ISO/IEC 13818-1/11172-1
0x10 ~ 0x7F
ITU-T Rec.H.222.0|ISO/IEC 13818-1保留
0x80 ~ 0xFF
  用户私有


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

相关文章

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…

mac Segmentation Fault

今天跑SEDR的代码遇到一个很奇怪的错误&#xff0c;我已经定位到了错误的地方在于 这个很奇怪的一个错误&#xff0c;test_z的维度是(3460*28),很明显不是内存的问题&#xff0c;就很奇怪 后面看到这个 https://stackoverflow.com/questions/64841082/segmentation-fault-11-p…

QT SIGSEGV Segmentation fault

QT程序在运行时&#xff0c;出现崩溃。百思不得其姐&#xff0c;所以认真思考&#xff08;上网百度&#xff09;了一番&#xff0c;原来遇到此错误的不止我一人&#xff0c;故记录下来&#xff0c;以防下次再犯类似错误。 错误提示&#xff1a; Ssignal Received - Qt Creato…

Image Segmentation

先介绍几个概念,也是图像处理当中的最常见任务. 1. 语义分割(semantic segmentation) 2. 目标检测(object detection) 3. 目标识别(object recognition) 4. 实例分割(instance segmentation) 一、语义分割 首先需要了解一下什么是语义分割(semantic segmentation). 语义…

unable to execute command: Segmentation

编译时出错&#xff1a; clang: error:unable to execute command: Segmentation fault: 11 clang: error:linker command failed due to signal (use -v to see invocation) Architectures的debug改为NO就可以 以上方法不行&#xff1a; enable bitcode改成No。原因是第三方库…

Segmentation Fault错误原因总结

一、 什么是“Segmentation fault in Linux” 所谓的段错误就是指访问的内存超过了系统所给这个程序的内存空间&#xff0c;通常这个值是由gdtr来保存的&#xff0c;他是一个48位的寄存器&#xff0c;其中的32位是保存由它指向的gdt表&#xff0c;后13位保存相应于gdt的下标&am…

Segmentation Fault原因总结

转载链接&#xff1a;https://www.cnblogs.com/silence-hust/p/4487026.html 最近在项目上遇到了Segmentation Fault的错误&#xff0c;一直调试不出来是哪里出了问题&#xff0c;对于刚接触嵌入式的&#xff0c;也不知道该如何去调试一个项目&#xff0c;定位内存问题&#x…

segmentation fault 段错误解决方法

一、出现Segmentation Fault 1. 文件打开失败却使用了fclose()&#xff1b;fclose找不到指针fp。 解决方法&#xff1a; 当打开文件成功&#xff0c;即成功获得文件句柄后&#xff0c;再进行关闭句柄操作。 2. 文件正在写操作&#xff0c;异常断电、程序异常中断&#xff0c;导…

Segmentation-传统分割算法

“图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。”---百度百科 本文将继续介绍常见的图像处理算法之图像分割算法,图像分割是从图像中找出目标所在的区域&#xff0c;把图像分成若干个特定的、…