GB28181 PS流传输格式详解
Posted 老樊Lu码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GB28181 PS流传输格式详解相关的知识,希望对你有一定的参考价值。
1.PS流传输格式预览
1、视频关键帧的封装 RTP + PS header + PS system header + PS system Map + PES header +h264 data
2、视频非关键帧的封装 RTP +PS header + PES header + h264 data
3、音频帧的封装: RTP + PES header + G711
每个视频帧分为若干NAL单元(NALU)。
视频PS格式码流以NALU为单位进行打包。若当前为I帧或P帧的第一个NALU则需加PSH头部。若当前为I帧的第一个NALU还需要加PSM头部。每个NALU分为若干段,每段前需加PES头部,每段数据与PES头部组成PES包。
音频PS格式码流以帧为单位进行打包。音频PS格式码流PSH头部可选。音频关键帧包含PSM头部。每个音频帧可分为若干段,每段前需加PES头部,每段数据与PES头部组成PES包。一般情况下音频流只包含PES包。
私有数据PS格式码流以帧为单位进行打包。私有数据PS格式码流不包含PSH头部。私有数据关键帧包含PSM头部。每个私有数据帧可分为若干段,每段前需加PES头部,每段数据与PES头部组成PES包。一般情况下私有数据流只包含PES包。
I帧PS包格式如下:
P帧PS包格式如下:
2. PSH头部分析
PSH:Program Stream pack Header ,是PS包的包头,主要包含系统时间信息。
若当前码流类型为音频流则可选择是否包含PSH头部。若当前码流类型为视频流,且为当前帧的第1个NALU,则包含PSH头部。若为I帧,PSH头部长度为44个字节。若为P帧,PSH头部长度为20个字节。PSH头部主要包含时间戳,最大比特率,帧号信息。
0X 00 00 01 BA PSH头部标志。0X 00 00 01 BB I帧附加信息头部。
表1 PSH头部说明 | |
字节号 | 含义 |
0~3 | 为0x 00 00 01 ba,表示当前为PSH头部 |
4~8 | 含有当前帧45K时间戳 |
10~12 | 当前设置的最大比特率 |
16~19 | 若set_frame_end_flg置为1,则16~19中存放当前帧帧号 |
I帧附加信息 | |
20~23 | 为0x 00 00 01 bb,表示当前为I帧附件信息 |
24~25 | 为18,等于I帧附加信息长度-2,I帧附加信息长度为20 |
26~28 | 表示当前设置的最大比特率 |
3. PSM头部分析
PS system Map 节目映射流(PSM)
当前为音频流/私有数据流的关键帧需要加PSM头部。当前为视频流且为I帧的第一个NALU时需要加PSM头部。
主要包含BASIC信息、DEVICE信息、加密信息、视频流信息、音频流信息、私有数据信息。
视频流信息分为VIDEO信息、VIDEO_CLIP信息、TIMING_HRD信息长度。
音频流信息分为AUDIO信息。
0x 00 00 01 BC PSM头部标志:
表2 PSM头部 | |
字节号 | 含义 |
0~3 | 为0x 00 00 01 bc,表示当前为PSM头部 |
8~9 | BASIC信息长度+DEVICE信息长度+加密信息长度 |
BASIC信息 | |
AA | 为0x40,表示当前为BASIC信息 |
AA+1 | 为14,等于BASIC信息长度-2,BASIC信息长度为16 |
AA+2~AA+3 | 公司描述符 |
AA+6~AA+11 | 当前时间年月日时分秒及加密类型 |
AA+12 | 含义 |
字节号 | 相机类型 |
DEVICE信息 | |
BB | 为0x41,表示当前为DEVICE信息 |
BB+1 | 为18,DEVICE信息长度-2,DEVICE信息长度为20 |
字节号 | 含义 |
BB+4~BB+19 | 为设备ID号 |
字节号 | 为设备ID号 |
加密信息 | |
CC | 为0x80,表示当前为加密信息 |
CC+1 | 为6,加密信息长度-2,加密信息长度为8 |
CC+4 | 打包方式,加密算法 |
CC+5 | 加密轮数,秘钥长度含义 |
CC+6 | 加密类型 |
DD | 视频流信息长度+音频流信息长度+私有数据信息长度 |
视频流信息 | |
EE | 视频编码类型,如H264、H265等 |
EE+1 | 码流类型, 此处为0xe0,表示视频码流 |
EE+2~EE+3 | VIDEO信息长度+VIDEO_CLIP信息长度+TIMING_HRD信息长度 |
VIDEO信息 | |
aa | 为0x42,表示当前为VIDEO信息 |
aa+1 | 为14,VIDEO长度-2,VIDEO长度为16 |
aa+2~aa+3 | 编码器版本 |
aa+4~aa+5 | 编码年月日 |
字节号 | 含义 |
aa+6~aa+9 | 原始图片宽高 |
aa+10 | 是否隔行扫描,b帧数目,是否为SVC码流,是否使用e帧,最大参考帧数目 |
aa+11 | 水印类型,显示时是否需要反隔行 |
aa+12 | JPEG的Q值 |
aa+13~aa+15 | 以1/90000s为单位的两帧间时间间隔,是否使用固定帧率 |
VIDEO_CLIP信息 | |
bb | 为0x44,表示当前为VIDEO_CLIP信息 |
bb+1 | 为10,VIDEO_CLIP信息长度-2,VIDEO_CLIP长度为12 |
bb+2~bb+3 | 裁剪起始x坐标 |
bb+4~bb+5 | 裁剪起始y坐标 |
bb+6~bb+7 | 裁剪宽度 |
bb+8~bb+9 | 裁剪高度 |
TIMING_HRD信息 | |
cc | 为0x2A,表示当前为TIMING_HRD信息 |
cc+1 | 为10,TIMING_HRD信息的长度-2,TIMING_HRD的长度为12 |
cc+4~cc+7 | 以1/45000s为单位的两帧间的时间间隔 |
cc+10 | 图片宽度 |
cc+11 | 图片高度 |
音频流信息 | |
FF | 音频编码类型,如AAC等 |
FF+1 | 码流类型,此处为0xc0表示音频码流类型 |
FF+2~FF+3 | AUDIO信息长度 |
AUDIO信息 | |
dd | 为0x43,表示当前为AUDIO信息 |
dd+1 | 为10,AUDIO信息长度-2,AUDIO信息长度为12 |
dd+2~dd+3 | 音频帧长度 |
dd+4 | 音频声道数 |
dd+5~dd+7 | 音频采样率/td> |
dd+8~dd+10 | 音频比特率 |
私有数据信息 | |
GG | 私有数据类型 |
GG+1 | 码流类型,此处为0xbd表示私有数据码流 |
GG+2~GG+3 | 0 |
HH | CRC校验 |
4. PES包分析
视频流/音频流/私有数据流都包含若干PES包。每个PES包由PES头部和码流数据两部分组成。PES头部第4个字节用于判断码流类型,视频流为0xe0,音频流为0xc0,私有数据流为0xbd。
对于视频流,每帧视频流分为若干NALU,每个NALU分为若干个段,每个段需加一个PES头部。第一个NALU的第一段的PES头部中可包含pts信息和user_data信息。
对于音频流/私有数据流,每帧数据分为若干段,每段需加一个PES头部。第一段的PES头部中可包含pts信息和user_data信息。
00 00 01 E0 PES头部标志,表示当前码流为视频流。 00 00 01 C0 PES头部标志,表示当前码流为音频流。 00 00 01 BD PES头部标志,表示当前码流为私有数据。
表3 PES头部说明 | |
字节号 | 含义 |
基本信息 | |
3 | 码流类型,视频流或音频流或私有数据流 |
4~5 | 基本信息长度+附加信息长度+媒体数据长度-6,基本信息长度为9 |
6 | 是否加密,PES优先级 |
7 | 用于判断PES头部中是否包含时间戳信息和用户数据信息 |
8 | 附加信息长度 |
附加信息 | |
9~13 | 时间戳信息 |
15~30 | 用户数据信息 |
以上是关于GB28181 PS流传输格式详解的主要内容,如果未能解决你的问题,请参考以下文章