流媒体-----PS流

       每个视频帧分为若干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包。

PSH

PSM

PES0

DATA0

PES1

DATA1

PESn

DATAn

                                                                                    图1 I帧PS包格式

PSH

PES0

DATA0

PES1

DATA1

PESn

DATAn

                                                                                   图2 P帧PS包格式

2. PSH头部分析

        PSH:Program Stream pack Header ,是PS包的包头,主要包含系统时间信息。
        若当前码流类型为音频流则可选择是否包含PSH头部。若当前码流类型为视频流,且为当前帧的第1个NALU,则包含PSH头部。若为I帧,PSH头部长度为44个字节。若为P帧,PSH头部长度为20个字节。PSH头部主要包含时间戳,最大比特率,帧号信息。
        00 00 01 BA PSH头部标志。00 00 01 BB I帧附加信息头部。

                                                                                  表1 PSH头部说明

字节号

含义

3

0xba,表示当前为PSH头部

4~8

含有当前帧45K时间戳

10~12

当前设置的最大比特率

16~19

若set_frame_end_flg置为1,则16~19中存放当前帧帧号

                                                                         I帧附加信息

23

为0xbb,表示当前为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信息。

        00 00 01 BC PSM头部标志。

                                                                         表2 PSM头部

字节号

含义

3

为0xbc,表示当前为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号

                                                                                         加密信息

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

音频采样率

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

用户数据信息

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

发布了13 篇原创文章 · 获赞 6 · 访问量 1万+
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/yangguoyu8023/article/details/97613434

1. 简介

猜你喜欢

转载自blog.csdn.net/sdsszk/article/details/101097206