当前位置: 首页 > news >正文

音视频入门基础:MPEG2-TS专题(8)——TS Header中的适配域

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

一、引言

当TS Header中的adaptation_field_control属性的值为'10'或'11' 时,TS Header包含adaptation field(适配域):

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第50到51页,适配域包含下图所示部分:

adaptation field(适配域) = 固定部分(固定2字节) + 可选部分 + 填充字节(stuffing_byte)

二、适配域的固定部分

适配域中的固定部分 = adaptation_field_length + discontinuity_indicator + random_access_indicator + elementary_stream_priority_indicator + PCR_flag + OPCR_flag + splicing_point_flag + transport_private_data_flag + adaptation_field_extension_flag

固定部分中的属性加起来总共2字节。

其中:

adaptation_field_length:占8位,为适配域长度,单位为字节,不包含当前字节(也就是说适配域长度不包含adaptation_field_length这个字节)。当adaptation_field_control的值为“11”时,适配域和载荷都存在,Adaptation_field_length的取值范围是0到182。当adaptation_field_control的值为“10”时,仅有适配域,Adaptation_field_length为183:

discontinuity_indicator:占1位,为不连续指示位。如果根据连续性计数器或PCR计算,确认当前分组处于不连续状态,则取值为1:

random_access_indicator:占1位,为随机访问指示位。如果当前分组是一个PES的起始,取值为1:

elementary_stream_priority_indicator:占1位,为ES优先级指示位。取值为1时ES优先级更高:

PCR_flag:占1位,为PCR标识。值为1表示适配域中有PCR域:

OPCR_flag:占1位,为OPCR标识。值为1表示适配域中有OPCR域:

splicing_point_flag:占1位,为接续点标识。值为1表示适配域中有接续倒数计数器域:

transport_private_data_flag:占1位,为传输私有数据标识,值为1表示适配域中有私有数据域:

adaptation_field_extension_flag:占1位,为适配域扩展标识,值为1表示适配域中有适配域扩展域:

三、适配域的可选部分

(一)PCR

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第32页,program clock reference (节目时钟参考,PCR)为MPEG2-TS传输流中的时间戳,从中可以推导出解码器的时间:

PCR使得解码后的内容可以正确地同步播放。最多每100ms,接收方会从TS分组(transport packet)的适配域中得到特定节目的PCR值,PCR的PID由该节目的PMT中的PCR_PID域指定。解码系统应当基于PCR生成高精度的系统校时时钟(System Timing Clock,STC),用于同步声音ES和视频ES的内容。STC是MPEG-2系统里校时的基准。例如,表示时间戳(Presentation timestamp,PTS)的值即是以PCR值为基准的偏移量。

当适配域的固定部分中的PCR_flag属性的值为1时,适配域包含PCR域。PCR域 = 33位的低精度部分(program_clock_reference_base) + 6位的填充部分(reserved) + 9位的高精度部分(program_clock_reference_extension)

program_clock_reference_base属性为PCR_base(i),program_clock_reference_extension属性为PCR_ext(i):

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第39页,system_clock_frequency(系统时钟频率)的值以Hz为单位,并应满足以下约束:

27 000000 – 810 ≤ system_clock_frequency ≤ 27 000000 + 810

system_clock_frequency随时间的变化率≤ 75 × 10^–3 Hz/s

也就是说system_clock_frequency的值约为27MHz:

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第40页,有如下公式:

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 = program_clock_reference_base × 300 + program_clock_reference_extension

更多关于PCR的测量方法可以参考:《https://download.tek.com/document/25W_14617_1.pdf》


 

 (二)OPCR

OPCR为原PCR(Original PCR),格式与PCR相同,在TS复制时使用。当适配域的固定部分中的OPCR_flag属性的值为1时,适配域包含OPCR域。OPCR域 = 33位的original_program_clock_reference_base + 6位的reserved + 9位的original_program_clock_reference_extension

(三)Splice countdown

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第55页,Splice countdown为接续倒数计时器,指示从当前分组起多少个分组之后接续点出现(取值可为负)。当适配域的固定部分中的splicing_point_flag属性的值为1时,适配域包含Splice countdown域:

四、适配域的填充字节(stuffing_byte)

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第61页,stuffing_byte为填充字节。其每个位的值都为1,可以由编码器插入,被解码器丢弃。所以适配域还有一个用途是给不足 188 字节的数据做填充:

相关文章:

音视频入门基础:MPEG2-TS专题(8)——TS Header中的适配域

注:本文有部分内容引用了维基百科:https://zh.wikipedia.org/wiki/MPEG2-TS 一、引言 当TS Header中的adaptation_field_control属性的值为10或11 时,TS Header包含adaptation field(适配域): 根据《T-RE…...

基于stm32单片机的教室节能系统设计

功能描述 0. STM32F103C8T6单片机为控制核心 1. OLED液晶显示当前年 月 日 时 分 秒 星期 2. 按键可以设置定时时间 3. 按键可以设置用电开关的开启和关闭时间,实现设备的节能 4. 通过红外遥控可以打开关闭空调设备(通过继电器开关闭合模拟&#x…...

mini主机通过内网穿透做成服务器

文章目录 简介1.ubuntu 的ssh server 安装2.ubuntu 的docker 安装3.ubuntu的curl的安装4.ubuntu的frp客户端安装5.ubuntu的docker compose安装6.声明 简介 主要目的 本地设备做成服务器,实现ssh远程登录以及内网穿透设备总成本1千多元(其实部分设备可以…...

智能桥梁安全运行监测系统守护桥梁安全卫士

一、方案背景 桥梁作为交通基础设施中不可或缺的重要组成部分,其安全稳定的运行直接关联到广大人民群众的生命财产安全以及整个社会的稳定与和谐。桥梁不仅是连接两地的通道,更是经济发展和社会进步的重要纽带。为了确保桥梁的安全运行,桥梁安…...

Selenium和Pyppeteer有什么区别?

Selenium和Pyppeteer都是自动化测试工具,它们可以模拟用户在浏览器中的操作,但它们之间存在一些关键的区别: Selenium 跨浏览器支持:Selenium支持多种浏览器,包括Chrome、Firefox、Internet Explorer等,而…...

82从零开始学Java之异常处理机制简介

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 大家可以想一个问题,有没有谁能够做到开发项目时一个错误都不发生?如果谁能够做到这一点,那他可能真的是“天才”!但实际上,任何人都不可能在项目开发…...

Git上传本地项目到远程仓库(gitee/github)

目录 序言一、创建git本地版本库二、连接远程仓库(以gitee为例)三、将项目提交到git(本地)版本库1.由工作区添加到暂存区2.由暂存区添加到版本库 四、将代码由本地仓库上传到 gitee远程仓库1.获取远程库与本地同步2.把当前分支 ma…...

华为仓颉编程环境搭建

1、仓颉介绍 摘自华为官方:仓颉编程语言作为一款面向全场景应用开发的现代编程语言,通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的 IDE 工具链支持,为开发者打造友好开发体验和卓越程序性能。 其具体特性表现为&am…...

UE5 Line Trace By Channel(通道线条追踪)节点

在 Unreal Engine 5 (UE5) 中,Line Trace By Channel 是一个常用于进行物理射线检测(raycasting)的节点。它会沿着一条从起点到终点的直线发射一条射线,并检测射线与世界中任何物体的碰撞。这个节点广泛应用于枪械射击、检测物体、…...

DroneCAN 最新开发进展,Andrew在Ardupilot开发者大会2024的演讲

本文是Andrew演讲的中文翻译,你可以直接观看视频了解演讲的全部内容,此演讲视频的中文版本已经发布在Ardupilot社区的Blog板块,你可以在 Arudpilot官网(https://ardupilot.org) 获取该视频: 你也可以直接通过Bilibili链…...

UDP客户端服务器通信

在这篇博客中,我们将探索 UDP(用户数据报协议) 通信,简要地说,UDP 是一种无连接、快速但不可靠的通信协议,适用于需要快速数据传输但对丢包容忍的场景,比如视频流和在线游戏。就像《我是如此相信…...

适合中小型公司的自动化测试的测试框架,OpenSourceTest

适合中小型公司的自动化测试的测试框架,OpenSourceTest 文档地址: http://docs.opensourcetest.cn/代码仓库: https://github.com/chineseluo/opensourcetest安装方式: pip3 install opensourcetest -i https://pypi.tuna.tsin…...

实现跨语言通信:Rust 和 Thrift 的最佳实践

前言 在分布式系统中,服务之间高效且安全的通信至关重要。Apache Thrift 是一个被广泛应用的跨语言 RPC(远程过程调用)框架,它支持多种编程语言,包括 Rust。Rust 以其卓越的性能和内存安全保障,成为越来越…...

js判断空对象

1. 使用 Object.keys() 方法 Object.keys(obj) 方法返回一个包含对象可枚举属性名称的数组。如果返回的数组长度为 0,表示对象为空。 const isEmpty (obj) > Object.keys(obj).length 0;// 示例 const emptyObject {}; const nonEmptyObject { key: value …...

visionpro官方示例分析(一) 模板匹配工具 缺陷检测工具

1.需求:找出图像中的这个图形。 2.步骤 使用CogPMAlignTool工具,该工具是模板匹配工具,见名知意,所谓模板匹配工具就是说先使用该工具对一张图像建立模板,然后用这个模板在其他图像上进行匹配,匹配上了就说…...

PyCharm中Python项目打包并运行到服务器的简明指南

目录 一、准备工作 二、创建并设置Python项目 创建新项目 配置项目依赖 安装PyInstaller 三、打包项目 打包为可执行文件 另一种打包方式(使用setup.py) 四、配置服务器环境 五、上传可执行文件到服务器 六、在服务器上运行项目 配置SSH解释…...

cocos creator 3.8 合成大西瓜Demo 11

界面上的Node节点: 背景 警戒线 三面墙 初始位置节点 水果容器 先分组吧,墙 地板 水果 创建预制体 先挂一个脚本 刚体碰撞器先弄上再说 import { _decorator, Component, Node } from cc; const { ccclass, property } _decorator;ccclass(FruitData) e…...

Vue前端开发-动态插槽

不仅父组件可以通过插槽方式访问并控制子组件传入的数据,而且可以控制传入父组件时插槽的名称,从而使不同的插槽根据名称的不同,使用场景也不同,例如在一个小区详细页中,可以根据小区类型,调用不同名称的详…...

使用easyexcel导出复杂模板,同时使用bean,map,list填充

背景 在使用easyexcel导出时,如果遇到一个模板中同时存在 一部分是实体类中的字段,另外部分是列表的字段,需要特殊处理一下,比如下面的模板: 这里面 user, addr 是实体类(或者map&#xff09…...

最大值(Java Python JS C++ C )

题目描述 给定一组整数(非负),重排顺序后输出一个最大的整数。 示例1 输入:[10,9] 输出:910 说明:输出结果可能非常大,所以你需要返回一个字符串而不是整数。 输入描述 数字组合 输出描述 最大的整数 示例1 输入 10 9输出 910解题思路 题目要求 是:给定一…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1&#xff1a;HTML/CSS 前端高频面试题2&#xff1a;浏览器/计算机网络 前端高频面试题3&#xff1a;JavaScript 1.什么是强缓存、协商缓存&#xff1f; 强缓存&#xff1a; 当浏览器请求资源时&#xff0c;首先检查本地缓存是否命中。如果命…...

Spring事务传播机制有哪些?

导语&#xff1a; Spring事务传播机制是后端面试中的必考知识点&#xff0c;特别容易出现在“项目细节挖掘”阶段。面试官通过它来判断你是否真正理解事务控制的本质与异常传播机制。本文将从实战与源码角度出发&#xff0c;全面剖析Spring事务传播机制&#xff0c;帮助你答得有…...