Files
gb28181/internal/adapter/onvifadapter/hook.go
T
2026-01-21 13:11:21 +08:00

58 lines
1.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package onvifadapter
import (
"context"
"fmt"
"log/slog"
"github.com/gowvp/owl/internal/core/ipc"
"github.com/gowvp/owl/internal/core/sms"
"github.com/ixugo/goddd/pkg/orm"
)
// OnStreamChanged implements ipc.Protocoler.
// ONVIF 协议的 stream 就是 channel.IDapp 固定为 live
func (a *Adapter) OnStreamChanged(ctx context.Context, app, stream string) error {
var ch ipc.Channel
if err := a.adapter.Store().Channel().Get(ctx, &ch, orm.Where("id=?", stream)); err != nil {
return err
}
if err := a.adapter.EditPlayingByID(ctx, ch.ID, false); err != nil {
slog.ErrorContext(ctx, "编辑播放状态失败", "err", err)
}
return nil
}
func (a *Adapter) OnStreamNotFound(ctx context.Context, app, stream string) error {
var ch ipc.Channel
if err := a.adapter.Store().Channel().Get(ctx, &ch, orm.Where("id=?", stream)); err != nil {
return err
}
onvifDev, ok := a.devices.Load(ch.DeviceID)
if !ok {
return fmt.Errorf("ONVIF 设备未初始化")
}
streamURI, err := a.getStreamURI(ctx, onvifDev, ch.ChannelID)
if err != nil {
return err
}
svr, err := a.sms.GetMediaServer(ctx, sms.DefaultMediaServerID)
if err != nil {
return err
}
_, err = a.sms.AddStreamProxy(svr, sms.AddStreamProxyRequest{
App: app,
Stream: stream,
URL: streamURI,
})
if err == nil {
if err := a.adapter.EditPlaying(ctx, ch.DeviceID, ch.ChannelID, true); err != nil {
slog.ErrorContext(ctx, "编辑播放状态失败", "err", err)
}
}
return err
}