Files
yovision/Sense/internal/onvif/router.go
T
QiuSW 9567838045
Harness governance / validate (push) Has been cancelled
Harness governance / validate (pull_request) Has been cancelled
feat(sense): complete T-006 five-stream integration
2026-08-07 16:33:35 +08:00

51 lines
1.6 KiB
Go

package onvif
import (
"context"
"fmt"
"net/url"
"time"
)
type Router struct {
camera Adapter
credentials CredentialProvider
}
func NewRouter(camera Adapter, credentials CredentialProvider) *Router {
return &Router{camera: camera, credentials: credentials}
}
func (r *Router) Probe(ctx context.Context, target Target) (ProbeResult, error) {
endpoint, err := url.Parse(target.EndpointRef)
if err != nil || endpoint.Host == "" || endpoint.User != nil {
return ProbeResult{}, &Error{Code: ErrorInvalidReply, Err: fmt.Errorf("endpoint reference is invalid")}
}
switch endpoint.Scheme {
case "http", "https":
return r.camera.Probe(ctx, target)
case "rtsp", "rtsps":
if target.CredentialRef != "" {
credentials, resolveErr := r.credentials.Resolve(target.CredentialRef)
if resolveErr != nil {
return ProbeResult{}, &Error{Code: ErrorAuthentication, Err: resolveErr}
}
endpoint.User = url.UserPassword(credentials.RTSPUsername, credentials.RTSPPassword)
}
return ProbeResult{
Profiles: []Profile{{Token: "direct", Name: "direct", VideoEncoder: true}},
StreamURI: endpoint.String(),
}, nil
default:
return ProbeResult{}, &Error{Code: ErrorInvalidReply, Err: fmt.Errorf("unsupported endpoint scheme")}
}
}
func (r *Router) SetSystemDateAndTime(ctx context.Context, target Target, value time.Time) error {
endpoint, err := url.Parse(target.EndpointRef)
if err != nil || (endpoint.Scheme != "http" && endpoint.Scheme != "https") {
return &Error{Code: ErrorInvalidReply, Err: fmt.Errorf("clock sync requires an ONVIF endpoint")}
}
return r.camera.SetSystemDateAndTime(ctx, target, value)
}