Files
donut/internal/controllers/srt_controller.go
2024-01-28 07:05:31 -03:00

55 lines
1.1 KiB
Go

package controllers
import (
astisrt "github.com/asticode/go-astisrt/pkg"
"github.com/flavioribeiro/donut/internal/entities"
"go.uber.org/zap"
)
type SRTController struct {
c *entities.Config
l *zap.Logger
}
func NewSRTController(c *entities.Config, l *zap.Logger) *SRTController {
return &SRTController{
c: c,
l: l,
}
}
func (c *SRTController) Connect(params *entities.RequestParams) (*astisrt.Connection, error) {
if params == nil {
return nil, entities.ErrMissingRemoteOffer
}
if err := params.Valid(); err != nil {
return nil, err
}
c.l.Sugar().Infow("Connecting to SRT ",
"offer", params,
)
conn, err := astisrt.Dial(astisrt.DialOptions{
ConnectionOptions: []astisrt.ConnectionOption{
astisrt.WithLatency(c.c.SRTConnectionLatencyMS),
astisrt.WithStreamid(params.SRTStreamID),
},
OnDisconnect: func(conn *astisrt.Connection, err error) {
c.l.Sugar().Fatalw("Disconnected from SRT",
"error", err,
)
},
Host: params.SRTHost,
Port: params.SRTPort,
})
if err != nil {
return nil, err
}
c.l.Sugar().Infow("Connected to SRT")
return conn, nil
}