在国标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。