音视频入门基础:MPEG2-PS专题(3)——MPEG2-PS格式简介
一、引言
本文对MPEG2-PS格式进行简介。
进行简介之前,请各位先下载MPEG2-PS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-PS的官方文档。但是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阅读器中显示的页数:

二、program stream
官方文档中把MPEG2-PS称为program stream。所以MPEG2-PS、program stream、程序流、节目流、PS流是同一个东西,只是叫法不同。
根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第17页,PS流是一种流,专门用于在不太可能出错的环境中通信或存储一个节目的编码数据和其他数据。在出错可能性极低的环境,以及在系统编码处理(如软件处理)为主要考虑因素的环境中,PS流是专为通信或存储一个节目的编码数据和其他数据而设计的:

三、pack
根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第90页,PS流由一个个pack(包装)组成,使用pack_start_code(包装起始码,值固定为0x000001BA)分割各个pack。PS流/PS文件以0x000001B9为结束标志(但是根据我的观察,FFmpeg生成的PS文件是没有这个结束标志的,所以结束标志实际不一定有):

TS流与PS流的区别在于TS流的包结构是固定长度的,而PS流的包结构是可变长度的,这导致了它们对传输误码具有不同的抵抗能力。因此,在信道环境较为恶劣,传输误码较高时,一般采用TS码流;而在信道环境较好,传输误码较低时,一般采用PS码流。
四、pack header
根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第283页,每个pack最开始的部分就是pack header:

所以,一个pack = 一个pack_header + 一个或多个PES_packet
根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第90页,pack header包含下图所示部分:

其中,比较重要的属性有:
pack_start_code:占4字节,为一个pack的起始码。每个pack以固定的pack_start_code作为起始,其值固定为0x000001BA:

SCR:
system_clock_reference_base属性(占33位)和system_clock_reference_extension属性(占9位)组成了system clock reference (SCR):

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第33页,system clock reference (SCR)为PS流中的时间戳,从中可以推导出解码器的时间:

PS流中的SCR跟跟TS流中的PCR类似,关于PCR可以参考:《音视频入门基础:MPEG2-TS专题(8)——TS Header中的适配域》。
通过Elecard Stream Analyzer工具可以查看PS流中pack header的信息:

五、system header
当且仅当该pack为PS流中的第一个数据包时其pack header中会存在system header。根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第33页,system header包含PS流系统特性的信息:

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第91页,system header包含下图所示部分:

其中,比较重要的属性有:
system_header_start_code:占4字节,为system header的起始码。每个system header以固定的system_header_start_code作为起始,其值固定为0x000001BB:

header_length:占2字节,指定在这个字段后的字节数。所以,system header的长度 = header_length + 6:

stream_id:占1字节,指定PS流中各个ES流的类型和编号:

比如音频流取值为0xC0 至 0xDF,视频流取值为0xE0 至0xEF:


通过Elecard Stream Analyzer工具可以查看PS流中system header的信息:

六、PES packet
PS 流和 TS流的包都是基于 PES packet创建的。在PS流中,一个pack去掉pack header之后的数据就是PES packets。注意,一个pack可能包含一个或多个PES packet。
通过Elecard Stream Analyzer工具可以查看PS流中PES packet的信息:

关于PES packet的介绍可以参考:《音视频入门基础:MPEG2-TS专题(18)——PES流简介》。
相关文章:
音视频入门基础:MPEG2-PS专题(3)——MPEG2-PS格式简介
一、引言 本文对MPEG2-PS格式进行简介。 进行简介之前,请各位先下载MPEG2-PS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-PS的官方文档。但是ITU提供的文档是免费的,ISO/IEC是付费的,所以我们主要阅读ITU提供的官方文档,比如较新…...
云计算学习架构篇之HTTP协议、Nginx常用模块与Nginx服务实战
一.HTTP协议讲解 1.1rsync服务重构 bash 部署服务端: 1.安装服务 [rootbackup ~]# yum -y install rsync 2.配置服务 [rootbackup ~]# vim /etc/rsyncd.conf uid rsync gid rsync port 873 fake super yes use chroot no max connections 200 timeout 600 ignore erro…...
Zookeeper模式安装Kafka(含常规、容器两种安装方式)
一、#创作灵感# 公司使用Kafka的软件项目较多,故写技术笔记巩固知识要点 二、软件环境 - Kafka 3.9.0 官方下载地址:Kafka 3.9.0 - ZooKeeper 3.9.3 官方下载地址:ZooKeeper 3.9.3 - Docker Desktop 4.37 容器图形化工具 官方下载地址…...
【游戏设计原理】41 - 游戏的核心
1. 如何理解? 这条原理主要在讲述“游戏核心”这一概念的重要性及其在游戏开发中的作用。游戏的核心是指决定游戏整体玩法和体验的核心元素,它通常是游戏的主要机制、目标或动作方式。理解这一原理时,我们可以从以下几个层面来考虑ÿ…...
机器学习算法基础知识1:决策树
机器学习算法基础知识1:决策树 一、本文内容与前置知识点1. 本文内容2. 前置知识点 二、场景描述三、决策树的训练1. 决策树训练方式(1)分类原则-Gini(2)分类原则-entropy(3)加权系数-样本量&am…...
[Qt] 信号和槽(1) | 本质 | 使用 | 自定义
目录 一、信号和槽概述 二、本质 底层实现 1. 函数间的相互调用 2. 类成员中的特殊角色 三、使用 四. 自定义信号和槽 1. 基本语法 (1) 自定义信号函数书写规范 (2) 自定义槽函数书写规范 (3) 发送信号 (4) 示例 A. 示例一 B. 示例二 —— 老师说“上课了”&…...
33. 简易内存池
1、题目描述 ● 请实现一个简易内存池,根据请求命令完成内存分配和释放。 ● 内存池支持两种操作命令,REQUEST和RELEASE,其格式为: ● REQUEST请求的内存大小 表示请求分配指定大小内存,如果分配成功,返回分配到的内存…...
win32汇编环境,对话框程序模版,含文本框与菜单简单功能
;运行效果 ;win32汇编环境,对话框程序模版,含文本框与菜单简单功能 ;直接抄进RadAsm可编译运行。 ;下面为asm文件 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&g…...
人工智能与传统编程的主要区别是什么?
传统编程:开发者预先编写软件行为规则,代码基于程序员定义逻辑处理输入并产生确定输出,具有确定性、手动编写规则和结构化逻辑特点,如垃圾邮件分类程序基于预设关键词等规则。AI 编程:从数据中学习而非手动编写规则&am…...
实战交易策略 篇十一:一揽子交易策略
文章目录 系列文章适用条件核心策略小额大量投资行业或主题聚焦同步操作优势系列文章 实战交易策略 篇一:奥利弗瓦莱士短线交易策略 实战交易策略 篇二:杰西利弗莫尔股票大作手操盘术策略 实战交易策略 篇三:333交易策略 实战交易策略 篇四:价值投资交易策略 实战交易策略…...
doris 2.1 -Data Manipulation-Transaction
注意:doris 只能控制读一致性,并不能rollback 1 Explicit and Implicit Transactions 1.1 Explicit Transactions 1.1.1 Explicit transactions require users to actively start, commit transactions. Only insert into values statement is supported in 2.1. BEGIN; …...
多模态融合:阿尔茨海默病检测
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、实验介绍 本实验包含 645 名阿尔茨海默病受试者,分为 AD、CN 和 MCI 组,数据集包含 3D MRI 图像与一份CSV数据,MRI数据…...
Ceph 手动部署(CentOS9)
#Ceph手动部署、CentOS9、squid版本、数字版本19.2.0 #部署服务:块、对象、文件 一、部署前规划 1、兼容性确认 2、资源规划 节点类型节点名称操作系统CPU/内存硬盘网络组件安装集群节点CephAdm01CentOS94U/8GOS:40G,OSD:2*100GIP1:192.169.0.9(管理&集群),IP2:…...
家政预约小程序05活动管理
目录 1 搭建活动管理页面2 搭建活动规则页面3 搭建规则新增页面3 配置规则跳转4 搭建活动参与记录总结 上一篇我们介绍了活动管理的表结构设计,本篇我们介绍一下后台功能。 1 搭建活动管理页面 我们一共搭建了三个表,先搭建主表的后台功能。打开我们的后…...
解决安装pynini和WeTextProcessing报错问题
点击这里,访问博客 0. 背景 最近在给别人有偿部署ASR-LLM-TTS项目时遇到安装pynini和WeTextProcessing依赖报错的问题,报错信息如下: IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files…...
【PCIe 总线及设备入门学习专栏 4.1 -- PCI 总线的地址空间分配】
文章目录 Overview 本文转自:https://blog.chinaaet.com/justlxy/p/5100053219 Overview PCI 总线具有32位数据/地址复用总线,所以其存储地址空间为 2324GB。也就是PCI上的所有设备共同映射到这4GB上,每个PCI设备占用唯一的一段PCI地址&…...
华为配置 之 RIP
简介: RIP(路由信息协议)是一种广泛使用的内部网关协议,基于距离向量算法来决定路径。它通过向全网广播路由控制信息来动态交换网络拓扑信息,从而计算出最佳路由路径。RIP易于配置和理解,非常适用于小型网络…...
探寻AI Agent:开启知识图谱自动生成新篇章(17/30)
一、AI Agent 与知识图谱:智能时代的双雄 在当今科技飞速发展的时代,人工智能如同一股汹涌澎湃的浪潮,正以前所未有的力量重塑着我们的世界。而在这股浪潮中,AI Agent 与知识图谱无疑是两颗最为璀璨的明珠,它们各自发挥…...
卸载wps后word图标没有变成白纸恢复
这几天下载了个wps教育版,后头用完了删了 用习惯的2019图标 给兄弟我干没了??? 其他老哥说什么卸载关联重新下 ,而且还要什么撤销保存原来的备份什么,兄弟也是不得不怂了 后头就发现了这个半宝藏博主&…...
LeetCode 热题 100_二叉树的直径(40_543_简单_C++)(二叉树;递归)
LeetCode 热题 100_二叉树的直径(40_543) 题目描述:输入输出样例:题解:解题思路:思路一(递归): 代码实现代码实现(思路一(递归)&#…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
