快速开始:发现并取流
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包(解析分析输出流)。