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

快速开始:发现并取流

onvif-go/v2 是 ONVIF 客户端(也含服务端)。本页给最小可编译示例: 连接一台相机、列出 profile、用启发式选出主 / 子码流。

安装

go get github.com/mickeyzzc/onvif-go/v2@v2.2.0

v2 已稳定(v2.0.0 于 2026-09-17 发布,当前线为 v2.2.0);生产仍固定 到具体版本号。

最小示例

package main

import (
	"context"
	"fmt"
	"log"

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

func main() {
	client, err := onvif.NewClient("192.0.2.10")
	if err != nil {
		log.Fatal(err)
	}
	profiles, err := client.Media().GetProfiles(context.Background())
	if err != nil {
		log.Fatal(err)
	}
	mainToken := onvif.SelectMainProfile(profiles)
	subToken := onvif.SelectSubProfile(profiles, mainToken)
	fmt.Println("main profile:", mainToken, "sub profile:", subToken)
}

要点:

  • NewClient 接受 IP 或 URL;鉴权用 WithCredentials 等选项按需追加 (鉴权与安全)。
  • 取流地址用 client.Media().GetStreamURI,可经 StreamSetup 指定 RTSP / HTTP 等传输(媒体与码流)。
  • 事件订阅一句话搞定:client.Events().SubscribeEvents(事件)。
  • H.265/AV1 配置在 Media2 模型:client.Media2().GetVideoEncoderConfigurationOptions 按支持的编码逐条上报、Encoding 为自由名(媒体)。
  • Profile M 面:client.Analytics()(规则/分析模块配置)与 metadata 包(解析分析输出流)。

下一步

可访问性增强功能已加载,支持焦点管理、键盘导航和屏幕阅读器