在国标GB28181协议中,视频传输基本都由两个模块构成,EasyGBS包含两个模块:信令服务和流媒体服务。本节主要为大家解释下流媒体服务中关于音视频数据的PS封装。

 

  

PS封装介绍:

PS是Program Stream(程序流或节目流)的简称。程序流将一个或多个分组但有共同时间基准的基本数据流(PES)合并成一个整体流。它是为可靠稳定的储存媒介如光盘而设计的。一般来说,采用MPEG2-HD格式的高清数码摄像机一般以"MPEG2-PS"来保存文件;而采用AVCHD格式的高清摄像机则通常以".M2TS"或".MTS"保存文件。

基于RTP的PS封装首先按照ISO/IEC13818-1:2000 将视音频流封装成 PS 包,再将 PS 包以负载的方式封装成 RTP 包。

进行PS封装时,应将每个视频帧封装为一个PS包,且每个关键帧的PS包中应包含系统头(System Header) 和 PSM(Program Stream Map),系统头和PSM放置于PS包头之后、第一个PES包之前。

 

典型的视频关键帧 PS 包结构如图所示, 其中 PESV 为视频 PES 包,PESA 为音频 PES包,视频非关键帧的 PS 包结构中一般不包含系统头和 PSM。PS 包中各部分的具体数据结构参见 ISO/IEC13818-1: 2000 中的相关描述。

 

 

系统头应包含对 PS 包中码流种类的描述,其中视频和音频的流 ID(stream_id) 取值如下:

a) 视频流 ID:0xE0;

b) 音频流 ID:0xC0。

针对本文档规定的几种视音频格式,PSM 中流类型(stream_type) 的取值如下:

a) MPEG-4 视频流::x10;

b) H.264 视频流:0x1B;

c) SVAC 视频流:0x80;

d) G.711 音频流:0x90;

e) G.722.1 音频流:0x92;

f) G.723.1 音频流:0x93;

g) G.729 音频流:0x99;

h) SVAC 音频流:0x9B。

PS 包封装的其他具体技术规范详见 ISO/IEC13818-1:2000。

PS 包的 RTP 封装格式参照 IETF RFC2250,RTP 的主要参数设置如下:

a) 负载类型(payloadtype) :96;

b) 编码名称(encoding name) :PS;

c) 时钟频率(clockrate) :90 kHz;

d) SDP 描述中“m”字段的“media”项:video。