国标GB/T 28181-2022对比2016版本修改内容深度剖析和代码示例


一、引言

GB/T 28181 标准作为我国公共安全视频监控联网系统信息传输、交换、控制的重要规范,在推动视频监控领域的互联互通方面发挥着关键作用。随着技术的发展和行业需求的变化,GB/T 28181 - 2022 版本应运而生,相较于 2016 版本,它在多个方面进行了优化和改进,以更好地适应新的应用场景和安全要求。本文将详细探讨这些修改内容,并给出相应的流程和 C++ 代码示例。

二、主要修改内容详述

(一)注册与重定向功能优化

  • 注册流程细化:2022 版本对注册流程进行了更细致的规定,增加了注册信息的完整性要求。设备在注册时,需要提供更多的详细信息,如设备的能力描述、支持的编解码格式等,以便平台更好地管理和配置设备。
  • 重定向机制增强:引入了更灵活的重定向机制。当设备注册到错误的平台或者平台需要将设备引导至其他平台时,通过重定向消息可以更准确地实现设备的迁移。重定向消息中包含了新的平台地址和相关的认证信息,确保设备能够顺利连接到新的平台。

(二)媒体流传输改进

  • 编码格式扩展:支持更多的音视频编码格式,如 H.265、AVS3 等。这使得系统能够更好地适应高清、超高清视频的传输需求,在保证画质的同时,有效降低带宽占用。
  • 传输协议优化:对 RTP/RTCP 协议进行了优化,增加了对低延迟传输的支持。采用了新的丢包重传和拥塞控制算法,提高了媒体流传输的稳定性和实时性。

(三)设备管理功能拓展

  • 智能设备管理:增加了对智能设备的管理支持,如智能摄像头、行为分析服务器等。可以对这些设备的智能功能进行配置和管理,如设置目标检测规则、行为分析算法等。
  • 设备状态监测:完善了设备状态监测机制,能够实时获取设备的在线状态、工作状态、故障信息等。通过定期的设备状态查询和异常报警,提高了设备的可靠性和可维护性。

(四)安全机制强化

  • 身份认证升级:采用了更严格的身份认证方式,如数字证书认证和多因素认证。设备在注册和通信过程中,需要提供有效的数字证书进行身份验证,同时支持结合密码、短信验证码等多因素认证方式,提高了系统的安全性。
  • 数据加密增强:对媒体流和信令数据的加密算法进行了升级,支持 AES、SM4 等更高级的加密算法。确保数据在传输和存储过程中的保密性和完整性。

三、修改内容的流程示例

(一)注册与重定向流程

  1. 设备注册:设备启动后,向平台发送注册请求消息,包含设备的基本信息和能力描述。
  2. 平台验证:平台接收到注册请求后,对设备的身份进行验证。如果验证失败,返回错误信息;如果验证成功,但设备需要重定向到其他平台,则发送重定向消息。
  3. 重定向处理:设备接收到重定向消息后,根据消息中的新平台地址,向新平台发送注册请求。新平台进行身份验证,验证通过后,设备注册成功。

(二)媒体流传输流程

  1. 能力协商:设备和平台通过 SIP 信令进行能力协商,确定支持的音视频编码格式、分辨率、帧率等参数。
  2. 媒体流建立:协商一致后,平台向设备发送媒体流请求消息,设备根据请求开始采集和编码音视频数据,并通过 RTP 协议将数据传输给平台。
  3. 传输控制:在传输过程中,通过 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等协议对接到上级平台,包括智联视频云平台和第三方平台。支持普通级联,多级级联,混合级联等多种级联方式。

在这里插入图片描述

智联视频超融合平台目前已经在电力、公安、交通、教育、物联网、智慧城市、智慧园区等多个行业得到了广泛应用。在电力行业,智联视频超融合平台已经在全国多个省区二十多个地市部署,在上百个变电站和集控中心接入了十多个厂家的摄像机、无人机、录像机和平台,视频接入总数接近十万路,持续为电力行业贡献力量。在公安行业,已经参与过多个二十万路以上视频的项目,稳定性和安全性都得到了充分的验证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值