跳过导航,直接进入主要内容跳过导航,直接进入主要内容跳过导航,直接进入主要内容

MANSCDP 消息、字符集与设备 ID

MESSAGE 层(MANSCDP-XML:目录查询、保活、设备信息/状态、录像查询) 以纯数据类型 + 编解码辅助函数的形式导出,宿主可以不跑服务器、在它 之上构建自己的工具。

安装

cargo add gb28181-rs@0.12.0

消息类型

use gb28181_rs::{Notify, Query, Response, DeviceList, DeviceItem, ChannelItem};
  • Notify——设备→平台通知(保活、告警上报)。
  • Query——平台→设备查询(目录、设备信息、录像信息)。
  • Response——设备→平台应答。
  • DeviceList / DeviceItem / ChannelItem——目录负载。

服务器内部负责构造与应答这些消息;类型 re-export 出来,供需要自行 编解码 MESSAGE 体的宿主使用(归档工具、测试台、代理)。XML 编解码 同时支持真机平台要求的元素式与属性式双形态。

线上字符集

线上 MANSCDP 体是 UTF-8 或 GB2312/GBK/GB18030——真实平台两种都 发。编解码辅助函数负责识别与编码:

use gb28181_rs::charset::{decode_wire_body, encode_wire_body};

// 入站:先严格 UTF-8,GB18030 兜底——永不丢字。
let text = decode_wire_body(&raw_message_bytes);

// 出站:ASCII 逐字节直通(保证金串稳定);非 ASCII 中文按 GB/T 28181
// 惯例编码为 GB18030。
let bytes = encode_wire_body("前门摄像头");

设备 ID

20 位国标编码: [8 位行政区划(GB/T 2260)][2 位行业][3 位类型][7 位序号]。

use gb28181_rs::{format_device_id, parse_device_id, device_types, DeviceIdParts};

let id = format_device_id("34020000", 0, device_types::IPC, 42)?;
let DeviceIdParts { region_code, industry_type, device_type, serial } = parse_device_id(&id)?;

类型常量:IPC = 111、NVR = 118、DECODER = 121、ALARM = 122、 AUDIO = 134。两个函数对畸形输入返回错误——绝不 panic。

时间处理

GB/T 28181 录像查询用北京本地时间字符串。库按宿主配置的本地偏移 (manscdp::device_local_offset_secs())换算;以 UTC 运行的宿主应确认 平台接受 UTC,或相应配置偏移。

离线验证

cargo run --example manscdp_demo
# 设备 ID 往返、保活构造+解析、RecordInfo/DeviceInfo 应答、
# GB/T 28181 时间串——全程无网络。
可访问性增强功能已加载,支持焦点管理、键盘导航和屏幕阅读器