MPEG2-TS的小结 [1] (2008-07-27 10:23)
分类: DVB相关

1. 简述

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:系统解码实时接口;

MPEG2系统任务包括:

1. 规定以包传输数据的协议;

2. 规定收发两端数据流同步的协议;

3. 提供多个数据流的复用和解复用协议;

3. 提供数据流加密的协议。

以包形式存储和传送数据流是MPEG2系统之要点。

2. ES数据流

ES是直接从编码器出来的数据流,可以是编码过的视频数据流,音频数据流,或其他编码数据流的统称。ES流经过PES打包器之后,被转换成PES包。PES包由包头和payload组成,具体格式摘录如下:

<!--[if !vml]--><!--[endif]-->

在PES层,主要是在PES包头信息中加入PTS(显示时间标签)和DTS(解码时间标签)用于视频、音频同步。

其实,Mpeg-2用于视音频同步以及系统时钟恢复的时间标签分别在ES,PES和TS这3个层次中。在ES层,与同步有关的主要是视频缓冲验证VBV(Video Buffer Verifier),用以防止解码器的缓冲器出现上溢或下溢;在PES层,主要是在PES头信息里出现的显示时间标签PTS(Presentation Time Stamp)和解码时间标签DTS(Decoding Time Stamp);在TS层中,TS头信息包含了节目时钟参考PCR(Program Clock Reference),用于恢复出与编码端一致的系统时序时钟STC(System Time Clock)。

我们先看看从ES到PES的过程:

<!--[if !vml]--><!--[endif]-->

基本流程如下:首先MPEG-2压缩编码得到的ES基本流,这个数据流很大,并且只是I,P,B的这些视频帧或音频取样信息,然后加入一些同步信息,打包成长度可变长度的数据包PES,原来是流的格式,现在成了数据包的分割形式。同时要注意的是,ES是只包含一种内容的数据流,如只含视频,或只含音频等,打包之后的PES也是只含一种性质的ES,如只含视频ES的PES,只含音频ES的PES等。可以知道,ES是编码视频数据流或音频数据流,每个ES都由若干个存取单元(AU)组成,每个视频AU或音频AU都是由头部和编码数据两部分组成,1个AU相当于编码的1幅视频图像或1个音频帧,也可以说,每个AU实际上是编码数据流的显示单元,即相当于解码的1幅视频图像或1个音频帧的取样。PEG-2对视频的压缩产生I帧、P帧、B帧。把帧顺序I1,P4,B2,B3,P7,B5,B6帧的编码ES,通过打包并在每个帧中插入 PTS/DTS标志,变成PES。在插入PTS/DTS标志时,由于在B帧PTS和DTS相等,所以无须在B帧多插入DTS。而对于I帧 和P帧,由于经过复用后数据包的顺序会发生变化,显示前一定要存储于视频解码器的从新排序缓存器中,经过从新排序后再显示,所以一定要同时插入PTS和 DTS作为从新排序的依据。

其中,有否PTS/DTS标志,是解决视音频同步显示、防止解码器输入缓存器上溢或下溢的关键所在。PTS表明显示单元出现在系统目标解码器(STD- System Target Decoder)的时间, DTS表明将存取单元全部字节从STDES解码缓存器移走的时刻。视频编码图像帧次序为 I1,P4,B2,B3,P7,B5,B6,I10,B8,B9的ES,加入PTS/DTS后,打包成一个个视频PES包。每个PES包都有一个包头,用于定义PES内的数据内容,提供定时资料。每个I、P、B帧的包头都有一个PTS和DTS,但PTS与DTS对B帧都是一样的,无须标出B帧的DTS。对I帧和P帧,显示前一定要存储于视频解码器的重新排序缓存器中,经过延迟(重新排序)后再显示,一定要分别标明PTS和DTS。例如,解码器输入的图像帧次序为I1,P4,B2,B3,P7,B5,B6,I10,B8,B9,依解码器输出的帧次序,应该P4比B2、B3在先,但显示时P4一定要比B2、B3在后,即P4要在提前插入数据流中的时间标志指引下,经过缓存器重新排序,以重建编码前视频帧次序I1,B2,B3,P4,B5,B6,P7,B8,B9,I10。显然,PTS/DTS标志表明对确定事件或确定信息解码的专用时标的存在,依靠专用时标解码器,可知道该确定事件或确定信息开始解码或显示的时刻。例如,PTS/DTS标志可用于确定编码、多路复用、解码、重建的时间。

3. PS数据流

上节说过,ES首先需打包成PES流包,然后PES根据需要打包成PS或TS包进行存储或传输。其每路ES只包含一路信源的编码数据流,所以每路PES也只包含相对应信源的数据流。

对 PS流而言,每个PES包头含有PTS和DTS,流识别码,用于区别不同性质ES。然后通过PS复用器将PES包复用成PS包。实际上是将PES 包分解为更细小的PS包。在解码的时候,解复用器将PS分解成一个个PES包,拆包器然后将PES包拆成视频和音频的ES,最后输入至各自解码器进行解码。一个问题是:各个ES在解码时,如何保证视音频的同步呢?除了PTS和DTS的配合工作外,还有一个重要的参数是SCR(system clock reference)。在编码的时候,PTS,DTS和SCR都是由STC(system time clock)生成的,在解码时,STC会再生,并通过锁相环路(PLL-phase lock loop),用本地SCR相位与输入的瞬时SCR相位锁相比较,以确定解码过程是否同步,若不同步,则用这个瞬时SCR调整27MHz的本地时钟频率。最后,PTS,DTS和SCR一起配合,解决视音频同步播放的问题。PS格式摘录如下:

byte 0

byte 1

byte 2

byte 3

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

0000 0000 0000 0000 0000 0001

start code

1011 1010

PACK identifier

byte 4

byte 5

byte 6

byte 7

byte 8

byte 9

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

01

SCR 32..30

1

SCR 29..15

1

SCR 14..00

1

SCR_ext

1

byte 10

byte 11

byte 12

byte 13

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

Program_Mux_Rate

1

1

reserved

pack_stuffing_length

PS包的长度比较长且可变,主要用于无误码环境里,因为越长的话,同步越困难,且在丢包的情况下,重组也越困难。所以,PS适合于节目信息的编辑和本地内容应用的application。

4. TS数据流

TS流也是由一个或多个PES组合而来的,他们可以具有相同的时间基准,也可以不同。其基本的复用思想是,对具有相同时间基准的多个PES现进行节目复用,然后再对相互有独立时间基准的各个PS进行传输复用,最终产生出TS。TS包由包头和包数据2部分组成,其中包头还可以包括扩展的自适用区。包头长度占4bytes,自使用区和包数据共占184bytes,整个TS包长度相当于4个ATM包长。TS包的包头由如下图摘录所示的同步字节、传输误码指示符、有效载荷单元起始指示符、传输优先、包识别(PID-Packet Identification)、传输加扰控制、自适应区控制和连续计数器8个部分组成。

<!--[if !vml]--><!--[endif]-->

对上面的各个字段简单说明一下:

Partial Transport Stream Packet Format

Name

Number
of bits

Description

sync byte

8

0x47

Transport Error Indicator (TEI)

1

Set by demodulator if can't correct errors in the stream[2]

Payload Unit Start Indicator

1

1 means start of PES data or PSI otherwise zero only .

Transport Priority

1

One means higher priority than other packets with the same PID.

PID

13

Packet ID

Scrambling control

2

'00' = Not scrambled.   The following per DVB spec [3]:   '01' = Reserved for future use,   '10' = Scrambled with even key,   '11' = Scrambled with odd key

Adaptation field exist

1

1 means presence of the adaptation field

Payload data exist

1

1 means presence of data

Continuity counter

4

Note: the total number of bits above is 32 and is called the transport stream 4-byte prefix.

Adaptation field

0 or more

Depends on flags

Payload Data

0 or more

Depends on flags

Adaptation Field Format

Name

Number
of bits

Description

Adaptation Field Length

8

Number of bytes in the adaptation field immediately following this byte

Discontinuity indicator

1

Set to 1 if a discontinuity occurred in the continuity counter of the TS packet

Random Access indicator

1

Set to 1 if the PES packet in this TS packet starts a video/audio sequence

Elementary stream priority indicator

1

1 = higher priority

PCR flag

1

1 means adaptation field does contain a PCR field

OPCR flag

1

Splicing point flag

1

1 means presence of splice countdown field in adaptation field

Transport private data flag

1

1 means presence of private data bytes in adaptation field

Adaptation field extension flag

1

1 means presence of adaptation field extension

Below fields are optional

variable

Depends on flags

PCR

33+9

Program clock reference

OPCR

33+9

Original Program clock reference. Helps when one TS is copied into another

Splice countdown

8

Indicates how many TS packets from this one a splicing point occurs (may be negative)

stuffing bytes

variable

其中,在包头中:

同步字节(sync byte)的自动相关特性,检测数据流中的包限制,建立包同步;

传输误码指示符(Transport Error Indicator),指有不能消除误码时,采用误码校正解码器可表示1bit 的误码,但无法校正;

有效载荷单元起始指示符(Payload Unit Start Indicator),表示该数据包是否存在确定的起始信息;

传输优先级(Transport Priority),是给TS包分配优先权;PID值是由用户确定的,解码器根据PID将TS上从不同ES来的TS包区别出来,以重建原来的ES;

传输加扰控制(Scrambling control),可指示数据包内容是否加扰,但包头和自适应区永远不加扰;

自适应区控制存在字段(Adaptation field exist),用2 bit表示有否自适应区,即(01)表示有有用信息无自适应区,(10)表示无有用信息有自适应区,(11)表示有有用信息有自适应区,(00)无定义;

载荷存在标记字段(Payload data exist),1一位着存在载荷;

连续计数器(Continuity counter)可对PID包传送顺序计数,据计数器读数,接收端可判断是否有包丢失及包传送顺序错误。显然,包头对TS包具有同步、识别、检错及加密功能。

TS包自适应区由自适应区长、各种标志指示符、与插入标志有关的信息和填充数据4部分组成。其中标志部分由间断指示符、随机存取指示符、ES优化指示符、PCR标志、接点标志、传输专用数据标志、原始PCR标志、自适应区扩展标志8个部分组成。重要的是标志部分的PCR字段,可给编解码器的27MHz时钟提供同步资料,进行同步。其过程是,通过PLL,用解码时本地用PCR相位与输入的瞬时PCR相位锁相比较,确定解码过程是否同步,若不同步,则用这个瞬时PCR调整时钟频率。因为,数字图像采用了复杂而不同的压缩编码算法,造成每幅图像的数据各不相同,使直接从压缩编码图像数据的开始部分获取时钟信息成为不可能。为此,选择了某些(而非全部)TS包的自适应区来传送定时信息。于是,被选中的TS包的自适应区,可用于测定包信息的控制bit和重要的控制信息。自适应区无须伴随每个包都发送,发送多少主要由选中的TS包的传输专用时标参数决定。标志中的随机存取指示符和接点标志,在节目变动时,为随机进入I帧压缩的数据流提供随机进入点,也为插入当地节目提供方便。自适应区中的填充数据是由于PES包长不可能正好转为TS包的整数倍,最后的TS包保留一小部分有用容量,通过填充字节加以填补,这样可以防止缓存器下溢,保持总码率恒定不变。

转载于:https://www.cnblogs.com/moonvan/archive/2011/10/22/2221268.html

MPEG2-TS的小结 [1]相关推荐

  1. MPEG2 TS小结

    1. 应该说真正了解TS,还是看了朋友推荐的<数字电视业务信息及其编码>一书之后,MPEG2 TS和数字电视是紧密不可分割的,值得总结一下其中的一些关系. ISO/IEC-13818-1: ...

  2. MPEG2 TS与ISMA的比较

    简单的比较如下: MPEG-2 TS/UDP方式将媒体数据,包括视频.音频和其他数据封装成MPEG-2 TS格式,再承载在UDP和IP协议之上,其优点是能够承载不同编码标准的媒体数据,并且视频和音频数 ...

  3. MPEG2 TS 总汇

    MPEG2 TS的基本格式,其中包括PES,PS和TS,以及相关字段的介绍.那么作为一种传输流,TS将内容进行打包/复用,让其媒体内容变成TS传输,并最终在解码端解码.简单来看,TS是一个传输层的协议 ...

  4. MPEG2 -TS流结构详细浅析

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

  5. MPEG-2传输流的码流分析(PS与TS码流)

    0 引言 目前,我国数字电视的信道传输的三种主要传输方式都有了统一明确的国家标准.其主要差别是信道编码.调制方法,但视频和音频信源处理和系统层复用都是以MPEG-2为基础的编码方案.MPEG-2标准自 ...

  6. MEPG2 -TS小结

    应该说真正了解TS,还是看了朋友推荐的<数字电视业务信息及其编码>一书之后,MPEG2 TS和数字电视是紧密不可分割的,值得总结一下其中的一些关系. ISO/IEC-13818-1:系统部 ...

  7. ts转换mp4 linux_佳佳MPEG4格式转换器官方版下载-佳佳MPEG4格式转换器v6.5.5.0下载

    很多情况下需要对视频格式转换才能正常观看,下面就由微侠网小编给您介绍这款软件,佳佳MPEG4格式转换器是专业的MPEG4.H264和MP4格式转换工具,软件支持将MPEG4视频转换成多种格式音频播放, ...

  8. 多媒体文件格式之TS

    TS流是MPEG-2标准中定义一种用于直播的码流结构,具有很好的容错能力.所有跟TS相关的标准可以从ISO/IEC_13818-1中找到. 通常TS流的后缀是.ts..mpg或者.mpeg,多数播放器 ...

  9. TS 188字节流结构图

    应该说真正了解TS,还是看了朋友推荐的<数字电视业务信息及其编码>一书之后,MPEG2 TS和数字电视是紧密不可分割的,值得总结一下其中的一些关系. ISO/IEC-13818-1:系统部 ...

最新文章

  1. 【ACM】CODE[VS] 1215 (DFS)
  2. python退出程序-【转】python 退出程序的方式
  3. 日志中台不重不丢实现浅谈
  4. git pull 报错:Untracked Fles Preventing Merge
  5. 通过运行示例从WSO2 ESB开始
  6. rocketmq存储结构_阿里专家分享内部绝密RocketMQ核心原理与最佳实践笔记
  7. VUE的数据双向绑定
  8. python消息中间件activemq_python 发送和接收ActiveMQ消息的实例
  9. linux里没有vi编辑器怎么办,如果是linux没有vi、vim等编辑器如何操作
  10. 中国移动云MAS平台 HTTP(JAVA版) 接口发送普通短信
  11. linux shell 中的idd,shell脚本入门教程.pdf
  12. Hibernate基础知识整理(三)
  13. 身为一名Java程序员,在面试的时候常常被问到的,下面我总结一些常常别问到的问题。
  14. Jupyter Notebook打开出现“python.exe无法找到入口 无法定位程序输入点...动态链接库E:\Anaconda3\pythoncom36.dll上”
  15. 我是如何从通信转到Java软件开发工程师的?
  16. 10种网站推广的常用方法
  17. gcc利用-m32编译报错问题处理
  18. 点击按钮复制微信号/公众号,并打开微信APP搜索H5如何制作。
  19. 双系统下卸载Ubuntu方法
  20. C++单个配置与多个配置

热门文章

  1. SQL Server text field里面有换行符的时候copy到excel数据会散乱
  2. BlackBerry 开发笔记入门 控件简介
  3. linux sort 命令详解
  4. 谷歌地图最新hosts_如何查看2020最新版谷歌地球高精度卫星地图(附下载方法)...
  5. MyBatis,动态传入表名,字段名的解决办法
  6. Linux中的Screen命令使用技巧详解
  7. python脚本下载sentinel数据_Python API sentinelsat下载错误
  8. linux进程--进程调度算法(十三)
  9. OVS DPDK vs OVS Deep Dive(十六)
  10. python文件运行问题