EasyGBS中基于 RTP 的音视频数据 PS 封装
在国标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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结