在线工具 · 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 摄像头开发板」的实时价格与现货去逛逛 →推广