TS流

声明:大部分内容转自https://blog.csdn.net/dxpqxb/article/details/79654004

一 从TS流开始

数字电视机顶盒接收到的是一段段的码流,我们称之为TS(Transport Stream,传输流),每个TS流都携带一些信息,如Video、Audio以及我们需要学习的PAT、PMT等信息。因此,我们首先需要了解TS流是什么,以及TS流是怎样形成、有着怎样的结构。

(一) TS流、PS流、PES流和ES流都是什么?

ES流    (Elementary Stream):基本码流,不分段的音频、视频或其他信息的连续码流。

PES:把基本流ES分割成段,并加上相应头文件打包成形的打包基本码流。

这个扯犊子的PS流可以先跳过,不然东西一多更看不懂。。。PS流 (Program Stream):节目流,将具有共同时间基准的一个或多个PES组合(复合)而成的单一数据流(用于播放或编辑系统,如m2p)。

 TS流   (Transport Stream):传输流,将具有共同时间基准或独立时间基准的一个或多个PES组合(复合)而成的单一数据流(用于数据传输)。

*NOTE:TS流和PS流的区别:TS流的包结构是长度是固定的;PS流的包结构是可变长度的。这导致了TS流的抵抗传输误码的能力强于PS流(TS码流由于采用了固定长度的包结构,当传输误码破坏了某一TS包的同步信息时,接收机可在固定的位置检测它后面包中的同步信息,从而恢复同步,避免了信息丢失。而PS包由于长度是变化的,一旦某一 PS包的同步信息丢失,接收机无法确定下一包的同步位置,就会造成失步,导致严重的信息丢失。因此,在信道环境较为恶劣,传输误码较高时,一般采用TS码流;而在信道环境较好,传输误码较低时,一般采用PS码流。)

由于TS码流具有较强的抵抗传输误码的能力,因此目前在传输媒体中进行传输的MPEG-2码流基本上都采用了TS码流的包格。

(二) TS流是如何产生的?

从上图可以看出,视频ES和音频ES通过打包器和共同或独立的系统时间基准形成一个个PES,通过TS复用器复用形成的传输流。注意这里的TS流是位流格式(分析Packet的时候会解释),也即是说TS流是可以按位读取的。

(三) TS流的格式是怎样的?

TS流是基于Packet的位流格式,每个包是188个字节(或204个字节,在188个字节后加上了16字节的CRC校验数据,其他格式一样)。整个TS流组成形式如下:


Packet Header(包头)信息说明


1


sync_byte


8bits


同步字节


2


transport_error_indicator


1bit


错误指示信息(1:该包至少有1bits传输错误)错误将丢弃此包


3


payload_unit_start_indicator


1bit


负载单元开始标志(packet不满188字节时需填充)


4


transport_priority


1bit


传输优先级标志(1:优先级高)


5


PID


13bits


Packet ID号码,唯一的号码对应不同的包


6


transport_scrambling_control


2bits


加密标志(00:未加密;其他表示已加密)


7


adaptation_field_control


2bits


自适应控制 01仅含有效负载,10仅含调整字段,11含有调整字段和有效负载。为00解码器不进行处理


8


continuity_counter


4bits


包递增计数器 范围0-15

PID是TS流中唯一识别标志,Packet Data是什么内容就是由PID决定的。如果一个TS流中的一个Packet的Packet Header中的PID是0x0000,那么这个Packet的Packet Data就是DVB的PAT表而非其他类型数据(如Video、Audio或其他业务信息)。下表给出了一些表的PID值,这些值是固定的,不允许用于更改。



PID 值


PAT


0x0000


CAT


0x0001


TSDT


0x0002


EIT,ST


0x0012


RST,ST


0x0013


TDT,TOT,ST


0x0014

下面以一个TS流的其中一个Packet中的Packet Header为例进行说明:


1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


17


18


19


20


21


22


23


24


25


26


27


28


29


30


31


32



Packet(十六进制)


4


7


0


7


e


5


1


2



Packet(二进制)


0


1


0


0


0


1


1


1


0


0


0


0


0


1


1


1


1


1


1


0


0


1


0


1


0


0


0


1


0


0


1


0



Packet Header 信息


1 sync_byte=0x47


2


3


4


5 PID=0x07e5


6


7


8


sync_byte=01000111,                        就是0x47,这是DVB TS规定的同步字节,固定是0x47.

transport_error_indicator=0,             表示当前包没有发生传输错误.

payload_unit_start_indicator=0,      含义参考ISO13818-1标准文档

transport_priority=0,                        表示当前包是低优先级.

PID=00111 11100101即0x07e5,       Video PID

transport_scrambling_control=00,  表示节目没有加密

adaptation_field_control=01           即0x01,具体含义请参考ISO13818-1

continuity_counte=0010                即0x02,表示当前传送的相同类型的包是第3个

adaptation_field_control的具体解释:

这个东西包含2bits(假如用XY表示),所以XY总共有00,01,10,11   这4种组合

X表示是否包含调整字段,0表示不包含,1表示包含

Y表示是否包含有效负载,0表示不包含,1表示包含

所以01表示只包含后面的184B只包含payload

       10表示只包含后面只包含调整字段

       11表示调整字段和payload都有

       00表示都没有,都没有我解码器就不用管你了,你这个包就是个five。。。

下图的adaptation field就是调整字段,说白了就是如果payload不是184bytes(比如是最后一个包,我剩余的数据量就只有100bytes,那我的payload就只有100B了,但是你一个ts又非要有188B,那中间就要填充188-100-4 = 84B),就得填充

但是这个adaptation field除了为补足188B之外还有没有别的什么用还不知道,说不定还可以传一些有用的信息?因为网上找的资料只是说00解码器就不管,但是10表示只包含后面只包含调整字段,如果他真的只是用于填充,解码器也可以不管他吧

如果仅仅是填充,那么也应该有一个填充的格式吧(比如固定填充0XFF?)

但是就是你有填充格式,我咋知道你到底是要填充多少个bytes???是不是说你的第一个byte里面保存的是你的长度,这个长度包含这个byte?毕竟1byte可以表示255,足够了???不清楚。。。

emmm,下图至少能证明这个adaptation field(自适应字段)并不是没有用,所以解码器还是要看看它的。。。

但是具体含义么,还没深究,但是果然的第一个byte里面保存的是adaptation field的长度,猜对啦,嘎嘎~~~

自适应字段的所有含义不清楚,先挖个坑,以后再填吧~~~

再存一个大佬的文章网址:

https://blog.csdn.net/u013354805/article/details/51578457

原文地址:https://www.cnblogs.com/gsp1004/p/11326315.html

时间: 2024-08-14 02:07:06

TS流的相关文章

ASI和TS流有什么区别

TS流是信源码流,最高码率为44.209 Mbit/s,它是经过信源编码后的压缩码流,为了使欲传输的信源信息在传输速率一定的条件下更快更多地传输,还要把数据进行压缩,也就是通过信源编码去掉信息中多余的部分,从而提高通信的有效性,信源编码包括霍夫曼编码.LZ编码等多种..TS 流为MPEG一2传送流,MPEG一2是运动图像专家组(Moving Pictures ExpertGroup)制定的主要用于传输声音.图像数据压缩的标准.MPEG中的关键压缩技术虽然也是DCT.霍夫曼编码等,但是它在图像压缩

TS流解析 四

一 从TS流开始 数字电视机顶盒接收到的是一段段的码流,我们称之为TS(Transport Stream,传输流),每个TS流都携带一些信息,如Video.Audio以及我们需要学习的PAT.PMT等信息.因此,我们首先需要了解TS流是什么,以及TS流是怎样形成.有着怎样的结构. (一) TS流.PS流.PES流和ES流都是什么? ES流(Elementary Stream):基本码流,不分段的音频.视频或其他信息的连续码流. PES流:把基本流ES分割成段,并加上相应头文件打包成形的打包基本码

TS流之代码分析

代码分析前,先要了解TS流基本概念:TS流之基本概念. VLC解析TS流是通过libts库来分离的,libts库使用libdvbpsi库来解TS表. 1. libts库在加载的时候,会将以下如下两个函数注册下去,当接收到PAT或者PMT的时候,会进行调用.PAT和PMT每隔一段时间就会发送一次,以更新节目信息. static void PATCallBack( void*, dvbpsi_pat_t * ); static void PMTCallBack( void *data, dvbpsi

[视频播放] HLS协议之M3U8、TS流详解

本文转载自:<hls之m3u8.ts流格式详解> HLS,Http Live Streaming 是由Apple公司定义的用于实时流传输的协议,HLS基于HTTP协议实现,传输内容包括两部分,一是M3U8描述文件,二是TS媒体文件. 1.M3U8文件 用文本方式对媒体文件进行描述,由一系列标签组成. #EXTM3U #EXT-X-TARGETDURATION:5 #EXTINF:5, ./0.ts #EXTINF:5, ./1.ts #EXTM3U:每个M3U8文件第一行必须是这个tag. #

ffmpeg解析TS流

介绍:  MPEG的系统层编码为不同的应用场景设计了两种格式: TS(Transport Stream) 和PS(Program Stream), 它们两者之间不具有层级关系, 在逻辑上,它们两者都是由PES(Packetized Elementary Stream)包组成的, 所以可以很方便地实现相互转换. TS(Transport Stream): 是将具有一个或多个独立时间基的一个或多个节目(包括音频和视频)组成一个流, 组成同一个节目的基本流(如一个视频流,多个音频流)的PES包有一个共

mpeg2 ts流PAT,PMT,SDT的定义

转自: http://blog.sina.com.cn/s/blog_5ea0192f0100vo15.html 更具体准确的信息请参考iso13818-1,都在里面定义的 PAT的定义:Table_id:为8bit字段,该字段标识节目关联分段,对于PAT,置为0x00. Section_syntax_indicator:1bit字段,对于PAT,置为0x01. Reserved:2bit保留字段,用于将来扩展,置为11. Section_length:12bit字段,指示当前section的长

自己动手写RTP服务器——用RTP协议传输TS流

上一篇文章我们介绍了关于RTP协议的知识,那么我们现在就自己写一个简单的传输TS流媒体的RTP服务器吧. 预备知识 关于TS流的格式:TS流封装的具体格式请参考文档ISO/IEC 13818-1.这里我们只需要了解一些简单的信息就好.首先TS流是有许多的TS Packet组成的,每个TS Packet的长度固定为188 bytes,每个packet都是以sync_byte:0x47开头. MTU(Maximum Transmission Unit): 最大传输单元.是指一种通信协议的某一层上面所

使用VLC发送TS流与播放TS流

一.如何使用VLC发送TS流 1.添加一个文件至VLC 2.选择串流,继续 3.选择UDP,点击添加 4.输入地址及端口 5.选择h.264+mp3(TS) 6.next至播放. 二.如何播放TS流 打开新的VLC,按如下格式输入地址及端口,点击播放.

TS流解析 三

应该说真正了解TS,还是看了朋友推荐的<数字电视业务信息及其编码>一书之后,MPEG2 TS和数字电视是紧密不可分割的,值得总结一下其中的一些关系. ISO/IEC-13818-1:系统部分:ISO/IEC-13818-2:视频:ISO/IEC-13818-3:音频:ISO/IEC-13818-4:一致性测试:ISO/IEC-13818-5:软件部分:ISO/IEC-13818-6:数字存储媒体命令与控制:ISO/IEC-13818-7:高级音频编码:ISO/IEC-13818-8:系统解码实

TS流格式(转)

一 从TS流开始 数字电视机顶盒接收到的是一段段的码流,我们称之为TS(Transport Stream,传输流),每个TS流都携带一些信息,如Video.Audio以及我们需要学习的PAT.PMT等信息.因此,我们首先需要了解TS流是什么,以及TS流是怎样形成.有着怎样的结构. (一) TS流.PS流.PES流和ES流都是什么? ES流(Elementary Stream):基本码流,不分段的音频.视频或其他信息的连续码流. PES流:把基本流ES分割成段,并加上相应头文件打包成形的打包基本码