0
点赞
收藏
分享

微信扫一扫

gb28181之ps码流分析


前言

gb28181的视频流,采用ps格式进行封装,但是排查故障的时候,每次都需要进行二进制查看,非常不方便,所以决定写一个html的小工具进行分析。

ps码流介绍

PS数据包由四个部分组成,下面分别进行研究

Pack_header如图1 起始四个字节为00 00 01 BA



gb28181之ps码流分析_封装

System_header如图2 起始四个字节为00 00 01 BB



gb28181之ps码流分析_ffmpeg_02

Program_stream_map如图3 起始四个字节为00 00 01 BC



gb28181之ps码流分析_封装_03

PES_pakcet如图4 起始四个字节为00 00 01 C0(音频) 或者00 00 01 E0(视频)



gb28181之ps码流分析_ffmpeg_04

gb28181之ps码流分析_封装_05

gb28181之ps码流分析_封装_06

音频采样率

gb28181音频采样率为固定值通道数为1 采样率为8kHZ 参考标准截图如下



gb28181之ps码流分析_音频流_07

gb28181之ps码流分析_音频流_08

码流id

基于RTP的PS封装首先按照ISO/IEC13818-1:2019将视音频流封装成PS包,再将PS包以负载的方式封装成RTP包。
进行PS封装时,应将每个视频帧封装为一个PS包,且每个关键帧的PS包中应包含系统头(System Header)和 PSM(Program Stream Map),系统头和 PSM 放置于 PS 包头之后、第一个 PES 包之前。
典型的视频关键帧PS包结构如图C1所示,其中PESV为视频PES包,PESA为音频PES包,视频非关键帧的PS包结构中一般不包含系统头和PSM。PS包中各部分的具体数据结构参见ISO/IEC13818-1:2019中的相关描述。
PS包头|Systemheader|PSM|PESV|PESA
系统头应包含对PS包中码流种类的描述,其中视频和音频的流ID(streamid)取值如下:
a)视频流ID:0xE0;
b)音频流ID:0xC0
针对本文件规定的几种视音频格式,PSM中流类型(stream_type)的取值如下:
a)MPEG-4视频流:0x10;
b)H.264视频流:0x1B;
c)SVAC视频流:0x80;
d)H.265视频流:0x24;
e)G.711A律音频流:0x90;
f)G.711U律音频流:0x91:
g)G.722.1音频流:0x92;
h)G.723.1音频流:0x93;
i)G.729音频流:0x99;
j)SVAC音频流:0x9B;
k)AAC音频流:0x0F。
PS包封装的其他具体技术规范详见ISO/IEC13818-1:2019。PS包的RTP封装格式参照IETFRFC2250,RTP的主要参数设置如下:
a)负载类型(payload type):96;
b)编码名称(encoding name):PS;
c)时钟频率(clockrate):90kHz;
d)SDP 描述中“m”字段的“media”项:video。



gb28181之ps码流分析_ffmpeg_09

gb28181之ps码流分析_封装_10

分析工具

这里我用html写了一个分析工具,可以对格式进行解析,并进行展示,辅助排查问题。

只需要输入相关格式的16进制数据,即可进行解析。

gb28181之ps码流分析_视频流_11


关于源码

举报

相关推荐

国标GB28181

0 条评论