MPEG PS(Program Stream)介绍
MPEG PSProgram Stream是MPEG-2标准ISO/IEC 13818-1中定义的一种容器格式主要用于将音视频等基本流复用为一个单一数据流以便于存储或传输。封装基本单元与流程MPEG PS封装的核心思想是将PESPacketized Elementary Stream包打包成PS 包。PES包本身是由原始的ESElementary Stream如H.264视频流或G.711音频流加上PES包头包含时间戳等信息封装而成的。封装流程通常遵循以下规则视频关键帧如H.264的IDR帧其PS包结构通常为PS Header→System Header→PSM→PES Header视频数据如SPS, PPS, IDR帧。这是因为SPS和PPS是解码器初始化所必需的信息需要与关键帧放在一起以确保能正确开始解码。视频非关键帧如P帧、B帧结构较简单通常为PS Header→PES Header视频数据。音频帧音频数据会被打包成音频PES包通常与视频PES包交错排列在PS包中形如PS Header→PES(video)→PES(audio)MPEG-PS 的分层结构MPEG-PS Program Stream ┌──────────────────────────────────────────┐ │ Pack (以0x000001BA开头) │ │ ┌───────────────────────────────────┐ │ │ │ Pack Header (SCR, mux_rate) │ │ │ └───────────────────────────────────┘ │ │ ┌───────────────────────────────────┐ │ │ │ System Header (可选全局流信息) │ │ │ └───────────────────────────────────┘ │ │ ┌────────────────────────────┐ ┌────────────────────────────┐ │ │ PES Packet (Video) │ │ PES Packet (Audio) │ │ │ ┌───────────────────────┐ │ │ ┌───────────────────────┐ │ │ │ │ PES Header (PTS/DTS) │ │ │ │ PES Header (PTS/DTS) │ │ │ │ └───────────────────────┘ │ │ └───────────────────────┘ │ │ │ ┌───────────────────────┐ │ │ ┌───────────────────────┐ │ │ │ │ Video ES (如I/P/B帧) │ │ │ │ Audio ES (音频帧) │ │ │ │ └───────────────────────┘ │ │ └───────────────────────┘ │ │ └────────────────────────────┘ └────────────────────────────┘ └──────────────────────────────────────────┘MPEG-PS 可能的分包方式(1) 每个NAL组成一个PES包SPSPPS都分别作为一个PES包。I帧被拆分成了多个PES每个PES分包小于1400。当PS作为RTP负载用于网络流传输时RTP 包的总大小通常受网络 MTU Maximum Transmission Unit 1400的限制。(1) 多个NAL组成一个PES包有下图可见多个SPS PPSI, P, B 帧共同组成了一个PES。这个PES很大10514 Byte一个 MPEG-PS 的十六进制片段并逐字段解析示例MPEG-PS 文件开头部分(十六进制)0000: 00 00 01 BA 44 00 04 00 04 01 01 89 C3 F8 00 00 0010: 01 BB 00 0C 80 04 E2 1F FF FF C4 F9 00 00 01 E0 0020: 00 20 80 80 05 21 00 07 FF E1 00 00 01 67 4D 00 0030: E0 2C 0D 0D 0D 13 01 01 01 01 12 00 00 01 B5 14(1) Pack Header 以0x00 00 01 BA开始00 00 01 BA → pack_start_code 44 00 04 00... → SCR (System Clock Reference系统时钟参考) 01 01 89 → mux_rate0x000001BAPack start code。SCR对应时间戳基准用于系统时钟同步。mux_rate表示码率通常表示播放码率对齐。(2) System Header以0x00 00 01 BB开始00 00 01 BB → system_header_start_code定义了整体系统层 码率限制等。在文件开头区域经常出现一次或者每个I帧前面出现不一定每个 pack 都有。参考 ITU H.222.0 Table 2-40(3) Program stream map (PSM)以0x00 00 01 BC开始00 00 01 BC → program_stream_map_start_code在文件开头区域经常出现一次或者每个I帧前面出现不一定每个 pack 都有。PSM的核心作用主要体现在流识别与导航​解码器通过解析PSM可以知道当前PS流中包含了几个音视频流、每个流是什么编码格式如H.264、H.265、G.711音频等以及它们对应的PES包头的stream_id是什么。这样,当解码器在流中遇到一个以0xE0开头的PES包时就能根据PSM知道这里面是H.264视频数据并交给相应的视频解码器处理map_stream_id: 总是0xBC举个例子伪解析假设我们解析到一个 PSM:packet_start_code_prefix0x000001stream_id0xBCprogram_stream_map_length24elementary_stream_map_length12// elementary_stream_info[0]:stream_type0x1B(H.264)elementary_stream_id0xE0// elementary_stream_info[1]:stream_type0x04(MPEG-2Audio)elementary_stream_id0xC0解释0xE0 (Video stream 0) → H.264 视频流0xC0 (Audio stream 0) → MPEG-2 音频流这样解码器就可以正确地把数据交给相应的解码模块一些常见的 stream_type 值stream_type含义0x01MPEG-1 Video0x02MPEG-2 Video0x03MPEG-1 Audio0x04MPEG-2 Audio0x0FAAC Audio0x1BH.264/AVC Video0x24H.265/HEVC Video0x90~0xFF私有或厂商扩展类型详细参考 ITU H.222.0 Table 2-41(4) PES Packet视频流start code 0x00 00 01 E000 00 01 E0 → video_stream_id 00 20 → PES_packet_length 320xE0表示视频流 0第一个视频轨道。PTS_DTS_flags表示是否包含PTS/DTSPES Header 包含时间戳PTSPresentation Time Stamp。DTSDecoding Time Stamp若有B帧。详细参考 ITU H.222.0 chapter 2.4.3.6 Table 2-21。 TS和PS共用同一个标准.(5) ES视频数据片段 (以h264为例)00 00 01 67 → sps_header_code (h264 Video)PES Payload 部分就是编码后的h264 Video ES 数据。H.264采用 Annex B 格式0x00000167H264 SPS NAL start code0x00000168H264 PPS NAL start code0x00000165H264 I frame NAL start code⏰时间信息与同步PS封装中包含重要的时间信息以实现音视频同步SCR (System Clock Reference)存在于PS Header中用于系统时钟同步。PTS (Presentation Time Stamp)和DTS (Decoding Time Stamp)存在于PES包头中分别指示显示时间和解码时间对于音视频同步至关重要。主要应用场景安防监控与GB28181在安防领域尤其是在*GB28181**标准中规定可采用PS封装 over RTP进行视音频数据的网络传输。参考 GB28181 RTP的封装规范DVD光盘存储PS格式最初就是为DVD这类可靠稳定的存储介质设计的但是DVD基本上没人用了。

相关新闻

虚拟存储与页面置换算法:缺页中断、地址变换及EAT计算全解析

虚拟存储与页面置换算法:缺页中断、地址变换及EAT计算全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 2:03:18 阅读更多 →
微信小程序电影购票源码解析:云开发锁座与支付链路实战

微信小程序电影购票源码解析:云开发锁座与支付链路实战

简介:一款基于微信小程序的电影购票完整源码包,面向有小程序基础、想深入掌握电商与生活服务类项目开发的读者。源码覆盖影院列表、电影排期、在线选座、订单支付等真实购票链路,并额外附带外卖模块示例,便于扩展食品饮料售卖场景…

2026/10/14 2:03:18 阅读更多 →
Agent Skill 上线前怎么验收终裁:三层评估与能用/不能用分层清单

Agent Skill 上线前怎么验收终裁:三层评估与能用/不能用分层清单

千笔-AIWritePaper https://www.aiwritepaper.com 把一段「科研写作助手」打成 Agent Skill 很容易:写好触发词、挂上工具、演示一次通顺输出。上线前真正要终裁的是三件事:该不该在这句话触发、产出能不能核验、会不会顺手读密钥或被工具描述投毒。缺任…

2026/10/14 2:03:18 阅读更多 →

最新新闻

单片机毕设选题推荐:基于STM32的婴儿摇篮哭泣尿床监测与环境联动控制系统设计 基于物联网的婴儿床温湿度自动调节与哄睡装置设计(032707)

单片机毕设选题推荐:基于STM32的婴儿摇篮哭泣尿床监测与环境联动控制系统设计 基于物联网的婴儿床温湿度自动调节与哄睡装置设计(032707)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/10/14 2:44:28 阅读更多 →
Lua数值类型全解析:整数浮点与整除取余避坑指南

Lua数值类型全解析:整数浮点与整除取余避坑指南

很多朋友第一次接触 Lua程序设计,是在某个配置文件或者游戏模组里。打开一个脚本,想改个数值看看效果,结果被注释符号、表达式、类型转换这些基础概念卡住了。我最初接触Lua也是因为类似场景——某项目的规则引擎用Lua做嵌入式脚本&#xff0…

2026/10/14 2:44:28 阅读更多 →
Workerman 5.x 完整实战指南:基于事件驱动的 PHP 异步网络框架

Workerman 5.x 完整实战指南:基于事件驱动的 PHP 异步网络框架

后端 【免费下载链接】workerman An asynchronous event driven PHP socket framework. Supports HTTP, Websocket, SSL and other custom protocols. 项目地址: https://gitcode.com/gh_mirrors/wo/workerman 点击查看 免费下载 Workerman 是一个使用纯 PHP 编写…

2026/10/14 2:44:28 阅读更多 →
uniPush离线推送实战:厂商通道配置与到达率优化指南

uniPush离线推送实战:厂商通道配置与到达率优化指南

1. 离线推送到底在解决什么问题做移动端应用的人迟早会撞上这个需求:用户把App划掉了、手机锁屏了、后台进程被系统回收了,这时候业务侧发出一条通知,用户还能不能在通知栏看到?答案就是离线推送要解决的核心命题。uniPush这套方案…

2026/10/14 2:44:28 阅读更多 →
单片机计算机毕设之基于物联网的婴儿床环境自动调节与哄睡联动装置设计 基于单片机的智能婴儿摇篮温湿度调节与远程监控系统设计(032707)

单片机计算机毕设之基于物联网的婴儿床环境自动调节与哄睡联动装置设计 基于单片机的智能婴儿摇篮温湿度调节与远程监控系统设计(032707)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/10/14 2:44:28 阅读更多 →
Java异步编程进阶:CompletableFuture任务编排与线程池实战

Java异步编程进阶:CompletableFuture任务编排与线程池实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 2:43:28 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →