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

article/2025/10/9 13:13:45

一、TS流概述

ES流(Elementary Stream,基本流):数字电视各组成部分编码后所形成的直接表示基本元素内容的流,包含视频、音频或数据的连续码流。

PES流(Paketized Elementary Stream,打包基本码流):是将基本的码流ES流根据需要分成长度不等的数据包,并加上包头就形成了打包的基本码流PES流。

PS (Program Stream,节目流):将一个节目的多个组成部分按照它们之间的互相关系进行组织并加入各组成部分关系描述后的码流。PS流是一种多路复用数字音频、视频等的封装容器,它一个或多个具有共同的时间基准的PES流合并成一个整体流,主要用于节目存储。其包长不固定,且较长,一旦失去同步信息,接收机无法确定下一包的同步位置,会造成失步,导致严重的信息丢失。PS流适用于误码小、信道较好的环境,如演播室、家庭环境和存储介质中。

TS流(Transport Stream,传输流):是将一个节目的多个组成部分按照它们之间的互相关系进行组织并加入各组成部分关系描述和节目组成信息,并进一步封装成传输包后的码流。TS流是将视频、音频、PSI等数据打包成传输包进行传送。主要用于节目传输。TS的传输包长度固定,一般为188字节。

TS流和PS流是MPEG-2标准中规定的两种输出码流。TS格式中,从视频流的任意一片断开始都可以独立解码,而PS格式不可以。由于TS流具备较强的抵抗传输误码的能力,因此目前在传输媒体中进行传输的MPEG-2码流基本上都采用了TS流的包格式。

TS流的播放:播放前将TS流文件的后缀名该为.mpg或者.mpeg,用可以直接播放MPEG-TS流的播放器(一般的播放器都可以)打开播放即可。

TS流的优点:
1、动态带宽分配:由于TS的传输包长度是固定的,因此可过PID可以将规定的信道总频带在视频、音频和数据信息见进行实时的、灵活的分配。利用这一特性,可在广播付费节目前实时地将解密钥匙插入到TS流中送给广大用户。

2、可分级性:允许一个复用的传输码流与其他视音频基本码流进行二次复用,生产占用频带给宽的更高一级的TS流。
3、可扩展性
4、抗干扰性
5、接收机成本低廉

TS流的形成过程:
1、 压缩【显示单元】产生【进入单元】,连续的【进入单元】组成一个基本码流。
2、 对ES(基本码流)进行打包形成PES。
3、 在PES包中加入定时信息(PTS/DTS)。
4、 将PES包内容分配到一系列固定长度的传输包中。
5、 在传输包中加入定时信息(PCR)。
6、 在传输包中加入节目专用信息(PSI) 。
7、 连续输出传输包形成具有恒定比特率的MPEG-TS流。

 

二、TS流传输包(简称TS包)结构分析

 

MPEG-2中规定TS传输包的长度为188 字节。但通信媒介会为包添加错误校验字节,从而有了不同于188字节的包长。例如:

DVB 规定中,使用204字节作为包长:1、通过调制器时,在每个传输包后增加了16 字节的里德所罗门前向纠错码,因而形成了204字节的数据包。调制后总存在204 字节的数据包。2、调制之前存复用器插入RS码或虚构
的RS码。

ATSC规定中,使用208字节作为包长:添加20 字节的 RS(Reed-Solomon)前向纠错码。与DVB不同,ATSC规定RS码只能出现在调制的TS流中。

所有的TS包都分为包头和净荷部分。TS包中可以填入很多东西(填入的东西都是填入到净荷部分),有:视频、音频、数据(包括PSI、SI以及其它任何形式的数据)。

 

1、TS包包头

 

TS包的包头提供关于传输方面的信息:同步、有无差错、有无加扰、PCR(节目参考时钟)等标志。TS包的包头长度不固定,前32比特(4个字节)固定,后面可能跟有自适应字段(适配域)。32个比特(4个字节)是最小包头。包头的结构固定如下:

typedef struct TS_packet_header

{

unsigned sync_byte : 8;

unsigned transport_error_indicator : 1;

unsigned payload_unit_start_indicator : 1;

unsigned transport_priority : 1;

unsigned PID : 13;

unsigned transport_scrambling_control : 2;

unsigned adaption_field_control : 2;

unsigned continuity_counter : 4;

} TS_packet_header;

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保留;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。

适配域:

 

2、TS包净荷部分

TS包中净荷所传输的信息包括两种类型:

1、视频、音频的PES包以及辅助数据;

2、节目专用信息PSI。

当然,TS包也可以是空包。空包用来填充TS流,可能在重新进行多路复用时被插入或删除。

在系统复用时,视频、音频的ES流需进行打包形成视频、音频的 PES流,辅助数据(如图文电视信息)不需要打成PES包。PES包非定长,音频的PES包小于等于64K,视频的一般为一帧一个PES包。一帧图象的PES包通常要由许多个TS包来传输。MPEG-2中规定,一个PES包必须由整数个TS包来传输。如果承载一个PES包的最后一个TS包没能装满,则用填充字节来填满;当下一个新的PES包形成时,需用新的TS包来开始传输。

节目专用信息PSI(Program Specific Information)

管理各种类型的TS数据包,需要有些特殊的TS包来确立各个TS数据包之间的关系。这些特殊的TS包里所包含的信息就是节目专用信息。在不同的标准中它有不同的名字:

? MPEG-2中称为PSI;

? DVB标准根据实际需要,对PSI扩展,称为SI信息;

? ATSC标准中为PSIP信息

MPEG-2中,规定的对PSI信息的描述方法有以下几种:

? 1、表Table: 节目信息的结构性的描述;

    –节目关联表Program Association Table (PAT) 0x0000

    –节目映射表Program Map Tables (PMT)

    –条件接收表Conditional Access Table (CAT) 0x0001

    –网络信息表Network Information Table(NIT) 0x0010

    –传送流描述表Transport Stream Description Table (TSDT)

? 2、节Section: 将表格的内容映射到TS流中;

专用段 Private_ section

? 3、描述符Descriptor:提供有关节目构成(视频流、音频流、语言、层次、系统时钟和码率等多方面)的信息;

ITU-T Rec.H.222.0|ISO /IEC 13818-1 中定义的 PSI表可被分成一段或多段置于传输流分组中。一段就是一个语法结构,用来将 ITU-T Rec.H.222.0|ISO /IEC 13818-1 中定义的 PSI表映射到传输流分组中。

 

PAT表

TS流中包含一个或者多个PAT表。PAT表由PID为0x0000的TS包传送,其作用是为复用的每一路传送流提供出所包含的节目和节目编号,以及对应节目的PMT的位置即PMT的TS包的PID值,同时还提供NIT的位置,即NIT的TS包的PID的值。

table_id:固定为0x00,标志该表是PAT表。

section_syntax_indicator:段语法标志位,固定为1。

section_length:表示这个字节后面有用的字节数,包括CRC32。节目套数:(section length-9)/4

transport_stream_id:16位字段,表示该TS流的ID,区别于同一个网络中其它多路复用流。

version_number:表示PAT的版本号。

current_next_indicator:表示发送的PAT表是当前有效还是下一个PAT有效。

section_number:表示分段的号码。PAT可能分为多段传输,第一段为0,以后每个分段加1,最多可能有256个分段。

last_section_number:表示PAT最后一个分段的号码。

Program number:节目号

network_PID:网络信息表(NIT)的PID,节目号为0时对应ID为network_PID。

Program map PID:节目映射表(PMT)的PID号,节目号为大于等于1时,对应的ID为program_map_PID。一个PAT中可以有多个program_map_PID。

CRC_32:32位字段,CRC32校验码Cyclic RedundancyCheck。

 

 

PMT表

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/QgJHdbCy.shtml

相关文章

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

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

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

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

diffusion medical image segmentation

1、Diffusion Models for Implicit Image Segmentation Ensembles code: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 我们可以看一下(Figure 16.1),尽管每个CPU都有一对硬件寄存器(base register和bounds register),但是还是不可避免的会产生内存浪费(阴…

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

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

mac Segmentation Fault

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

QT SIGSEGV Segmentation fault

QT程序在运行时,出现崩溃。百思不得其姐,所以认真思考(上网百度)了一番,原来遇到此错误的不止我一人,故记录下来,以防下次再犯类似错误。 错误提示: 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

编译时出错: 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就可以 以上方法不行: enable bitcode改成No。原因是第三方库…

Segmentation Fault错误原因总结

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

Segmentation Fault原因总结

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

segmentation fault 段错误解决方法

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

Segmentation-传统分割算法

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

图像分割(Segmentation)

文章目录 图像分割FCNU-NetSegNetDeepLab图像分割常用数据集 图像分割 图像分割是预测图像中每一个像素所属的类别或者物体。基于深度学习的图像分割算法主要分为两类: 语义分割(Semantic Segmentation) 为图像中的每个像素分配一个类别。 …

网站中木马病毒了怎么办

不少站长们辛辛苦苦的创建了一个网站,却由于安全维护措施做的不到位,最终导致网站中木马病毒,网站被跳转或无法打开等棘手情况,或点击进去是杂七杂八的灰色网站。若处理不及时,容易受到搜索引擎的惩罚,如官…

查找网站代码漏洞对网站木马后门查杀的清除

收到阿里云的短信提醒说是网站存在后门,webshell恶意通信行为,紧急的安全情况,我第一时间登录阿里云查看详情,点开云盾动态感知,查看了网站木马的详细路径以及webshell的特征,网站从来没有出现过这种情况&a…

查杀webshell木马

1.上传webshell 往DVWA上传一个webshell 一句话木马 2.D盾功能介绍 功能特性简介 一句话免疫,主动后门拦截,SESSION保护,防WEB嗅探,防CC,防篡改,注入防御,防XSS,防提权,上传防御,未知0day防御,异 形脚本防御等等。 防止黑客入侵和提权,让服务器更安全。 『目录限制』 有效防止…

病毒木马查杀实战第018篇:病毒特征码查杀之基本原理

前言 在本系列的导论中,我曾经在“病毒查杀方法”中简单讲解过特征码查杀这种方式。而我也在对于实际病毒的专杀工具编写中,使用过CRC32算法来对目标程序进行指纹匹配,从而进行病毒判定。一般来说,类似于MD5以及CRC32这样的算法&a…