新闻详情

新闻详情

首页 / 资讯中心 / 详情

gb28181-rs:Rust 的 GB28181 设备端库——两条接缝接入你的采集管线

发布时间:2026/9/1 23:08:16来源:尧图网络
gb28181-rs:Rust 的 GB28181 设备端库——两条接缝接入你的采集管线
gb28181-rs· MIT · Rust 1.80 ·手写 SIP不依赖任何 SIP 框架让 Rust 程序以设备身份注册到 GB/T 28181 平台注册与摘要认证、目录应答、INVITE 点播、RTP/PS 推流、录像回放与下载全部内置。宿主只需要提供两样东西视频帧和可选的录像索引。crategb28181-rscrates.io当前版本0.5.10.6.0 加固版在途许可证MIT协议版本GB/T 28181-2016 / 2022关键依赖tokio、serde serde-xml-rs、encoding_rs、md-5 sha2测试134 个含与 Go 孪生库的逐字节金串对齐测试仓库https://github.com/mickeyzzc/gb28181-rs它补的是哪个空Rust 的 GB28181 生态约等于零crates.io 上只有一个 2023 年就弃坑的gb281810.1.0下载量一千五以及 2026 年 7 月才冒头、尚无生产证据的实验性 siprs 系列。GitHub 上唯一活跃的 Rust GB28181 项目是一个平台应用不是库。想在 Rust 里做设备端此前只有一条路自己手写。gb28181-rs 不是按规范文档新写的而是从我们一款 Rust 摄像头固件的生产实现中整体抽取而来——那套代码在真实平台面前跑了很久README 里列的硬化清单digest 认证的 URI 匹配、Via branch 唯一性、本机地址检测、MANSCDP 属性/元素双形态、TCP 传输、回放控制每一项背后都是一次真机互操作故障。设计只留两条接缝这个库的 API 哲学是库管协议宿主管业务宿主侧要实现的东西收敛到两个 traitgb28181-rs你的程序SIP 信令 RTP/PS 流采集/编码管线H.264/H.265 NALUFrameSource 实现录像索引RecordingSource 实现Gb28181ServerREGISTER/Digest/保活/目录INVITE/BYE/INFOPS 封装 RTP 推流直播 · 回放 · 下载GB28181 平台FrameSource必须直播帧的来源。库在 INVITE 到来时向你要一个订阅你把编码器输出的访问单元推进通道即可RecordingSource可选录像索引。实现它平台就能查 RecordInfo、发起回放与下载。其余一切——REGISTER 生命周期、401 摘要认证、保活、目录/设备信息/状态应答、SDP 解析、PS 封装、RTP 打包、回放节奏控制——都是库的事。上手三十行接入[dependencies] gb28181-rs 0.5.1 # git 方式: gb28181-rs { git https://github.com/mickeyzzc/gb28181-rs.git, tag v0.5.1 }usegb28181_rs::{FrameSource,FrameSubscription,RecordingSource,SegmentMeta,Gb28181Config,Gb28181Server,set_record_active};// 1) 直播帧:在你的采集管线枢纽上实现 FrameSourcestructMyFrameHub{/* ... */}implFrameSourceforMyFrameHub{fnsubscribe_with_capacity(self,capacity:usize)-FrameSubscription{/* ... */}fnunsubscribe(self,id:u64){/* ... */}}// 2) 录像:在你的录像索引上实现 RecordingSourcestructMyRecordings{/* ... */}implRecordingSourceforMyRecordings{fnlookup(self,start_ms:u64,end_ms:u64)-VecSegmentMeta{/* ... */}}// 3) 启动设备服务。停机是优雅的:收发循环、保活任务、// 进行中的媒体任务都会依次停下。#[tokio::main]asyncfnmain()-anyhow::Result(){letmutconfig:Gb28181Configtoml::from_str(std::fs::read_to_string(config.toml)?)?;// 身份字段可由宿主配置,默认值是中性的(见下文)config.user_agentSome(my-host/1.0 (gb28181-rs).to_string());letmutserverGb28181Server::start(config,std::sync::Arc::new(MyFrameHub{/* ... */}),Some(std::sync::Arc::new(MyRecordings{/* ... */})),).await?;// ... 运行你的程序;退出时:server.shutdown().await}没有现成的采集管线库自带MockFrameHub——一个带容量上限、写满即丢的参考FrameSource实现先跑通信令再接真帧。配置要点Gb28181Config是 serde 结构体TOML/JSON 都能直接反序列化。默认值刻意取自规范文档的示例值平台地址192.168.1.1、设备 ID34020000001320000001、密码12345678、端口 5060——如果启动时发现你还在用这些示例默认值会打一条警告避免拿演示配置上了生产这类事故。身份字段全部可配且默认中性user_agent默认gb28181-rs/版本device_name默认Camera 设备ID厂商/型号默认Unknown。也就是说这个库不会在报文里替任何产品/厂商打广告白标设备放心用。能力细览信令与认证。手写的 GB/T 28181 SIP 子集REGISTER/INVITE/MESSAGE/BYE/ACK/OPTIONSUDP TCP加 SDP。摘要认证同时支持 MD5 与 SHA-256 算法、qopauthcnonce 用 CSPRNG 生成user_agent、local 地址等身份要素都可配不会把实现细节泄到报文之外。MANSCDP。Catalog/DeviceInfo/DeviceStatus/RecordInfo/Keepalive 的应答构造全都有元素式与属性式双形态都发得出入站报文按 UTF-8 或 GB2312/GBK/GB18030 自动识别出站按规范惯例以 GB2312 编码。20 位国标设备 ID 有专门的格式解析模块类型码 111IPC、118NVR。媒体。H.264/H.265 NALU → MPEG-2 PS → RTPUDP 与 TCPSSRC、超 64KB 访问单元的有界 PES 切分、采集时间戳穿透全部内置。PS 封装既可以走服务器的直播路径也可以单独拿出来用letpsgb28181_rs::mux_h264_to_ps([sps,pps,idr],true,pts,dts);回放与下载。实现了RecordingSource之后RecordInfo 查询、按实时节奏的回放推流、全速的下载推流以及平台通过 SIP INFO 下发的 PlaybackControl暂停/播放/拖动/倍速都有完整处理。正在本地录像时调用set_record_active(true)DeviceStatus 就会如实上报RecordON/Record。录像段格式。库内置一个参考格式Annex-B 裸流 每帧一条 PTS 记录的.ts.jsonl边车文件读取器随库提供。用它录像的宿主天然获得 RecordInfo/回放支持零格式适配。与 Go 孪生库逐字节对齐GB28181 的媒体面没有差不多兼容PS 封装差一个字段平台端解复用就可能丢帧。gb28181-rs 与姊妹库 gb28181-go 之间有一组金串测试把封装输出钉死成十六进制常量两个语言的实现必须产出逐字节相同的 PS 流/// 小型关键帧(SPSPPSIDR)—— 与 Go 孪生库逐字节一致/// (pack header PSM 单个带时间戳的 PES)。#[test]fngolden_keyframe_matches_go_twin(){letsps:Vecu8vec![0x67,0x42,0x80,0x28,0xDA,0x01,0xE0,0x08];letpps:Vecu8vec![0x68,0xCE,0x3C,0x80];letidr:Vecu8vec![0x65,0x88,0x84,0x00,0x4B,0x00,0x01,0x00];letpsmux_h264_to_ps([sps,pps,idr],true,90_000,90_000);constGOLDEN:str000001ba440016fc8401009c43f8000001bb000b01000000041be000000000000001e0002bc00a310005bf21110005bf21000000000167428028da01e00800000168ce3c80000001658884004b000100;assert_eq!(hex(ps),GOLDEN);}同一组测试还覆盖 P 帧和 200KB 大访问单元的四段 PES 切分每段声明长度逐字节核对。实际意义Rust 设备对接 Go 平台以及任何以 Go 实现为参照的平台的媒体兼容性不靠祈祷靠断言。真机实战这个库的抽取过程本身就是一次全链路验证从固件源码树抽出宿主一侧删掉了六千七百余行随即在真机上对 GB28181 平台跑完整回归——digest 注册、目录查询、INVITE、RTP-PS 解复用、H.264 录像落盘——全绿后才切换。此后作为 Rust 摄像头产品的 GB28181 栈日常生产运行。一个反向的教训也值得记录我们曾有另一个 Rust 项目直接复制了这份代码的早期版本。没有库边界之后上游的互操作修复自然到不了它那里——短短几个月它接连复现了上游早已修完的三类问题digest 认证的 URI 与 Request-URI 不一致、MANSCDP 字段该用属性形态、MESSAGE 缺路由头。复制即分叉这正是这个库存在的理由。工程质量134 个测试信令、编解码、媒体封装、回放节奏各有专门覆盖另有库卫生无 panic 路径等与服务器生命周期集成测试CI 三道闸cargo fmt --check、cargo clippy --all-targets -- -D warnings、cargo test另有两个附加作业——MSRV 1.80 实际构建验证、Windows 交叉检查打v*标签即自动测试并发布到 crates.ioexamples/四个演示全部可以离线或本机回环跑通ps_muxPS 封装/解封装/大帧切分纯离线device_demo手写假平台与真实设备服务在本机对接——注册、目录、INVITE、RTP/PS 解复用、BYE平台侧还验证 digest 应答成功退出码 0playback_demoRecordInfo、节奏化回放、PAUSE/倍速 PLAY、BYEmanscdp_demo设备 ID 解析、保活构造、各类应答报文。cargorun--exampledevice_demo# 推荐从这个开始:两分钟看完协议全程边界与路线刻意不做平台端/UAS 角色、SIP over TLS/WebSocket。设备端库把一件事做透。0.6.0 加固版在途分支待发布无 panic 构造器、端口与身份可配置化、GB2312 出入站编解码、log 门面、优雅停机外加库卫生源码扫描守卫禁 print 宏/品牌/panic/实验室 IP。README 如实标注API 面已趋稳但尚未冻结生产环境我们的摄像头产品线每日实战中。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

十一、“敏感个人信息”界定与单独同意机制——当业务部门追求转化率时,安全合规如何优雅破局? 2026/9/1 23:53:24

十一、“敏感个人信息”界定与单独同意机制——当业务部门追求转化率时,安全合规如何优雅破局?

前言:合规与增长的“世纪博弈”在当前存量竞争的商业环境下,互联网、大数据、金融及本地生活等行业的业务部门(产品、运营、增长团队)面临着巨大的 KPI 压力。为了实现精准画像、千人千面和高转化率,业务团队往往倾向于…

阅读更多 →
AI智能体进化:从执行工具到自主决策伙伴的工程实践 2026/9/1 23:53:24

AI智能体进化:从执行工具到自主决策伙伴的工程实践

你有没有遇到过这样的场景:一个项目,你反复修改需求文档,和团队来回沟通,但最终交付时,总觉得差了点什么,不是最初想要的那个“味道”?或者,你面对一个复杂的决策,收集了…

阅读更多 →
钉钉考勤机如何结合钉钉使用:从安装到管理的完整指南 2026/9/1 23:53:24

钉钉考勤机如何结合钉钉使用:从安装到管理的完整指南

1. 引言 随着企业数字化管理的不断深入,考勤管理早已告别了纸质打卡和 Excel 手工统计的时代。钉钉考勤机作为钉钉生态中的硬件终端,能够与钉钉 App 深度打通,实现打卡数据实时同步、自动生成考勤报表、异常提醒等功能,极大提升了…

阅读更多 →
PPT不是“最后一关”,是“第一张脸”:书匠策AI正在重新定义学术表达 2026/9/1 23:53:24

PPT不是“最后一关”,是“第一张脸”:书匠策AI正在重新定义学术表达

官网:www.shujiangce.com | 微信 公众号 :书匠策AI 各位好,我是你们的老朋友,那个专门死磕论文写作底层逻辑的教育博主。 今天这篇文章,我想跟你聊一个在学术圈被严重低估、甚至被误解为“花架子”的硬核技能——P…

阅读更多 →
当论文查重遇上AI检测:你的文字需要一场“变形记” 2026/9/1 23:53:24

当论文查重遇上AI检测:你的文字需要一场“变形记”

官网:www.shujiangce.com | 微信 公众号 :书匠策AI 各位同学好,我是你们的教育博主。 今天咱们不聊抽象的写作方法论,来聊点真实的——论文写完了,怎么过查重和AIGC检测这两道鬼门关。 不知道你们有没有发现&…

阅读更多 →
韩国购物告别行李超重,ZIVO Carry推出药妆商品直邮中国服务 2026/9/1 23:50:23

韩国购物告别行李超重,ZIVO Carry推出药妆商品直邮中国服务

近年来,赴韩旅游持续升温,韩国药妆也成为不少中国游客购物清单中的重要品类。一些游客在韩国药店单次消费金额甚至超过150万韩元,但大量购物后,商品装不进行李箱、携带不便以及行李超重等问题也随之而来。 针对中国游客在韩国购物…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞