网络流媒体(二)————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包。
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包分析流程:
网络流媒体(二)————PS流相关推荐
- 流媒体基础知识TS流 PS流 ES流区别
IP数据报有首部和数据两部分组成的,首部的前一部分是固定长度20字节,是所有IP数据报必须具有的.首部包括:总长度.标识.MF.DF.片偏移. 数字信号实际传送的是数据流,一般数据流包括以下三种: ( ...
- 网络流媒体--PS封装格式
(1)PS流基本概念: MPEG2-PS是一种多路复用数字音频,视频等的封装容器.PS是Program Stream(程序流或节目流)的简称.程序流将一个或多个分组但有共同的时间基准的基本数据流(PE ...
- RTP 接发ps流工具改进(二)
RTP ps 上一次写了RTP工具发送RTP包,这次改进了发送和接收,真正能接收和发送图像,这次修改,使得RTP发送接收和PS流RTP发送接收都已经成功.延时在300毫秒左右.代码地址在上一篇的文章里 ...
- EasyRTMP:RTMP推流海康威视实时预览回调PS流用EasyRTMP向RTMP服务器推流中视频数据处理的代码
在上一篇方案<EasyRTMP结合海康HCNetSDK获取海康摄像机H.264实时流并转化成为RTMP直播推流(附源码)>中我们介绍了将海康安防摄像机进行互联网直播的整体方案流程,其中有一 ...
- RTP协议全解(H264码流和PS流)
1 视频编码的原理 1.1 一个图像或者一个视频序列进行压缩,产生码流. 对图像的处理即是:帧内预测编码 其预测值P,是由已编码的图像做参考,经运动补偿得到的.预测图像P和当前帧Fn相减,得到两图像的 ...
- ps流 转发_一种国标PS流转RTMP直播流的实时转换方法与流程
本发明属于视频技术领域,具体涉及一种国标ps流转rtmp直播流的实时转换方法. 背景技术: ps流全称是节目流(programstream),将一个节目的多个组成部分按照它们之间的互相关系进行组织并加 ...
- 网络流媒体--SDP会话描述协议(RFC-4566)
1.SDP协议简介 SDP(Session Description Protocol)是为了描述多媒体会话而设计的,主要用来描述会话通告,会话邀请或者其他形式的多媒体会话初始化.为了初始化多媒体会话, ...
- RTP协议全解析(H264码流和PS流
写在前面:RTP的解析,网上找了很多资料,但是都不全,所以我力图整理出一个比较全面的解析, 其中借鉴了很多文章,我都列在了文章最后,在此表示感谢. 互联网的发展离不开大家的无私奉献,我决定从我做起,希 ...
- ps流 转发_(转)RTP协议全解(H264码流和PS流)
写在前面:RTP的解析,网上找了很多资料,但是都不全,所以我力图整理出一个比较全面的解析, 其中借鉴了很多文章,我都列在了文章最后,在此表示感谢. 互联网的发展离不开大家的无私奉献,我决定从我做起,希 ...
- TS流概述(ES流-基本流,PES流-打包基本码流,PS流-节目流,TS流-传输流)
一.TS流概述 ES流(Elementary Stream,基本流):数字电视各组成部分编码后所形成的直接表示基本元素内容的流,包含视频.音频或数据的连续码流. PES流(Paketized Elem ...
最新文章
- 马化腾公开信:AI将成为基础设施,腾讯要打造“数字生态共同体”
- 光盘压制:八种加密方法保护光盘数据安全
- Telerik RadGridView动态增删行及行列操作
- Druid 数据源连接池配置
- mysql opensuse_opensuse免安装mysql
- 【Python】Flask框架系列(一):安装、页面跳转/重定向、模板、逻辑语句、过滤器、继承/使用block、url链接/加载静态资源
- Type Conversion(类型转换)
- html5好看的大方框,这个样式导致HTML5的视频中的按钮变成一个方框。求解决…...
- Javascript分号,加还是不加?
- 枫之谷m平板玩服务器维护,枫之谷 M无法连接服务器是什么原因
- 【C语言】在终端输入多行信息,找出包含“ould”的行,并打印改行。
- C#获取电脑硬盘序列号
- CentOS更换阿里yum源
- jsZip将多个文件压缩成一个压缩包
- 人类700万年(震撼的极简人类史)
- Global Tracking Transformers
- 王煜全老师谈SNS创业
- TypeScript基础快速上手
- 实时可视化大数据项目01 -- 项目介绍
- 星瑞格数据库安全审计系统 —— Sinoregal dbAudit