音视频入门基础:MPEG2-TS专题(3)——TS Header简介

news2024/12/23 22:30:57

注:本文有部分内容引用了维基百科:https://zh.wikipedia.org/wiki/MPEG2-TS

一、引言

本文对MPEG2-TS格式的TS Header进行简介。

进行简介之前,请各位先下载MPEG2-TS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-TS的官方文档。但是ITU提供的文档是免费的,ISO/IEC是付费的,所以我们主要阅读ITU提供的官方文档,比如较新版的《T-REC-H.222.0-202106-S!!PDF-E.pdf》。

《T-REC-H.222.0-202106-S!!PDF-E.pdf》总共有340页。本文下面所说的“页数”是指在pdf阅读器中显示的页数:

二、MPEG2-TS官方文档中的Mnemonics

《T-REC-H.222.0-202106-S!!PDF-E.pdf》第35到36页定义了Mnemonics(助记符),描述编码位流中使用的不同数据类型,即描述了MPEG2-TS格式中的每个属性分别占用多少空间:

其中:

bslbf(bit string,left bit first)表示比特串,左位在先。

uimsbf(unsigned integer,most significant bit first)表示无符号整数,高位在先。具体可以参考:《uimsbf和 bslbf的含义》。

三、transport stream

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第3页,MPEG2-TS官方文档中把MPEG2-TS传输流称为transport stream。所以MPEG2-TS传输流、transport stream、MPEG transport stream是同一个东西,只是叫法不同:

四、transport packet

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第48页,MPEG transport stream由一个个transport packet组成,使用sync_byte(Syncword,同步字节)分割各个transport packet(又称为TS包,TS分组、传输流报文)。transport packet长度固定为188字节:

虽然官方文档写着一个transport packet长度固定为188字节,但还有长度分别为192字节和204字节的TS格式。

1.普通的TS格式:一个transport packet长度固定为188字节。

2.日本标准的DVH-S格式:一个transport packet长度固定为192字节。

3.普通的TS格式之上加上了FEC前向纠错:一个transport packet长度固定为204字节。TS的底层传输机制可以为每个transport packet附加一些信息以便传输,例如前向纠错用的校验部分。DVB和ISDB数字电视制式的前向纠错信息有16个字节,而ATSC制式有20个字节。所以如果存在FEC前向纠错时,一个transport packet为204字节(在188字节的Packet后部加上16字节的FEC,188 + 16 = 204)。关于TS流包长的判断方法可以参考:《TS流包长的简单判断(188/204B)》。

五、TS Header

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第280页,一个transport packet = Header(TS Header) + Payload(载荷):

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第48页,一个transport packet包含下图中所示部分。其中:sync_byte、transport_error_indicator、payload_unit_start_indicator、transport_priority、PID、transport_scrambling_control、adaptation_field_control、continuity_counter这些属性是每个transport packet都会包含的,所以一般把它们称作TS Header中的固定长度部分(或必选头)。除了固定长度部分,TS Header中还有可能包含可选部分,可选部分中包括adaptation_field(适配域),适配域有可选的扩展部分。

所以,TS Header = 固定长度部分(sync_byte、transport_error_indicator、payload_unit_start_indicator、transport_priority、PID、transport_scrambling_control、adaptation_field_control、continuity_counter) + adaptation_field(适配域):

TS Header中的固定长度部分总共占4个字节。因为sync_byte占8位(8位等于1个字节)、transport_error_indicator占1位、payload_unit_start_indicator占1位、transport_priority占1位、PID占13位、transport_scrambling_control占2位、adaptation_field_control占2位、continuity_counter占4位,这些属性加起来总共4个字节。

其中:

sync_byte:占8位,为同步字节。每个transport packet以固定的同步字节起始,这个同步字节的值必须为0x47:

transport_error_indicator:占1位,为传输错误指示位。发送时(调制前)值为0。接收方的解调器(demodulator)在无法成功解调(即使有前向纠错机制)transport packet内容时,将该位设置为1,表示该transport packet损坏:

payload_unit_start_indicator:占1位,为载荷单元开始指示位。负载单元起始标示符,一个完整的数据包开始时标记为1, 表示携带的是PSI或PES第一个包:

transport_priority:占1位,为传输优先级。值为1时,在相同PID的分组中具有更高的优先权:

PID:占13位,为分组ID。用于识别transport packet的ID。一个PID对应一种特定的PSI消息或者一个特定的PES:

transport_scrambling_control:占2位,传输加扰控制。

值为'00'时表示载荷未加密。其余值由具体系统定义。以DVB的CSA和ATSC的DCS为例:
'01' = 保留 (供未来使用),
'10' = 以偶数密钥加密
'11' = 以奇数密钥加密

adaptation_field_control:占2位,为适配域存在标志。

'00' = 保留 (供未来使用)
'01' = 无适配域,仅有载荷
'10' = 仅有适配域
'11' = 适配域和载荷都存在

continuity_counter:占4位,连续性计数器。取值为0x00到0x0F,循环。用于检查同一个PID的transport packet的连续性。每当一个transport packet中包含载荷时,该计数器加1:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2239573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NCC前端调用查询弹框

系统自带的查询模板 弹框 调启使用默认的 查询模板 是在 单据模板的 列表模板中,有个查询区域 ,查询区域就是查询模板内容如果在列表页做客开 新增按钮 调启查询模板 无问题,但是目前需求是需要再卡片页面下调启系统标准的调启模板代码 //调…

第8章 利用CSS制作导航菜单

8.1 水平顶部导航栏 水平菜单导航栏是网站设计中应用范围最广的导航设计&#xff0c;一般放置在页面的顶部。水平导航适用性强&#xff0c;几乎所有类型的网站都可以使用&#xff0c;设计难度较低。 8.1.1 简单水平导航栏的设计与实现 8.1.1.1导航栏的创建 <nav>标签…

labview拆解日期字符串

今天在写测试时&#xff0c;发现有些时候需要把日期和时间拆分开来&#xff0c;由于项目采集到的日期是一个数字字符串&#xff0c;需要把他们转换成带日期格式的字符串分别显示&#xff0c;这里还是用到了数组到电子表格字符串转换的函数。 下面示例如下&#xff0c;首先我们…

Kafka - 启用安全通信和认证机制_SSL + SASL

文章目录 官方资料概述制作kakfa证书1.1 openssl 生成CA1.2 生成server端秘钥对以及证书仓库1.3 CA 签名证书1.4 服务端秘钥库导入签名证书以及CA根证书1.5 生成服务端信任库并导入CA根数据1.6 生成客户端信任库并导入CA根证书 2 配置zookeeper SASL认证2.1 编写zk_server_jass…

Ubuntu22.04安装DataEase

看到DataEase的驾驶舱&#xff0c;感觉比PowerBI要好用一点&#xff0c;于是搭建起来玩玩。Dataease推荐的操作系统是Ubuntu22.04/Centos 7。 下载了Ubuntu22.04和DataEase 最新版本的离线安装包 一.安装ubuntu22.04 在安装的时候&#xff0c;没有顺手设置IP地址信息&#xff…

使用iviewui组件库的坑

背景 使用view-design组件库的Input组件的时候&#xff0c;按照产品的要求&#xff0c;输入框中只能键入正整数。 使用效果 如果直接使用组件的type属性&#xff0c;设置类型为number时&#xff0c;乍一看没啥问题&#xff0c;但是当我们键入 小数点(.) 或者 e/E 后面没有跟任…

AI绘图最强软件stable diffusion,一文带你迅速了解!

有需要stable diffusion整合包可以扫描下方&#xff0c;免费获取 01 — 什么是 SD ​ Stable Difusion(简称 SD) 其三种概念。 1.用来指代稳定扩散(Stable Diffusion) 技术,如 Midjourney是基于Stable Difusion技术实现的就是指它运用了 Stable Diffusion 的技术原理。 …

Unity3D实现视频和模型融合效果

系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、效果展示如下👉二、VideoPlayer播放视频(一)👉2-1、Hieraechy面板右键创建videoPlayer👉2-2、Assets面板右键创建RenderTexture👉2-3、把设置好的RenderTexture拖到videoPlayer里面还有本地视频视频�…

stm32 ADC实例解析(3)-多通道采集互相干扰的问题

文章目录 一、问题现象&#xff1a;二、原因分析&#xff1a;1、测量值不准问题分析&#xff1a;2、采样干扰问题分析 三、解决办法&#xff1a;1、硬件&#xff1a;&#xff08;1&#xff09;、电源供电&#xff08;2&#xff09;、引脚电容&#xff08;3&#xff09;、减少采…

springboot 医院住院管理系统,计算机毕业设计项目源码035,计算机毕设程序(LW+开题报告、中期报告、任务书等全套方案)

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;医院当然也不例外。医院住院管理系统是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;采用J…

Redis集群模式之Redis Sentinel vs. Redis Cluster

在分布式系统环境中&#xff0c;Redis以其高性能、低延迟和丰富的数据结构而广受青睐。随着数据量的增长和访问需求的增加&#xff0c;单一Redis实例往往难以满足高可用性和扩展性的要求。为此&#xff0c;Redis提供了两种主要的集群模式&#xff1a;Redis Sentinel和Redis Clu…

谷歌浏览器的自动翻译功能如何开启

在当今全球化的网络环境中&#xff0c;能够流畅地浏览不同语言的网页是至关重要的。谷歌浏览器&#xff08;Google Chrome&#xff09;提供了一项强大的自动翻译功能&#xff0c;可以帮助用户轻松跨越语言障碍。本文将详细介绍如何开启和使用谷歌浏览器的自动翻译功能&#xff…

中文书籍对《人月神话》的引用(161-210本):微软的秘密

中文书籍对《人月神话》的引用&#xff08;第001到160本&#xff09;>> 《人月神话》于1975年出版&#xff0c;1995年出二十周年版。自出版以来&#xff0c;该书被大量的书籍和文章引用&#xff0c;直到现在热潮不退。 2023年&#xff0c;清华大学出版社推出《人月神话》…

Docker了解

Docker是一种容器化技术&#xff0c;它可以将应用程序和其依赖项打包到一个独立的、可移植的容器中&#xff0c;以便在不同的环境中运行。Docker基于Linux操作系统的容器化技术&#xff0c;可以提供更轻量、更快速、更灵活、更一致的应用部署和管理方式。 Docker的基本概念包括…

【LLM Agents体验 3】利用Open-WebUI+Ollama本地部署Qwen2.5:7B大模型的安装指南

Open WebUI是一种基于 Web 的用户界面&#xff0c;用于管理和操作各种本地和云端的人工智能模型。它提供了一个直观的图形化界面&#xff0c;使用户可以方便地加载、配置、运行和监控各种 AI 模型&#xff0c;而无需编写代码或使用命令行界面。 Open-WebUI 是一款功能强大且易于…

新Activity启动时Task的位置(分屏场景)

目录 场景 场景 当类似上面的Task状态&#xff0c;我们自定义的三个按钮&#xff0c;启动新的Activity的时候&#xff0c;并没有去设置需要launche的task。 Intent intent new Intent();intent.setComponent(new ComponentName("com.android.dialer","com.and…

GitLab基于Drone搭建持续集成(CI/CD)

本文介绍了如何为 Gitee 安装 Drone 服务器。服务器打包为在 DockerHub 上分发的最小 Docker 映像。 1. 准备工作 创建OAuth应用 创建 GitLab OAuth 应用。Consumer Key 和 Consumer Secret 用于授权访问极狐GitLab 资源。 ps:授权回调 URL 必须与以下格式和路径匹配&…

检测敏感词功能

今天策划给我一个任务 —— 检测昵称中是否含有敏感词功能&#xff0c;然后丢给我两个压缩包&#xff0c;我解压一看&#xff1a; 有的txt文件是一行一个词&#xff1a; 有的txt文件是按逗号分隔开&#xff1a; 不管是什么格式的总之量非常多&#xff0c;把我这辈子脏话都囊括…

【OpenGL】OpenGL简介

文章目录 OpenGL概述OpenGL的本质OpenGL相关库核心库窗口管理glutfreeglutglfw 函数加载glewGLAD OpenGL概述 OpenGL(Open Graphics Library) 严格来说&#xff0c;本身并不是一个API&#xff0c;它是一个由Khronos组织制定并维护的规范(Specification)。OpenGL规范严格规定了…

python-24-一篇文章彻底掌握Python HTTP库Requests

python-24-一篇文章彻底掌握Python HTTP库Requests 一.简介 在 Python 中&#xff0c;Requests 是一个非常流行且易于使用的 Python HTTP 库&#xff0c;专门用于发送 HTTP/HTTPS 请求&#xff0c;获取请求响应&#xff1b; 可能觉得HTTP请求不是应该前端去做么&#xff1f;…