PS和TS

PS和TS本质上都是封装那么是什么是封装?TS和PS又分别是什么哪?

目录

MPEG-2

封装

PS

TS

比较


MPEG-2

封装

  • 将视频和音频文件打包到一起,遵循一定的规则和顺序建立排序和索引,便于播放器进行播放。
  • 对封装来说,最重要的是音视频同步信息的维持
  • flv、ts、ps、mp4、AVI、RTP
    • 从使用范围来看, MP4主要适用于文件的存储。 TS、RTP适用于数据流的传输,不具有存储属性。PS既有存储属性又可以做实时流的传输。
  • 流程:
    • 首先有编码好的音视频数据(ES)
    • 根据想要封装好的格式选择合适的封装器
    • 利用封装器进行封装
  • ES(elementary stream):基本码流,是编码后的音频和视频数据
  • PES(packet elementary stream):将ES根据需要分割成长度不同的数据包,再加上包头得到PES
    • 这一步将一个连续的长流分割成短流,便于在网络中分组发送
  • DVD和DVB
    • DVD(digital video disk)数字视频光盘(PS)
    • DVB(digital video broadcast)数字视频广播(TS)

PS

  • PS(program stream):节目流
  • PS流有一个结束码MPEG_program_end_code:占位32bit,其值为0x000001B9,PS流总是以0x000001BA开始,以0x000001B9结束,对于一个PS文件,有且只有一个结束码0x000001B9,不过对于网传的PS流,则应该是没有结束码的;

TS

  • 前面在RTMP、FLV、HLS那篇文章中提到了HLS中数据的封装格式为ts
    • TS在拉流端(HLS在拉流端)
  • TS(transport stream):传送流
  • 将不同的PES根据共同或者独立的时间基准组合成一个TS流(用于数据传输)
    • 将ES分割之后打包得到PES
    • PES复合得到TS流
  • TS是位流格式,可以按位存取
    • TS包:188字节
    • 一个TS包中有多个PES
      • ES首先根据内容分割成长度不同的小段,然后给这些小段加上header就得到了PES
      • PES复用得到TS包(188字节)
      • PES头中加入PTS(显示时间标签)和DTS(解码时间标签)用于时钟同步
    • TS包:包头、负载
    • packet header
      •  信息位数解释
        1syn_data8 bits同步字节
        2transport_error_indicator1 bit错误信息(1:该包至少有一位传输错误)
        3payload_unit_start_indicator1 bit负载单元开始标志
        4transport_priority1 bit传输优先级(1表示优先级高)
        5PID13 bit唯一标示一个TS包(有些特定类型的字段拥有特定的PID)
        6transport_scrambling_control2 bits是否加密(00表示未加密,其余表示加密)
        7adaptation_field_control2 bits附加区域控制
        8continuity_counter4 bits包增加计数
      • PID决定packet中的数据类型(PAT、视频、音频)

        • PID
          PAT0x0000
          CAT0x0001
          TSDT0x0002
          EIT,ST0x0012
          RST,ST0x0013
          TDT,TOT,ST0x0014
        • 当看到一个PID的时候我们可以判断出其数据类型,每个PID又唯一表示一个数据包
      • 实例

        •  

           

           

          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个

                   

    • 负载

      • TS:包头、填充字节、PES

  • PAT和PMT

    • PSI(program specific information):节目特定信息,用于传输流的多路分解和节目成功再现的标准信息,在TS流中是一个包

      • PAT、PMT、CAT、TSDT、NIT、IPMP控制信息表

    • PES中的内容可以是PAT也可以是PMT或者音视频数据

    • PAT

      • PAT(program association table)节目关联表,定义了当前TS流的所有节目,包含了节目的编号、节目对应的PMT的PID以及NIT(网络信息表)的PID,也就是说根据PID可以知道TS流中有哪些节目,以及节目所对应的具体信息(根据PMT找到节目元)和网络状况信息

      • PID为0x0000,当播放器对TS流进行检索分析的时候,首先找到PID为0x0000的包进行分析

      • 所有的TS流的解析都是从寻找PAT表开始的,只有找到了PAT表,我们才能继续下一步的解析。

    • PMT(program map table):节目所对应的节目元的信息

      • 包含这个节目的视频和音频信息

    • NIT(network information table):多组传输流和传输网络相关的信息

    • PCR(program conference reference):节目时钟参考,用于恢复出和编码端相同的系统时序时钟

  • TS中的节目
    • 节目的单位是节目元,节目元可以是基本流
    • TS流含有独立时基的一个或多个program, 一个program又可以包含多个视频、音频、和文字信息的ES流; 每个ES流会有不同的PID标示. 而又为了可以分析这些ES流, TS有一些固定的PID用来间隔发送program和ES流信息的表格: PAT和PMT表。适用于误码较多的环境。
  • 解码过程
    • 获取TS的PAT,根据PAT得到PMT的位置
    • 获得PMT,根据PMT得到当前网络中传输的音视频的格式(H264),相应的PID和PCR(时钟同步信号)
    • 找到相应的TS包,以及其payload,这样就能得到PES
    • 拼帧:在TS header中有一些关于此 payload属于哪个 PES的 第多少个数据包。 因此软件中应该将此payload中的数据copy到PES的buffer中,用于拼接一个PES包。
    • 拼接好的PES去掉PES header就是ES
    • I帧、P帧、B帧在ES中
    • ES进行解码,然后利用PES中的PTS(显示时间标签)和DTS(解码时间标签)进行音视频同步得到音视频数据。
  • 编码过程
    • ES:I帧、P帧、B帧编码后的数据(H264)就组成了ES
      • 流:视频编码流或音频编码流
      • 每个ES只包含一种数据,比如音频或者视频
      • ES的单元:AU
        • AU:视频AU或者音频AU
        • AU:头部和编码数据
        • AU:一帧图像
    • PES
      • 分割的形式
      • ES分割成长度可变的数据包,加入同步信息(PTS和DTS)然后打包得到PES
        • B:PTS和DTS相同
        • I和P:PTS和DTS不同,经过复用之后数据包的顺序被打乱,显示前需要将这个两个信息存储于从新排序缓冲中,经过重新排序时,用这两个信息作为排序的依据
      • 打包后的PES也只含有一种数据
    • TS
      • PES包在复用之后得到TS

比较

  • TS流可以在不稳定环境中传输,而PS必须在稳定环境中传输,为什么
    • TS流是固定长度的流,其长度固定为188字节,而PS流的包是可变长度的
    • 当传输误码破坏了TS的同步信息时,接收机可以在固定的位置检查其后面信息的同步信息,从而恢复同步,避免信息的丢失
    • 当传输误码破坏了PS的同步信息时,由于PS包的长度是可变的。接受机无法找到特定的位置检查到同步信息,从而造成同步信息丢失,造成很严重的后果
    • 因此,需要在稳定环境(传输误码率低)中传输PS流
    • 目前在MPEG-2中采用TS流
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值