数字电视TS码流协议简要分析

2021-08-12 10:53唐文昊廖斌兰唐霓云莫东海
视听 2021年8期
关键词:码流视频流信源

唐文昊 廖斌兰 唐霓云 莫东海

一、IP封装的TS码流

TS码流经过IP打包后能被网络设备转发和交换,通过光纤、卫星、微波等方式接入各个台站。信源交换机的监控口静态绑定了码流的组播地址,使监控口始终转发码流。通过抓包可以观察到标准网络帧结构。每个帧长为1358字节,包括MAC头(14字节)、IP头(20字节)、UDP头(8字节)和7个码流包(每个188字节)共1358字节。一个帧最多封装七个码流包,否则会超过以太帧的最大长度上限1518字节而无法传输。

如图1所示,抓包工具Wireshark中显示的帧结构,有七个以ISO/IEC开头的行,每行标识一个标准码流包。PID和CC是码流包头部中的两个重要参数:包ID和连续计数。

图1 卫星接收机发出的被封装的TS码流

二、TS码流包及其头部

TS码流传输使用了IP组播技术,组播地址为IP报文的目的地址,一份码流能同时被转发到多个设备(如IP复用器、码流记录仪、分析仪、自台监控服务器等),只需给接收设备添加组播地址加入组播组即可。分析时根据逻辑连接进行过滤,把光纤信源中央八套节目码流(12.171.30.93:2560->239.171.30.5:4000)分离出来,再将各底层头部剥除,留下应用层的码流包。码流包长度为188字节,包含4字节头部和184字节载荷。载荷既可以是音视频编码数据,也可以是控制信息表PSISI。图2为光纤信源中央八套节目TS码流中的“空”码流包。

图2 光纤信源中央八套节目TS码流中的“空”码流包

TS码流包中的数据是大尾(big-endian)字节序,数据的低位保存在内存的高地址,与Windows系统相反。“空”码流包的载荷部分全部是0xff,只有头部有数据。4字节的头部包含了8个参数,分别是同步字节、传输误码指示符、有效荷载单元起始指示符、传输优先级、PID、传输加扰控制、自适应控制和连续计数器。第一个字节是固定的0x47,‘G’的ASCII码,标识码流包起始位置,错误或丢失将产生290一级错误中的同步字节错误或同步丢失错误。PID(Packet ID)用中间的13个比特表示,标识此码流包的类型,即数据载荷解析的方式,标识此包是音、视频还是信息表。PID为0x1ffff时为“空”包,载荷不需要解析。连续计数用末尾的4个比特标识,同类型的下一个包的计数值会递增,计数值累计到0xf之后再回到0。组播的传输层是UDP协议,没有保证可靠交付,网络不良时会使连续计数乱序、丢失,从而产生一级错误中的连续计数错误。

三、PSI(节目专用信息)

TS码流中还存在其他控制信息PSI和SI(业务信息)。PSI定义了4种表(有资料说5种),SI定义了9种表。PSI的作用是从码流中定位节目的音视频流,是必备的。SI根据业务功能不同是可选的。PSI中用于定位节目音视频流的表有两种:PAT(节目关联表)和PMT(节目映射表)。定位过程如下。

1.PAT的PID固定为0,可从码流中直接找出PAT,一个码流只有一个PAT流;

2.PAT中包含一或多个PMT的PID,可根据PAT找出码流中所有的PMT,码流中有多少个节目就有多少个PMT流;

3.PMT中包含节目的音、视频流的PID,可根据PMT找出码流中的音视频流并提取出PES(打包的基本流);

4.由PES解包出ES(基本流)再送入解码器解码。

在光纤信源中央八套节目码流中,每秒传输5个PAT包。其数据载荷是一样的,只有头部的连续计数在递增。光纤信源中央八套节目TS码流PAT包的头部如图3所示。包头以0x47开头,PID为0,数据载荷作为PAT解析。第三项Payload Unit Start Indicator:1,说明这是PAT的第一个码流包,如果表很大,会被分到多个码流包中。

图3 光纤信源中央八套节目TS码流PAT包的头部

如图4,PSI的第一个码流包中,头部之后的一字节(第5个字节)表示指针域(也叫适配域长度),指出到PAT还有多少字节。这里为0,所以PAT从第6个字节开始,再根据PAT第四项表示的长度45字节(从此项之后开始算),PAT到第54个字节结束,只占用一个码流包,之后用0xff填充。

图4 光纤信源中央八套节目TS码流PAT包

PAT前8字节的结构固定,第4、5字节表示码流ID,占16bit,理论上一个连接可以传输65535个码流。从第9字节开始,是包含九个元素的数组,每个元素4字节,共36字节。每个元素包含2字节的节目号和2字节的PMT的PID,PID用低13位标识,但第一个元素是例外,它的节目号为0,PID是NIT(网络信息表)的PID(固定的0x10)。之后的八个元素对应了中央八套节目。以第二个元素为例,节目号为0x12d,它的PMT的PID是0x101,如图5所示。

图5 节目号0x12d的PMT包

每秒钟有3、4个同节目的PMT包传输。PMT表从第6个字节开始,前12个字节的结构固定。第11、12字节的低12位表示节目的描述信息长度,这里为5,此后紧跟5字节的描述信息。信息类型由第1字节的tag决定,这里是最大传输比特率。描述信息之后紧接着多个流信息,流信息前5个字节的结构是固定的。此PMT中总共包含两个流信息,第1字节表示流的类型,值分别为0x42和0x6,表示AVS视频和AC3音频。第2、3字节的低13位表示流的PID,值分别为0x200和0x28a。第4、5字节的低12位表示流描述信息总长度。因为描述信息本身含有长度,所以可以判断出每个描述信息的位置。第一个流信息包含2个描述信息,第二个流信息则包含4个描述信息。描述信息包括流ID、最大比特率、注册信息、网络层信息等。至此,节目的AVS视频流PID=0x200、AC3音频流PID=0x28a已找出。

四、时钟与节目名称

PCR是节目参考时钟,由编码器生成,供解码器解码时进行同步。PMT开头第9、10字节低13位标识PCR存在的PID,在图5中是0x200。也就是说,这里的PCR只穿插在视频流中,音频流中没有(PCR可以插入音频流,也可以使用自己独立的PID)。带有PCR的视频流包每秒有5个。PCR存在于视频流中的适配域,头部之后的第5字节指针域(适配域长度)在PAT、PMT中为0,而带有PCR的视频流包中是7。7字节中的第1字节是8个标志位,PCR标志置1。后6字节是参考时钟,参考时钟会有规律地递增。实际上PCR只用了42位,包括33位基础位和9位扩展位。扩展位是基础位的低位,表达更精细的数值,最大值是300而不是512,超过300归零并给基础位加1。除了PCR,PES层中还有两个同步信息DTS和PTS,同步机制比较复杂,这里不详细展开。

SDT(服务描述表)中包含了节目的类型、名称等信息,它的PID是固定的0x11。SDT表起始的11个字节的头部也是固定的。在中央八套节目TS码流的SDT中,头部之后跟着的是8个服务(节目)描述信息。第一个描述信息描述了节目号为0x12d的节目。在描述信息的服务名字段中,可以看到节目名称为CCTV-1。

五、总结

ISO13818-1码流标准已经使用了十几年,它详细地定义了音视频流及其控制信息,是一套非常成熟的传输标准。标准中定义的TS流不但能单独传输,也容易被TCP/IP等网络承载。码流的使用者只要了解重要的部分,借助码流分析仪或码流分析软件,就能迅速地判断码流信号质量的高低,分析码流质量变差的原因,找到问题根源,对码流进行恢复。

猜你喜欢
码流视频流信源
边缘实时视频流分析系统配置动态调整算法研究
基于极化码的分布式多信源信道联合编码
广播无线发射台信源系统改造升级与实现
基于视频流传输中的拥塞控制研究
高清网络摄像机图像延迟分析及解决方案
可信度的博弈: 伪健康信息与纠正性信息的信源及其叙事
基于空间差分平滑的非相关与相干信源数估计*
铁路货场智能大门集装箱全景图像采集方法研究
如何对数字电视信号进行有效监测
美国视频流市场首现饱和征兆