音视频流媒体————PS流

1. 简介

每个视频帧分为若干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包格式如下:

PSHPSMPES0DATA0PES1DATA1PES2DATA2

P帧PS包格式如下:

PSHPES0DATA0PES1DATA1PES2DATA2

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+3VIDEO信息长度+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+12JPEG的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+3AUDIO信息长度
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+30
HHCRC校验

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 用户数据信息

从PES包中可以获得时间戳信息,用户数据信息,媒体数据信息。这里媒体数据是指视频编码数据/音频编码数据/私有数据。视频流PES包分析流程:
在这里插入图片描述

参考文献
1、https://blog.csdn.net/yangguoyu8023/article/details/97613434

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值