在线工具 · mickeyzzc 自研协议库

ONVIF 协议库代码生成器

ONVIF Profile S/T · SOAP + WS-Discovery · 服务门面客户端与字节稳定设备端

为 ONVIF 兼容相机与 NVR 生成接入骨架:onvif-go 是客户端(NVR / 平台侧对接设备),onvif-c 与 onvif-rs 是设备端(把你的媒体源挂到任意 NVR)。三个库同源同契——设备端响应 XML 与 onvif-go 客户端互为回环测试。 生成内容可直接复制粘贴;API 形态与各库 examples/ 编译参照一致,手册见 MiBee 文档中心。 另有 GB28181 协议库代码生成器 →

选库指引

做 NVR / 管理平台,去发现和控制相机 →onvif-go(Go 客户端)
ESP32 相机固件要被 NVR 发现添加 →onvif-c(C / ESP-IDF 设备端)
Linux / 树莓派媒体源要被 NVR 发现添加 →onvif-rs(Rust 设备端)

功能组合

连接
功能组合

生成代码

main.go · Go⇄ 可横向滚动
// onvif-go 接入骨架 —— 由 Mi&Bee's 百宝箱 协议库代码生成器生成
// 库: github.com/mickeyzzc/onvif-go v2.2.0 · MIT · 零第三方依赖
// 安装: go get github.com/mickeyzzc/onvif-go/v2
package main

import (
	"context"
	"fmt"
	"log"
	"time"

	"github.com/mickeyzzc/onvif-go/v2/onvif"
)

func main() {
	client, err := onvif.NewClient("http://192.168.1.100/onvif/device_service",
		onvif.WithCredentials("admin", "password"),
		onvif.WithTimeout(30*time.Second),
		onvif.WithAutoClockSkew(), // 自动校正设备时钟偏差
	)
	if err != nil {
		log.Fatalf("create client: %v", err)
	}

	ctx := context.Background()

	if err := client.Initialize(ctx); err != nil {
		log.Fatalf("initialize client: %v", err)
	}

	fmt.Println("ONVIF client 初始化完成")

	// 设备信息 + 主码流地址
	info, err := client.Device().GetDeviceInformation(ctx)
	if err != nil {
		log.Fatalf("GetDeviceInformation: %v", err)
	}
	fmt.Printf("%s %s(固件 %s,序列号 %s)\n",
		info.Manufacturer, info.Model, info.FirmwareVersion, info.SerialNumber)

	profiles, err := client.Media().GetProfiles(ctx)
	if err != nil {
		log.Fatalf("GetProfiles: %v", err)
	}
	mainToken := onvif.SelectMainProfile(profiles) // 分辨率最高者,而非 profiles[0]
	uri, err := client.Media().GetStreamURI(ctx, mainToken)
	if err != nil {
		log.Fatalf("GetStreamURI: %v", err)
	}
	fmt.Println("主码流:", uri.URI)
}
安装:go get github.com/mickeyzzc/onvif-go/v2
只做 ONVIF 信令:产出/消费流 URI(RTSP/HTTP/UDP),不搬运媒体本身。零第三方依赖,Go 1.26+。

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

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