GB/T28181数据流分析学习笔记1:PS数据格式解析

2023-11-03 08:10

本文主要是介绍GB/T28181数据流分析学习笔记1:PS数据格式解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

GB/T28181数据流分析学习笔记1:PS数据格式解析

文章目录

  • GB/T28181数据流分析学习笔记1:PS数据格式解析
    • 1. GB/T28181摘要
    • 2. IDE帧抓包分析
      • 2.1 原始数据hex
      • 2.2 原始数据分析
      • 2.3 PS包头
        • 2.3.1 PS原始数据
        • 2.3.2 PS包头解析图
        • 2.3.3 PS包头解析
      • 2.4 系统包头(System header)
        • 2.4.1 原始数据
        • 2.4.2 系统包头(System header)解析图
        • 2.4.3 系统包头(System header)解析
      • 2.5 PSM(Program Stream Map)解析
        • 2.5.1 PSM(Program Stream Map)原始数据
        • 2.5.2 PSM(Program Stream Map)解析图
        • 2.5.3 PSM(Program Stream Map) 解析
      • 2.6 PES解析
        • 2.6.1 PES原始数据
        • 2.6.2 PES解析图
        • 2.6.3 PES 解析
    • 3 非IDE帧抓包分析
      • 3.1 原始数据hex
    • 4 音频帧抓包分析
      • 4.1 原始数据hex

1. GB/T28181摘要

基于 RTP 的 PS 封装首先按照ISO/IEC13818-1:2000 将视音频流封装成 PS 包, 再将 PS 包以负
载的方式封装成 RTP 包。

进行 PS 封 装 时, 应 将 每 个 视 频 帧 封 装 为 一 个 PS 包, 且 每 个 关 键 帧 的 PS 包 中 应 包 含 系 统 头
(System Header) 和 PSM(Program Stream Map) , 系统头和 PSM 放置于 PS 包头之后、 第一个 PES 包
之前。
典型的视频关键帧 PS 包结构如图 C.1 所示, 其中 PESV 为视频 PES 包,PESA 为音频 PES 包, 视
频非关键帧的 PS 包结构中一般不包含系统头和 PSM。 PS 包中各部分的具体数据结构参见ISO/IEC
13818-1: 2000 中的相关描述。

(找不到ISO/IEC13818-1:2000.pdf文件可以联系我微信:yjkhtddx)

(放我个人服务器上供下载:http://dev.liuyunuo.cn:8084/doc/iso13818-1.pdf, 跪求不要攻击我)

PS包格式

PS包头System headerPSMPESVPESA

系统头应包含对 PS 包中码流种类的描述, 其中视频和音频的流ID(stream_id) 取值如下:
a) 视频流ID:0xE0;
b) 音频流ID:0xC0。
针对本文档规定的几种视音频格式,PSM 中流类型(stream_type) 的取值如下:
a) MPEG-4 视频流:0x10;
b) H.264 视频流:0x1B;
b+) H.265 视频流: 0x24
c) SVAC 视频流:0x80;
d) G.711 音频流:0x90;
e) G.722.1 音频流:0x92;
f) G.723.1 音频流:0x93;
g) G.729 音频流:0x99;
h) SVAC 音频流:0x9B。
PS 包封装的其他具体技术规范详见ISO/IEC13818-1:2000。
PS 包的 RTP 封装格式参照IETF RFC2250,RTP 的主要参数设置如下:
a) 负载类型(payloadtype) :96;
b) 编码名称(encoding name) :PS;
c) 时钟频率(clockrate) :90 kHz;
d) SDP 描述中“m”字段的“media”项:video。

2. IDE帧抓包分析

2.1 原始数据hex

8060 02d8000b42d0 06146581 000001ba4400afe13401005f6bf8000001bb000c80ccf504e17fe0e0e8c0c020000001bc001ee1ff000000141be0000c2a0a7fff000023281ffea05a90c0000000000000000001e07fe080800521002bf84d
8060 02f1000b42d0 06146581 000001e080088000052100010001
8060 030a000b42d0 06146581 000001e059248000052100010001

2.2 原始数据分析

806000010000465006146581 =>RTP头部分,此文不做分析
000001ba440004000401005f6bf8 => PS包头 pack_start_code 0x000001BA
000001bb000c80ccf504e17fe0e0e8c0c020 => 系统包头 system_header_start_code 0x000001BB
000001bc001ee1ff000000141be0000c2a0a7fff000023281ffea05a90c0000000000000 => PSM packet_start_code_prefix + map_stream_id 0x000001BC
000001e07fe08080052100010001 => PSEV a) 视频流ID:0xE0; b) 音频流ID:0xC0 0x000001E0

2.3 PS包头

2.3.1 PS原始数据
000001ba440004000401005f6bf8
2.3.2 PS包头解析图

在这里插入图片描述

2.3.3 PS包头解析
000001ba => pack_start_code
440004000401005f6bf8 => 解不开,不管了,跳过

2.4 系统包头(System header)

2.4.1 原始数据
000001bb000c80ccf504e17fe0e0e8c0c020
2.4.2 系统包头(System header)解析图

在这里插入图片描述

2.4.3 系统包头(System header)解析
000001bb => system_header_start_code
000c => header_length => 12个字节 => 剩余12个字节没有问题
80ccf504e17fe0e0e8c0c020 => 先不解开,没看到有需要的字段,长度对就直接跳过。

2.5 PSM(Program Stream Map)解析

2.5.1 PSM(Program Stream Map)原始数据
000001bc001ee1ff000000141be0000c2a0a7fff000023281ffea05a90c0000000000000
2.5.2 PSM(Program Stream Map)解析图

在这里插入图片描述

2.5.3 PSM(Program Stream Map) 解析
000001 => packet_start_code_prefix
bc => map_stream_id => 固定0xBC
001e => program_stream_map_length => 30个字节 => 没有问题
e1
ff
0000 => program_stream_info_length => 0个字节 => 没有问题
0014 => elementary_stream_map_length => 20个字节 => 没有问题
1b stream_type => H.264 视频流:0x1B;
e0 elementary_stream_id => 视频流ID:0xE0;
000c elementary_stream_info_length => 12个字节 => 没有问题
2a0a7fff000023281ffea05a => descriptor()  => 先不管
90 stream_type => G.711 音频流:0x90
c0 elementary_stream_id => 音频流ID:0xC0
0000  elementary_stream_info_length => 0个字节 => 没有问题
00000000 => CRC_32 =>好像没有使用数据验证

最关键的编码格式获取到了,任务搞定。

2.5.4 番外篇H265

2016版本国标并没有明确制定H265,但是实际已经在使用了,抓了一个H265的PSM分析一下。

000001bc
001e
e1
ff
0000
0014
24 stream_type => H.265 视频流:0x24;
e0
000c
2a0a7fff000007081ffea05a
90
c0
0000
00000000
000001 => packet_start_code_prefix
bc => map_stream_id => 固定0xBC
001e => program_stream_map_length => 30个字节 => 没有问题
e1
ff
0000 => program_stream_info_length => 0个字节 => 没有问题
0014 => elementary_stream_map_length => 20个字节 => 没有问题
1b stream_type => H.264 视频流:0x1B;
e0 elementary_stream_id => 视频流ID:0xE0;
000c elementary_stream_info_length => 12个字节 => 没有问题
2a0a7fff000023281ffea05a => descriptor()  => 先不管
90 stream_type => G.711 音频流:0x90
c0 elementary_stream_id => 音频流ID:0xC0
0000  elementary_stream_info_length => 0个字节 => 没有问题
00000000 => CRC_32 =>好像没有使用数据验证

2.6 PES解析

2.6.1 PES原始数据
000001e07fe08080052100010001
2.6.2 PES解析图

注:太长了,解析个长度好了。

在这里插入图片描述

2.6.3 PES 解析
000001 packet_start_code_prefix
e0 stream_id
7fe0 PES_packet_length =>  数据在PES中,所以长度比较长
8080052100010001 => 懒的解

3 非IDE帧抓包分析

3.1 原始数据hex

8060 0092000278d0 06146581 000001ba440025913401005f6bf8000001e02544808005210009644d

4 音频帧抓包分析

4.1 原始数据hex

8060 009000023280 06146581 000001c00081808005210007d7ad

微信号:yjkhtddx

这篇关于GB/T28181数据流分析学习笔记1:PS数据格式解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/336786

相关文章

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

Java 关键字transient与注解@Transient的区别用途解析

《Java关键字transient与注解@Transient的区别用途解析》在Java中,transient是一个关键字,用于声明一个字段不会被序列化,这篇文章给大家介绍了Java关键字transi... 在Java中,transient 是一个关键字,用于声明一个字段不会被序列化。当一个对象被序列化时,被

Java集成Onlyoffice的示例代码及场景分析

《Java集成Onlyoffice的示例代码及场景分析》:本文主要介绍Java集成Onlyoffice的示例代码及场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 需求场景:实现文档的在线编辑,团队协作总结:两个接口 + 前端页面 + 配置项接口1:一个接口,将o

Java JSQLParser解析SQL的使用指南

《JavaJSQLParser解析SQL的使用指南》JSQLParser是一个Java语言的SQL语句解析工具,可以将SQL语句解析成为Java类的层次结构,还支持改写SQL,下面我们就来看看它的具... 目录一、引言二、jsQLParser常见类2.1 Class Diagram2.2 Statement

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三

IDEA下"File is read-only"可能原因分析及"找不到或无法加载主类"的问题

《IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题》:本文主要介绍IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题,具有很好的参... 目录1.File is read-only”可能原因2.“找不到或无法加载主类”问题的解决总结1.File

Dubbo之SPI机制的实现原理和优势分析

《Dubbo之SPI机制的实现原理和优势分析》:本文主要介绍Dubbo之SPI机制的实现原理和优势,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Dubbo中SPI机制的实现原理和优势JDK 中的 SPI 机制解析Dubbo 中的 SPI 机制解析总结Dubbo中

C#继承之里氏替换原则分析

《C#继承之里氏替换原则分析》:本文主要介绍C#继承之里氏替换原则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#里氏替换原则一.概念二.语法表现三.类型检查与转换总结C#里氏替换原则一.概念里氏替换原则是面向对象设计的基本原则之一:核心思想:所有引py

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

Python多进程、多线程、协程典型示例解析(最新推荐)

《Python多进程、多线程、协程典型示例解析(最新推荐)》:本文主要介绍Python多进程、多线程、协程典型示例解析(最新推荐),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 目录一、multiprocessing(多进程)1. 模块简介2. 案例详解:并行计算平方和3. 实现逻