直播信号

新西兰·尼尔森湖国家公园
(本文基本逻辑:TS 封装格式概览 → TS 层解析 → PES 层解析 → ES 层解析)
TS 全称是 MPEG2-TS,是一种音视频封装格式,其中 TS 表示 Transport Stream。MPEG2-TS 定义于 MPEG-2 第一部分:系统(即 ISO/IEC 标准 13818-1 或 ITU-T Rec. H.222.0)。
TS 主要是用于传输流,它可以实时传输节目内容,这就要求从传输流的任一片段开始都是可以独立解码的,在直播中可以用到。也正是因为 TS 任一切片开始都可以独立解码,所以它非常适合按切片的方式存储直播内容。TS 流中不支持快进快退,这个需要从协议层来支持,比如 HLS 协议对相关的能力做了定义。
TS 流的结构整体可以分为几个层次:
下图是 TS 格式的结构:
TS 层的数据包大小固定,必须为 188 字节。其中包括:头部(TS Header)和载荷(Payload Data)这 2 个部分,其中 TS Header 又包括固定长度部分和可选部分,固定部分长度为 4 字节,可选部分包括适配域(Adaptation Field)。
对于 TS 层数据结构的描述如下图所示:2.1、头部
TS Header 主要包含的数据主要是传输流的头信息,用于传输和包分组。这些数据包括固定长度部分和可选部分。2.1.1、固定部分
TS Header 的固定部分为 4 字节,包括下列字段:,同步字节,为固定的 8 比特字段,其值为 。在对于其他正式出现字段的
赋值选择中,比如 PID,应避免和 sync_byte 重复。,传输错误指示位,1 比特,发送时(调制前)值为 0。接收方的解调器在无法成功解调(即使有前向纠错机制)TS 分组内容时,将该位设置为 1,表示该 TS 分组损坏。,载荷单元开始指示位,1 比特,负载单元起始标示符,一个完整的数据包开始时标记为 1, 表示携带的是 PES 或 PSI 第一个包。PSI(Program Specific Information)由对于传输流的多路分解以及节目成功再现所必要的标准数据组成。,传输优先级,1 比特,值为 1 时,在相同 PID 的分组中具有更高的优先权。传输机制可以使用该字段优先考虑基本流内的该包数据。,用于识别 TS 分组的 ID,13 比特。一个 PID 对应一个特定的 PES。,传输加扰控制,2 比特。值为 时表示载荷未加扰。其余值由具体系统定义。,适配域存在标志,2 比特。值的含义如下:,供未来使用,由 ISO/IEC 所保留。解码器应丢弃设置为 值的传输流包。,无 adaptation_field,仅有效载荷。在空包的情况中,值应为 。,仅有 Adaptation_field,无有效载荷。,Adaptation Field 后跟着有效载荷。,连续性计数器,4 比特。取值为 到 ,循环使用。用于检查同一个 PID 的 TS 分组的连续性。每当一个 TS 分组中包含载荷时,该计数器加 1。
以上便是 TS Header 固定部分的所有字段,一共 32 比特,4 字节。2.1.2、适配域
适配域(Adaptation Field)中的数据主要用于携带一些额外信息以及做数据填充以确保 TS 的一个包大小固定在 188 字节。
当 TS Header 中的 字段值为 或 时,这就表明存在适配域(Adaptation Field)部分。
对于 Adaptation Field 部分的数据结构的描述如下图所示:
总体来讲,适配域数据填充部分是配合着载荷(Payload Data)部分来的,载荷部分数据多,则适配域的填充数据少,反之亦然,最终保证 TS 的包大小为 188 字节。
适配域的部分字段解释:,适配域部分的长度,8 比特。单位为字节,不包含当前字段字节。0 值表示传输流包中插入单个填充字节。当 值为 时,此时表示后面有载荷, 值必须在 0 到 182 的区间内。当 值为 时,此时表示后面无载荷, 值必须为 183。对于承载 PES 包的传输流包,只要存在欠充足的 PES 包数据就需要通过填充来完全填满传输流包的有效载荷字节。,不连续指示位,1 比特。如果根据连续性计数器或 PCR 计算,确认当前分组处于不连续状态,则取值为 1。不连续性指示符用于指示两种类型
的不连续性,系统时间不连续性和 不连续性。,随机访问指示位,1 比特。如果当前分组是一个 PES 的起始,取值为 1。,ES 优先级指示位,1 比特。表示有效载荷内承载的基本流数据的优先级, 表示该有效载荷具有
比其他传输流包有效载荷更高的优先级。,PCR 标识位,1 比特。1 表示适配域存在 PCR 数据。 + ,即 PCR(Program Clock Reference)数据。结构为 33 位的基础部分 + 9 位的扩展部分,共 42 比特。PCR 表示包含 最后比特的字节到达系统目标解码器输入端的预期时间。它用于时钟同步,使得解码后的内容可以正确地同步播放。,倒数计数器,8 比特。可以为正或负的值。正值表示传输流中有相同 PID 的距离拼接点剩余传输流包的数量。复制的传输流包和仅包含自适应字段的传输流包被排除。相关 字段达到零的传输流包中的最后字节之后的位置即为拼接点的定位。在 达到零的传输流包中,传输流包有效载荷的最后数据字节必须是编码音频帧或编码图像的最后字节。,私有数据,8 比特。可包含多组。,拼接类型,4 比特。从此字段的首次出现向前,在该字段存在的相同 PID 的所有连续传输流包中,它都具有相同的值,直至 达到零的包出现时为止(包括该包)。,解码时间标记下一个存取单元,以 3 部分编码,共 33 比特。在连续和周期解码通过此拼接点的情况中,它表示跟随拼接点的第一个存取单元的解码时间。此解码时间以时间基表示,在 字段达到零的传输流包中生效那不勒斯直播。从首次出现此字段向前,在它存在的相同 PID 的所有后续传输流中该字段均必须有相同值,直到 字段达到零的包出现时为止(包括此包)。,填充数据,8 比特。可包含多组。2.2、载荷
当 TS Header 中的 字段值为 或 时,这就表明存在载荷(Payload Data)部分。
载荷部分对应的是 TS 层数据结构的 字段。,该字段 8 比特一个单位,可包含多组。该数据必须来自 PES 包、PSI 分段以及 PSI 分段后的包中相连贯的数据字节,或者不在这些结构中的专用数据。如 PID 所指示的。在具有 PID 值
的空包情况中, 可以指派为任何值。 数 N 通过 184 减去 中的字节数来确定。
PES 的整体结构:
对于 PES 层数据结构的描述如下图所示:
PES 包中的部分字段解释:,表示基本流的类型和编号。,表示 PES 包中在该字段后的数据字节数,该字段 16 比特。,表示显示时间戳。分为 3 段,共 33 比特。,表示解码时间戳。分为 3 段,共 33 比特。,基本流速率,在 PES 流情况中,指定解码器接收 PES 包字节的速率。,表示相关视频的特技方式,3 比特字段。这些特技方式包括:快进、慢动作、冻结帧、快速反向、慢反向等。,表示来自包 stream_id 或 PID 所指示的基本流的连贯数据字节。该字段 8 比特一个单位。
ES 层指的就是音视频基本数据,一般视频为 H.264 编码数据,音频为 AAC 编码数据。
1)TS 流的生成流程大致如下:
2)TS 流的解析流程大致如下:
1)ISO/IEC 标准 13818-1
https://www.iso.org/obp/ui/#iso:std:iso-iec:14496:-14:ed-3:v1:enhttps://www.etsi.org/deliver/etsi_tr/102100_102199/102154/01.01.01_60/tr_102154v010101p.pdf
(通过上文的介绍,我们了解了 TS 媒体封装格式。TS 封装格式配合 M3U8 封装格式形成了 HLS 的常见实现形式,这在直播回放场景中常有应用。关于媒体封装格式的探讨,暂时告一段落,我们将在后面继续探讨常见的音视频协议,敬请期待)

05月25日 英超第38轮 曼城vs阿斯顿维拉 全场录像回放
2026年06月08日
05月25日 英超第38轮 水晶宫vs阿森纳 全场录像回放
2026年06月08日
05月25日 英超第38轮 桑德兰vs切尔西 全场录像回放
2026年06月08日
05月25日 英超第38轮 利物浦vs布伦特福德 全场录像回放
2026年06月08日
05月25日 英超第38轮 布莱顿vs曼联 全场录像回放
2026年06月08日
05月25日 英超第38轮 热刺vs埃弗顿 全场录像回放
2026年06月08日
05月20日 英超第37轮 切尔西vs热刺 全场录像回放
2026年06月08日
05月20日 英超第37轮 伯恩茅斯vs曼城 全场录像回放
2026年06月08日
05月19日 英超第37轮 阿森纳vs伯恩利 全场录像回放
2026年06月08日
05月18日 英超第37轮 纽卡斯尔联vsv西汉姆联 全场录像回放
2026年06月08日
05月17日 英超第37轮 利兹联vs布莱顿 全场录像回放
2026年06月08日
05月17日 英超第37轮 狼队vs富勒姆 全场录像回放
2026年06月08日
05月17日 英超第37轮 埃弗顿vs桑德兰 全场录像回放
2026年06月08日
05月17日 英超第37轮 布伦特福德vs水晶宫 全场录像回放
2026年06月08日
05月17日 英超第37轮 曼联vs诺丁汉森林 全场录像回放
2026年06月08日
05月16日 德甲第34轮 柏林联合vs奥格斯堡 全场录像回放
2026年06月08日
05月16日 德甲第34轮 门兴vs霍芬海姆 全场录像回放
2026年06月08日
05月16日 德甲第34轮 海登海姆vs美因茨 全场录像回放
2026年06月08日
05月16日 德甲第34轮 弗赖堡vs莱比锡 全场录像回放
2026年06月08日
05月16日 德甲第34轮 圣保利vs沃尔夫斯堡 全场录像回放
2026年06月08日
05月16日 德甲第34轮 勒沃库森vs汉堡 全场录像回放
2026年06月08日
05月16日 德甲第34轮 法兰克福vs斯图加特 全场录像回放
2026年06月08日
05月17日 德甲第34轮 拜仁慕尼黑vs科隆 全场录像回放
2026年06月08日
05月16日 德甲第34轮 不莱梅vs多特蒙德 全场录像回放
2026年06月08日
05月18日 法甲第34轮 斯特拉斯堡vs摩纳哥 全场录像回放
2026年06月08日
05月18日 法甲第34轮 洛里昂vs勒阿弗尔 全场录像回放
2026年06月08日
05月18日 法甲第34轮 马赛vs雷恩 全场录像回放
2026年06月08日
05月18日 法甲第34轮 巴黎FCvs巴黎圣日耳曼 全场录像回放
2026年06月08日
05月18日 法甲第34轮 里尔vs欧塞尔 全场录像回放
2026年06月08日
05月18日 法甲第34轮 尼斯vs梅斯 全场录像回放
2026年06月08日
05月18日 法甲第34轮 布雷斯特vs昂热 全场录像回放
2026年06月08日
05月24日 西甲第38轮 瓦伦西亚vs巴塞罗那 全场录像回放
2026年06月08日
05月24日 西甲第38轮 皇家马德里vs毕尔巴鄂竞技 全场录像回放
2026年06月08日
05月18日 西甲第37轮 巴塞罗那vs皇家贝蒂斯 全场录像回放
2026年06月08日
05月18日 西甲第37轮 塞维利亚vs皇家马德里 全场录像回放
2026年06月08日
05月18日 西甲第37轮 皇家社会vs瓦伦西亚 全场录像回放
2026年06月08日
05月18日 西甲第37轮 巴列卡诺vs比利亚雷亚尔 全场录像回放
2026年06月08日
05月18日 西甲第37轮 皇家奥维耶多vs阿拉维斯 全场录像回放
2026年06月08日
05月18日 西甲第37轮 奥萨苏纳vs西班牙人 全场录像回放
2026年06月08日
05月18日 西甲第37轮 莱万特vs马略卡 全场录像回放
2026年06月08日
05月18日 西甲第37轮 埃尔切vs赫塔费 全场录像回放
2026年06月08日
05月18日 西甲第37轮 马德里竞技vs赫罗纳 全场录像回放
2026年06月08日
05月18日 西甲第37轮 毕尔巴鄂竞技vs塞尔塔 全场录像回放
2026年06月08日
05月25日 意甲第38轮 维罗纳vs罗马 全场录像回放
2026年06月08日
05月25日 意甲第38轮 都灵vs尤文图斯 全场录像回放
2026年06月08日
05月25日 意甲第38轮 AC米兰vs卡利亚里 全场录像回放
2026年06月08日
05月24日 意甲第38轮 博洛尼亚vs国际米兰 全场录像回放
2026年06月08日
05月18日 意甲第37轮 萨索洛vs莱切 全场录像回放
2026年06月08日
05月18日 意甲第37轮 乌迪内斯vs克雷莫内塞 全场录像回放
2026年06月08日
05月18日 意甲第37轮 卡利亚里vs都灵 全场录像回放
2026年06月08日
05月18日 意甲第37轮 亚特兰大vs博洛尼亚 全场录像回放
2026年06月08日
05月17日 意甲第37轮 国际米兰vs维罗纳 全场录像回放
2026年06月08日
05月17日 意甲第37轮 罗马vs拉齐奥 全场录像回放
2026年06月08日
05月17日 意甲第37轮 比萨vs那不勒斯 全场录像回放
2026年06月08日
05月17日 意甲第37轮 尤文图斯vs佛罗伦萨 全场录像回放
2026年06月08日
05月17日 意甲第37轮 热那亚vsAC米兰 全场录像回放
2026年06月08日
06月14日 NBA总决赛G5 尼克斯vs马刺 全场录像回放
2026年06月16日
06月09日 NBA总决赛G3 马刺vs尼克斯 全场录像回放
2026年06月16日
06月11日 NBA总决赛G4 马刺vs尼克斯 全场录像回放
2026年06月16日
04月20日 NBA季后赛西部首轮G1 开拓者vs马刺 全场录像回放
2026年06月08日
04月20日 NBA季后赛东部首轮G1 魔术vs活塞 全场录像回放
2026年06月08日
04月20日 NBA季后赛西部首轮G1 太阳vs雷霆 全场录像回放
2026年06月08日
04月20日 NBA季后赛东部首轮G1 76人vs凯尔特人 全场录像回放
2026年06月08日
04月19日 NBA季后赛西部首轮G1 火箭vs湖人 全场录像回放
2026年06月08日
04月19日 NBA季后赛东部首轮G1 老鹰vs尼克斯 全场录像回放
2026年06月08日
04月19日 NBA季后赛西部首轮G1 森林狼vs掘金 全场录像回放
2026年06月08日
04月19日 NBA季后赛东部首轮G1 猛龙vs骑士 全场录像回放
2026年06月08日
05月21日 NBA西部决赛G2 马刺vs雷霆 全场录像回放
2026年06月08日
05月20日 NBA东部决赛G1 骑士vs尼克斯 全场录像回放
2026年06月08日
05月19日 NBA西部决赛G1 马刺vs雷霆 全场录像回放
2026年06月08日
05月18日 NBA季后赛东部半决赛G7 骑士vs活塞 全场录像回放
2026年06月08日