TS流格式学习

2016-12-16  本文已影响0人  easyhao

引言

标准文档给自己的定义是:论述了将音频和视频的一个或多个基本流以及其他数据组合成为一个单独的流或多个流,以适于存储或传输。系统编码遵循本规范中提出的句法和语义规则,并且提供信息使得解码器缓冲区可以在各种检索或接收条件下进行同步解码。

这里写图片描述
节目流:它是由一个或多个具有共同时间基的PES 包的流组合成一个单独的流而形成的。
传输流:是将具有一个或多个独立时间基的一个或多个节目组合成为一个单独的流。由组成一个节目的基本流所构成的PES包共享一个公共的时间基。传输流被设计为在易于出错的环境中使用,例如在有损的或嘈杂的媒体中进行存储或传输。传输流的包长度为188 个字节。

引言1 传输流

传输流是一种流定义,适用于在一个可能发生较多错误的环境中传输或存储由遵循ITU-T H.262 建议书 | ISO/IEC 13818-2 和ISO/IEC 13818-3 的编码数据以及其他数据所形成的一个或多个节目。
传输流可能具有固定速率或可变速率;传输流的速率由节目时钟基准(PCR)字段的取值和位置来定义,一般来说对于每种节目都有一个独立的PCR 字段。

引言2 节目流

节目流是一种流定义,适用于在一个不太可能发生误差的环境中传输或存储由编码数据或其他数据所形成的一个节目,在这种情况下,对系统编码的处理,如通过软件进行处理,是一个主要的考虑方面。
节目流可能具有固定速率或可变速率,节目流的速率由系统时钟基准(SCR)字段和复用速率(mux_rate)字段的取值和位置来定义。

引言4 PES

每个传输流和节目流在逻辑上都是由PES 包构造的
属于一个基本流的、具有同一个流ID 的、连续的PES 包序列可能被用于构造一个PES 流
当PES 包被用于构造一个PES 流时,它们必须包含基本流时钟基(ESCR)字段和基本流速率(ES_Rate)字段

引言5 time mode

所有的时序都根据一种公共系统时钟来定义,该时钟被称为一个系统时钟。
在节目流中,此时钟可能与视频或音频采样时钟之间具有一个精确指定的比率,或者其运行频率可能与精确的比率之间有轻微的不同,但仍然能够提供精确的端到端的时序和时钟恢复。
在传输流中,系统时钟频率被限定为在任何时候都应与音频和视频采样时钟之间具有精确指定的比率;此限定的目的是为了简化解码器处的采样速率恢复。

重要的定义

系统时钟频率

系统时钟频率值以Hz 为度量单位且必须满足以下限制:

27 000 000 – 810 ≤ system_clock_frequency ≤ 27 000 000 + 810
system_clock_frequency 的速率变化,每次≤75×10−3 Hz/s

PCR计算

PCR(i) = PCR _ base(i)× 300 + PCR _ ext(i)
PCR_base(i) = ((system_clock_frequency × t(i)) / 300) %2^33
PCR_ext(i) = ((system_clock_frequency × t(i)) / 1)%300

PCR_base:以1/300 的系统时钟频率周期为单位,称之为program_clock_reference_base
PCR-base的作用:
  a. 与PTS和DTS作比较, 当二者相同时, 相应的单元被显示或者解码.
  b. 在解码器切换节目时,提供对解码器PCR计数器的初始值,以让该PCR值与PTS、DTS最大可能地达到相同的时间起点.
   
PCR_ext:以系统时钟频率为单位,称之为program_clock_reference_extension
PCR-ext的作用:
  通过解码器端的锁相环路修正解码器的系统时钟, 使其达到和编码器一致的27MHz.

例如:
时间"03:02:29.012"的PCR计算如下:
03:02:29.012=((3*60+2)*60)+29.012=10949.012s
PCR_base = ((27000000 × 10949.012) / 300) %2^33 = 98541080
PCR_ext = ((27000000 × 10949.012)/ 1) % 300 = 0
PCR = 98541080 * 300 + 0 = 295623324000

语法

首先看前辈们整理出来的一张图:


这里写图片描述

一个TS数据包

47 41 00 30 07 50 00 00 80 F7 7E 00 00 00 01 E0 00 00 80 80 05 21 00 
07 F0 0D 00 00 00 01 09 10 00 00 00 01 67 4D 40 33 95 A0 0F 00 10 FB 
01 40 80 00 01 F4 80 00 75 30 70 00 00 0F 42 40 00 00 F4 24 0D DE 5C 
1F 1C 32 A0 00 00 00 01 68 EE 3C 80 00 00 00 01 06 00 07 81 19 40 00 
46 50 40 80 00 00 00 01 06 01 04 00 00 08 10 80 00 00 00 01 65 B8 04 
04 1F 02 EB 03 FE 13 F0 D4 6D 2C 00 D1 DF 2D C0 00 00 03 00 00 03 
00 00 03 00 00 03 00 00 2F 3D 76 1F D0 53 29 EE 83 00 00 03 00 00 03 
00 00 03 00 00 03 00 04 30 04 00 00 03 00 00 03 00 00 05 EC 00 00 03 
00 00 03 00 00 

包头

这里写图片描述
//包头数据
47 41 00 30

0100 0111 0100 0001 0000 0000 0011 0000

sync_byte - 8bit - 0x47

**transport_error_indicator - 1bit - 0 **

payload_unit_start_indicator - 1bit - 1

transport_priority - 1bit - 0

PID - 13bit - 0 0001 0000 0000

transport_scrambling_control - 2bit - 00

adaptation_field_control - 2bit - 11

**continuity_counter - 4bit - 0000 **

data_byte

//adaptation_field + body
07 50 00 00 80 F7 7E 00 00 00 01 E0 00 00 80 80 05 21 00 07 F0 0D 00 
00 00 01 09 10 00 00 00 01 67 4D 40 33 95 A0 0F 00 10 FB 01 40 80 00 
01 F4 80 00 75 30 70 00 00 0F 42 40 00 00 F4 24 0D DE 5C 1F 1C 32 A0 
00 00 00 01 68 EE 3C 80 00 00 00 01 06 00 07 81 19 40 00 46 50 40 80 
00 00 00 01 06 01 04 00 00 08 10 80 00 00 00 01 65 B8 04 04 1F 02 EB 
03 FE 13 F0 D4 6D 2C 00 D1 DF 2D C0 00 00 03 00 00 03 00 00 03 00 00 
03 00 00 2F 3D 76 1F D0 53 29 EE 83 00 00 03 00 00 03 00 00 03 00 00 
03 00 04 30 04 00 00 03 00 00 03 00 00 05 EC 00 00 03 00 00 03 00 00

自适应字段

因为上面包头中adaptation_field_control - 2bit - 11,所以包头之后应该有自适应字段,并且

这里写图片描述
这里写图片描述

**adaptation_field_length - 8bit - **

上一篇 下一篇

猜你喜欢

热点阅读