文章目录
一、引言
GB/T 28181 标准作为我国公共安全视频监控联网系统信息传输、交换、控制的重要规范,在推动视频监控领域的互联互通方面发挥着关键作用。随着技术的发展和行业需求的变化,GB/T 28181 - 2022 版本应运而生,相较于 2016 版本,它在多个方面进行了优化和改进,以更好地适应新的应用场景和安全要求。本文将详细探讨这些修改内容,并给出相应的流程和 C++ 代码示例。
二、主要修改内容详述
(一)注册与重定向功能优化
- 注册流程细化:2022 版本对注册流程进行了更细致的规定,增加了注册信息的完整性要求。设备在注册时,需要提供更多的详细信息,如设备的能力描述、支持的编解码格式等,以便平台更好地管理和配置设备。
- 重定向机制增强:引入了更灵活的重定向机制。当设备注册到错误的平台或者平台需要将设备引导至其他平台时,通过重定向消息可以更准确地实现设备的迁移。重定向消息中包含了新的平台地址和相关的认证信息,确保设备能够顺利连接到新的平台。
(二)媒体流传输改进
- 编码格式扩展:支持更多的音视频编码格式,如 H.265、AVS3 等。这使得系统能够更好地适应高清、超高清视频的传输需求,在保证画质的同时,有效降低带宽占用。
- 传输协议优化:对 RTP/RTCP 协议进行了优化,增加了对低延迟传输的支持。采用了新的丢包重传和拥塞控制算法,提高了媒体流传输的稳定性和实时性。
(三)设备管理功能拓展
- 智能设备管理:增加了对智能设备的管理支持,如智能摄像头、行为分析服务器等。可以对这些设备的智能功能进行配置和管理,如设置目标检测规则、行为分析算法等。
- 设备状态监测:完善了设备状态监测机制,能够实时获取设备的在线状态、工作状态、故障信息等。通过定期的设备状态查询和异常报警,提高了设备的可靠性和可维护性。
(四)安全机制强化
- 身份认证升级:采用了更严格的身份认证方式,如数字证书认证和多因素认证。设备在注册和通信过程中,需要提供有效的数字证书进行身份验证,同时支持结合密码、短信验证码等多因素认证方式,提高了系统的安全性。
- 数据加密增强:对媒体流和信令数据的加密算法进行了升级,支持 AES、SM4 等更高级的加密算法。确保数据在传输和存储过程中的保密性和完整性。
三、修改内容的流程示例
(一)注册与重定向流程
- 设备注册:设备启动后,向平台发送注册请求消息,包含设备的基本信息和能力描述。
- 平台验证:平台接收到注册请求后,对设备的身份进行验证。如果验证失败,返回错误信息;如果验证成功,但设备需要重定向到其他平台,则发送重定向消息。
- 重定向处理:设备接收到重定向消息后,根据消息中的新平台地址,向新平台发送注册请求。新平台进行身份验证,验证通过后,设备注册成功。
(二)媒体流传输流程
- 能力协商:设备和平台通过 SIP 信令进行能力协商,确定支持的音视频编码格式、分辨率、帧率等参数。
- 媒体流建立:协商一致后,平台向设备发送媒体流请求消息,设备根据请求开始采集和编码音视频数据,并通过 RTP 协议将数据传输给平台。
- 传输控制:在传输过程中,通过 RTCP 协议进行传输控制,如丢包重传、拥塞控制等。
四、C++ 代码示例
(一)注册与重定向消息处理
#include <iostream>
#include <string>
#include <vector>
// 模拟 SIP 消息结构体
struct SIPMessage {
std::string method;
std::string uri;
std::vector<std::pair<std::string, std::string>> headers;
std::string body;
};
// 解析 SIP 消息
SIPMessage parseSIPMessage(const std::string& message) {
SIPMessage sipMsg;
// 简单解析示例,实际需要更复杂的解析逻辑
size_t pos = message.find(' ');
sipMsg.method = message.substr(0, pos);
size_t nextPos = message.find(' ', pos + 1);
sipMsg.uri = message.substr(pos + 1, nextPos - pos - 1);
// 解析头部信息
size_t headerStart = nextPos + 1;
size_t headerEnd = message.find("\r\n\r\n", headerStart);
std::string headersStr = message.substr(headerStart, headerEnd - headerStart);
size_t lineStart = 0;
while (lineStart < headersStr.length()) {
size_t lineEnd = headersStr.find("\r\n", lineStart);
std::string line = headersStr.substr(lineStart, lineEnd - lineStart);
size_t colonPos = line.find(':');
std::string key = line.substr(0, colonPos);
std::string value = line.substr(colonPos + 1);
sipMsg.headers.emplace_back(key, value);
lineStart = lineEnd + 2;
}
// 解析消息体
sipMsg.body = message.substr(headerEnd + 4);
return sipMsg;
}
// 处理注册请求
SIPMessage handleRegisterRequest(const SIPMessage& request) {
SIPMessage response;
// 模拟身份验证
bool isAuthenticated = true;
if (isAuthenticated) {
// 模拟重定向
bool needRedirect = false;
if (needRedirect) {
response.method = "302 Moved Temporarily";
response.uri = request.uri;
response.headers.emplace_back("Location", "sip:newplatform.example.com");
} else {
response.method = "200 OK";
response.uri = request.uri;
}
} else {
response.method = "401 Unauthorized";
response.uri = request.uri;
}
return response;
}
int main() {
std::string registerRequest = "REGISTER sip:platform.example.com SIP/2.0\r\n"
"Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK12345\r\n"
"From: <sip:device1@example.com>;tag=12345\r\n"
"To: <sip:platform.example.com>\r\n"
"Call-ID: 1234567890@192.168.1.100\r\n"
"CSeq: 1 REGISTER\r\n"
"Contact: <sip:device1@192.168.1.100:5060>\r\n"
"Expires: 3600\r\n"
"Content-Length: 0\r\n\r\n";
SIPMessage parsedRequest = parseSIPMessage(registerRequest);
SIPMessage response = handleRegisterRequest(parsedRequest);
// 输出响应消息
std::cout << response.method << " " << response.uri << std::endl;
for (const auto& header : response.headers) {
std::cout << header.first << ": " << header.second << std::endl;
}
std::cout << "Content-Length: " << response.body.length() << std::endl;
std::cout << std::endl;
std::cout << response.body << std::endl;
return 0;
}
(二)媒体流传输示例(RTP 数据包封装)
#include <iostream>
#include <cstring>
// RTP 头部结构体
struct RTPHeader {
uint8_t version : 2;
uint8_t padding : 1;
uint8_t extension : 1;
uint8_t csrcCount : 4;
uint8_t marker : 1;
uint8_t payloadType : 7;
uint16_t sequenceNumber;
uint32_t timestamp;
uint32_t ssrc;
};
// 封装 RTP 数据包
void encapsulateRTP(const uint8_t* payload, size_t payloadSize, uint8_t payloadType, uint16_t sequenceNumber, uint32_t timestamp, uint32_t ssrc, uint8_t* rtpPacket, size_t& rtpPacketSize) {
RTPHeader header;
header.version = 2;
header.padding = 0;
header.extension = 0;
header.csrcCount = 0;
header.marker = 0;
header.payloadType = payloadType;
header.sequenceNumber = sequenceNumber;
header.timestamp = timestamp;
header.ssrc = ssrc;
rtpPacketSize = sizeof(RTPHeader) + payloadSize;
memcpy(rtpPacket, &header, sizeof(RTPHeader));
memcpy(rtpPacket + sizeof(RTPHeader), payload, payloadSize);
}
int main() {
uint8_t payload[] = {0x01, 0x02, 0x03, 0x04};
size_t payloadSize = sizeof(payload);
uint8_t payloadType = 96;
uint16_t sequenceNumber = 1;
uint32_t timestamp = 123456789;
uint32_t ssrc = 0x12345678;
uint8_t rtpPacket[1024];
size_t rtpPacketSize;
encapsulateRTP(payload, payloadSize, payloadType, sequenceNumber, timestamp, ssrc, rtpPacket, rtpPacketSize);
std::cout << "RTP Packet Size: " << rtpPacketSize << std::endl;
return 0;
}
五、总结
GB/T 28181 - 2022 版本在注册与重定向、媒体流传输、设备管理和安全机制等方面进行了全面的优化和改进,使得公共安全视频监控联网系统更加稳定、高效和安全。通过上述的流程和代码示例,开发者可以更好地理解和应用这些修改内容,为实际的系统开发和部署提供有力的支持。随着技术的不断发展,GB/T 28181 标准也将持续演进,以满足行业的不断变化的需求。
六、智联视频超融合平台
智联视频超融合平台对GB/T28181的2011/2016/2022三个版本都做到了很好的兼容,已经成功对接了海康、大华、宇视等众多品牌的各类设备和国标平台。
-
智联视频超融合平台通过GB/T28181-2011/2016/2022、国网B接口、RTSP、RTMP、ONVIF、GB/T35114、GA1400、海康大华SDK/API等方式,接入海康、大华、宇视等各个厂家的摄像机、录像机,接入直播手机,接入下级平台,提供web客户端进行视频预览、录像回放、配置管理和智慧运维。
-
提供标准RESTful格式的HTTP API,提供web播放器demo,满足二次开发需求。同时支持将音视频数据等转发成各种通用标准的流媒体协议,方便第三方客户端调用展示。
-
支持按照GB/T28181-2011/2016/2022、国网B接口、GB/T35114、GA1400等协议对接到上级平台,包括智联视频云平台和第三方平台。支持普通级联,多级级联,混合级联等多种级联方式。
智联视频超融合平台目前已经在电力、公安、交通、教育、物联网、智慧城市、智慧园区等多个行业得到了广泛应用。在电力行业,智联视频超融合平台已经在全国多个省区二十多个地市部署,在上百个变电站和集控中心接入了十多个厂家的摄像机、无人机、录像机和平台,视频接入总数接近十万路,持续为电力行业贡献力量。在公安行业,已经参与过多个二十万路以上视频的项目,稳定性和安全性都得到了充分的验证。