TS流格式学习

引言

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

这里写图片描述

节目流:它是由一个或多个具有共同时间基的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

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

重要的定义

  • Elementary Stream Clock Reference; ESCR (system) 基本流时钟参考
  • presentation time-stamp; PTS (system) 显示时间标记;PTS(系统):PES 包头中可以存在的、指示系统目标解码器中显示单元的显示时间的一个字段。
  • Program Clock Reference; PCR (system) 节目时钟参考;PCR(系统):从传输流中时间标记推导而来的解码器计时。
  • Program Specific Information; PSI (system) 节目特定信息;PSI(系统):PSI 由对于传输流的多路分解以及节目成功再现所必要的标准数据组成,并在2.4.4 中描述。专门规定的PSI 数据实例是非必备网络信息表。
  • System Clock Reference; SCR (system) 系统时钟参考;SCR(系统):从节目流中时间标记推导而来的解码器计时。
  • system target decoder; STD (system) 系统目标解码器;STD(系统):用于确定ITU-TH.222.0 建议书| ISO/IEC 13818-1 多路复用比特流语义的解码过程的虚拟参考模型。

系统时钟频率

系统时钟频率值以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

  • sync_byte 为固定的8 比特字段,其值为'0100 0111' (0x47)。在对于其他正式出现字段的赋值选择中,诸如PID,应避免sync_byte 仿真

**transport_error_indicator - 1bit - 0 **

  • 置于1 时,它指示在相关传输流包中至少存在1 个不可校正比特错。此比特可以由传输层以外的实体设置为‘1’。设置为‘1’时,此比特应不重新设置为‘0’,除非误差比特值已经校正。

payload_unit_start_indicator - 1bit - 1

  • 对于承载PES包或PSI数据的传输流包,它具有标准含义。
    • 当传输流包有效载荷包含PES包数据时,payload_unit_start_indicator 具有以下意义:‘1’指示此传输流包的有效载荷应随着PES 包的首字节开始,‘0’指示在此传输流包中无任何PES包将开始。若payload_unit_start_indicator 设置为‘1’,则一个且仅有一个PES 包在此传输流包中起始。这也适用于stream_type 6 的专用流;
    • 当传输流包有效载荷包含PSI 数据时,payload_unit_start_indicator 具有以下意义:若传输流包承载PSI分段的首字节,则payload_unit_start_indicator 值必为1,指示此传输流包的有效载荷的首字节承载pointer_field。若传输流包不承载PSI 分段的首字节,则payload_unit_start_indicator 值必为‘0’,指示在此有效载荷中不存在pointer_field。参阅2.4.4.1 和2.4.4.2。这也适用于stream_type 5 的专用流;
    • 对空包而言,payload_unit_start_indicator 必须设置为‘0’。

transport_priority - 1bit - 0

  • 设置为‘1’时,它指示该相关包比具有相同PID 但不具有该比特设置为1 的其他包有更大的优先级。传输机制可以使用该字段优先考虑基本流内的该包数据。取决于应用,transport_priority 字段可以不管PID 或者此字段仅在一个PID 范围内编码。此字段可以由信道特定编码器或解码器来改变。

PID - 13bit - 0 0001 0000 0000

  • PID 为13 比特字段,指示包有效载荷中存储的数据类型。


    这里写图片描述

transport_scrambling_control - 2bit - 00

  • 此2 比特字段指示传输流包有效载荷的加扰方式。
  • 传输流包头以及自适应字段若存在,应不加扰。
  • 在空包的情况中,transport_scrambling_control 字段的值应设置为“00”


    这里写图片描述

adaptation_field_control - 2bit - 11

  • 此2 比特字段指示此传输流包头是否后随自适应字段和/或有效载荷


    这里写图片描述
  • 解码器应丢弃具有adaptation_field_control 字段设置为‘00’值
    的传输流包。
  • 在空包的情况中,adaptation_field_control 的赋值应为‘01’。

**continuity_counter - 4bit - 0000 **

  • 随着具有相同PID 的每个传输流包而增加
  • 当包的adaptation_field_control 为‘00’或‘10’时,
    continuity_counter 不增加。

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 - **

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容

  • 摘要 该配置文件定义了支持高质量音频分发所需的Bluetooth®设备的要求。这些要求以终端用户服务的方式表达,并...
    公子小水阅读 9,423评论 0 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,599评论 18 139
  • 做这个东西很久了,从去年十二月份开始的,快5个月了。。。期间因为工作一直断断续续,直到最近才有了些进展,也就到此为...
    0_0啊阅读 12,351评论 1 13
  • 数字电视有哪几种层次的码流?如何形成?各自特点? ES (Elementary Stream) — 数字电视各组成...
    Annnnnn阅读 2,870评论 0 2
  • 剪秋灯,床下点检寒蛰。玉簞上,几多凄苦,哪堪和梦送长风。月勾更撩人,洗去千里流声。依墙色,已是三更,拈一悟叶知兰成...
    皮卡超阅读 355评论 0 0