1.GB28181协议RTP传输的封装封装PS封装格式:
2.视频流PS打包方式详解
3.PS封装格式:GB28181协议RTP传输
4.PSCAD中调用封装的C代码动态库
GB28181协议RTP传输的PS封装格式:
在安防行业,GB协议是源码不可或缺的部分,它由海康制定,什意思广泛应用于公安监控网络。封装封装本文旨在解析GB协议中容易混淆的源码细节,以供查阅与参考。什意思库管软件 源码
GB协议要求的封装封装RTP流格式包括特定的封装。I帧的源码PS流格式需注意SPS、PPS前应加PES头部。什意思这在GB标准中未详述,封装封装理解需分析海康IPC流数据。源码
通常,什意思IDR帧大小超过RTP负载长度限制(字节),封装封装因此需拆分成多包RTP分发。源码IDR帧的什意思第一包包含PES头部,后续包则简化为基本RTP结构。
相比I帧,P/B帧的帧格式更为简单,缺乏SYS、echo源码分析PSM,SPS、PPS等。其大小通常不超过字节,若超过,需拆分传输。P/B帧的RTP第二包结构较简单。
头部信息包含RTP包头(字节)、PSH头部(字节)。PSH头部包含流类型信息,如音频或视频、编码格式。SYS记录流类型,PSM记录媒体信息,如编码格式。PES头部记录帧时间戳,DTS可不填,但需与PTS保持一致,源码创建图标且同一帧数据的PTS需一致。
时间戳的比特位结构清晰表示在图中,提供直观理解。
视频流PS打包方式详解
PS流概述:Program Stream(节目流)是将一个或多个基本数据流(PES)合并成一个整体流。PS包由PS头、PS系统头、PSM、PES头和ES组成。一个PS包最多可包含个视频PES包和个音频PES包。ES流是由编码器输出的原始基础码流,只包含解码器所需的原始图像或音频信息。PES流是对ES流的第一次封装,基本单位是PES包,由包头和负载组成。PSH是PS包的包头,PS系统头通常无用,可直接跳过。PSM提供节目流中基本流的神龙探底源码描述及其关系。
PS封装格式:对于H,如果为IDR帧,PS封装格式包括PS头、系统头、PSM、PES头和ES;非IDR帧格式为PS头、PES头、ES、PES头、ES。音视频复合流在视频IDR帧时发送PS头、系统头、PSM。
PES格式详解:PES是对ES流的第一层封装,基本单位是PES包,由包头和负载组成。PES包头包括包头起始码、流ID、kdj至尊源码PES包长度、可选PES头字段等。可选字段包括PTS、DTS、版权信息、原始或备份标识、多个标志位等。PES头的数据长度控制着负载的长度和内容。
PS头封装格式:PS头包含起始码、系统参考值、速率值、标记位、保留字段、填充字段等。系统头为系统头部字段,一般封装默认值,包含系统头部起始码、头部长度、速率限制、音频限制等。
PSM封装格式:PSM提供关于节目流中原始流关系的描述,紧跟在系统头部之后,主要字段包括包头起始码、映射流ID、映射长度、当前指示符、版本号、描述字段长度、ES流信息长度、描述信息、CRC校验值等。
PS流整包发送和分包发送:整包发送时,ES长度超出限制,将长度设为0。分包发送时,根据PES长度分包发送,解封装时需解析PS后组包。分包发送的第一个分片的Data alignment indicator为1,后续分片为0。当遇到下个PES包的Data alignment indicator为1时,表示当前PES包为最后一个分片,可组合成完整视频帧。
PS流的封装和解封装遵循上述结构和规则,理解这些格式对于处理和分析视频流数据至关重要。
PS封装格式:GB协议RTP传输
1. GB协议下RTP流格式要求
首先,GB标准中规定的RTP流格式,我们需关注I帧的PS流格式。特别指出,SPS和PPS前需添加PES头部。以下图为例,绿色部分为所获得的H.裸流数据,需将其拆分为三段,并添加PES头部。此点在GB标准中未详细说明,需通过分析海康IPC流才能发现。
通常情况下,IDR帧较大,超过RTP负载长度限制(字节),因此,上述I帧需拆分为多个RTP包分次发送。第一包结构如图所示,后续RTP包结构相对简单。
与I帧相比,P/B帧的帧格式更为简单,它没有SYS、PSM,也没有SPS和PPS。
P/B帧大小一般不超过字节,若超过,需分成多个RTP包进行传输。超出字节的第二包RTP结构如下:
2. 头部信息
首先是RTP包头信息,一般长度为字节。
接着是PSH头部,占用字节。
然后是SYS,包含流类型信息,如音频或视频、视频编码格式。
其次是PSM,记录媒体信息,如音视频编码格式。
最后是PES头部,记录帧的时间戳,DTS可空,若填写需与PTS保持一致,同一帧数据的PTS也要一致(即SPS、PPS、IDR的PES要一致)。
以下图示清晰展示了时间戳的比特位结构:
PSCAD中调用封装的C代码动态库
本文介绍如何在PSCAD中集成封装的C代码动态库,实现便利性和保密性的兼备。
方案是将用户代码封装成动态库,但需通过Fortran代码提供C语言绑定来使PSCAD识别,故设计接口函数成为关键。
具体而言,PSCAD中需利用Fortran字段提供的三个子程序:初始化仿真环境、运行仿真及结束仿真,以绑定机制调用外部C函数。
在每个子程序中,通过接口函数间接调用封装的C代码动态库中的对应功能。加载动态库与库函数的绑定也是通过类似机制实现。
了解具体实现机制,参考PSCAD V5.0版本中的DLLInterface示例工程便能一窥究竟。
在PSCAD中定义自定义元件时,Fortran字段中包含三个特定函数指示PSCAD如何调用动态库功能。
由此实现PSCAD仿真环境与用户代码库之间的数据交互,完美结合了便利性与保密性。