在线工具 · mickeyzzc 自研协议库

GB28181 协议库代码生成器

GB/T 28181-2016/2022 · 手写 SIP + MANSCDP + RTP/PS · GB 35114 A 级可选

为 GB/T 28181 国标接入生成骨架:gb28181-go 覆盖设备端(UAC)与平台端(UAS)双角色,gb28181-rs 专注设备端推流。两个孪生库共享 golden 夹具,线格式逐字节一致;GB 35114 A 级安全均为可选模块。 生成内容可直接复制粘贴;API 形态与各库 examples/ 编译参照一致,手册见 MiBee 文档中心。 另有 ONVIF 协议库代码生成器 →

选库指引

摄像头 / 媒体源注册到国标平台并推流 →gb28181-go 或 gb28181-rs(设备端 UAC)
自建平台收设备注册、INVITE 拉流 →gb28181-go(平台端 UAS)
按语言选:Go 双角色全栈,Rust 设备端 →gb28181-go / gb28181-rs

功能组合

角色
平台与身份
信令传输

生成代码

main.go · Go⇄ 可横向滚动
// gb28181-go 设备端(UAC)接入骨架 —— 由 Mi&Bee's 百宝箱 协议库代码生成器生成
// 库: github.com/mickeyzzc/gb28181-go v0.11.0 · MIT
// 安装: go get github.com/mickeyzzc/gb28181-go
package main

import (
	"context"
	"log"
	"time"

	"github.com/mickeyzzc/gb28181-go/device"
)

func main() {
	cfg := device.Config{
		Enabled:               true,
		PlatformSIPAddress:    "192.168.1.10",
		PlatformSIPPort:       5060,
		DeviceID:              "34020000001320000001",
		ChannelID:             "34020000001310000001",
		SIPDomain:             "3402000000",
		Password:              "your-platform-password", // 与平台约定的摘要认证密码——换成你自己的
		LocalSIPPort:          5060,
		RegisterIntervalSecs:  3600,
		HeartbeatIntervalSecs: 60,
		HeartbeatTimeoutCount: 3,
		Transport:             "udp", // udp | tcp | tls(SIPS,GB/T 28181-2022)
	}

	// FrameHub 是现成的 FrameSource:有界通道、满则丢弃。
	// 生产环境把编码器输出接到 hub.Write(au),替换下面的合成帧循环。
	hub := device.NewFrameHub()

	srv := device.New(cfg, device.DeviceInfo{
		Name:         "Front Door",
		Manufacturer: "MiBee Studio",
		Model:        "MiBee Eye",
	}, hub)

	// 可选:录像段索引,支持 RecordInfo/回放 INVITE。
	// srv.SetRecordingIndex(myIndex)

	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()

	errCh := make(chan error, 1)
	go func() { errCh <- srv.Start(ctx) }() // Start 阻塞:注册、保活、目录应答、INVITE 全在其内

	// 合成帧循环占位:每秒 1 个 IDR + 1 个 P 帧。真实视频替换为编码器的 NALU 访问单元。
	ticker := time.NewTicker(time.Second)
	defer ticker.Stop()

	for i := 0; ; i++ {
		select {
		case <-ctx.Done():
			srv.Stop()
			return
		case <-ticker.C:
			au := device.AccessUnit{Timestamp: time.Now(), KeyFrame: i%5 == 0}
			if au.KeyFrame {
				au.NALUs = []device.NALU{
					{Type: 7, IsSPS: true, Data: []byte{0x67, 0x42}},
					{Type: 8, IsPPS: true, Data: []byte{0x68, 0xEB}},
					{Type: 5, IsIDR: true, Data: []byte{0x65, 0x01}},
				}
			} else {
				au.NALUs = []device.NALU{{Type: 1, Data: []byte{0x41, 0x02}}}
			}
			hub.Write(au)
		case err := <-errCh:
			log.Fatalf("device server: %v", err)
		}
	}
}
安装:go get github.com/mickeyzzc/gb28181-go
手写 SIP、MANSCDP XML(GB2312/GBK/GB18030/UTF-8)、RTP/PS 媒体。经真实国标平台打磨;GB 35114 A 级安全可选(-tags gb35114)。

生成基于各库当前 release 的 API(gb28181-go v0.11.0 / gb28181-rs v0.12.0)。 所填地址与凭据仅在本页内存中拼装进代码,本站不收集、不上传;示例凭据请务必替换后再部署。

相关选购在淘宝查看「esp32 摄像头开发板」的实时价格与现货去逛逛 →推广