package ffmpeg import ( "github.com/gin-gonic/gin" "go.uber.org/zap" "ycmediakit/internal/pkg/result" "ycmediakit/internal/pkg/server/ffmpegServer" ) var ( cfg *ffmpegServer.FfmpegConfig logger *zap.Logger server *ffmpegServer.ToHlsServer ) func Init(cfg_ *ffmpegServer.FfmpegConfig) { cfg = cfg_ logger = zap.L() server = ffmpegServer.NewToHlsServer(&cfg.ToHls) } func StartToHls(c *gin.Context) { target := c.Query("target") streamPath := c.Query("streamPath") target, ok := server.PrepareUrl(target) if !ok { result.InvalidParams.WithFlag(false).Failure(c) return } streamPath, ok = server.PrepareStreamPath(streamPath) if !ok { result.InvalidParams.WithFlag(false).Failure(c) return } ok = server.Exists(streamPath) if ok { result.Created.WithFlagValue(true, server.BuildHlsPath(streamPath)).Success(c) return } err := server.ProbeWithTimeout(target, cfg.Timeout) if err != nil { logger.Error(err.Error()) result.Wrong.WithMsg(err.Error()).Error(c) return } ok = server.Add(target, streamPath, cfg.Timeout, &cfg.ToHls) if !ok { result.Ok.WithFlag(false).Failure(c) return } go func() { _, err = server.RunToHlsCmd(streamPath) if err != nil { logger.Error(err.Error()) err = server.DeleteAndStop(streamPath) if err != nil { logger.Error(err.Error()) } } }() result.Ok.WithFlagValue(true, server.BuildHlsPath(streamPath)).Success(c) } func ExistsToHls(c *gin.Context) { streamPath := c.Query("streamPath") streamPath, ok := server.PrepareStreamPath(streamPath) if !ok { result.InvalidParams.WithFlag(false).Failure(c) return } ok = server.Exists(streamPath) result.Ok.WithFlag(ok).Success(c) } func CloseToHls(c *gin.Context) { streamPath := c.Query("streamPath") streamPath, ok := server.PrepareStreamPath(streamPath) if !ok { result.InvalidParams.WithFlag(false).Failure(c) return } ok = server.Exists(streamPath) if !ok { result.NotFound.WithFlag(false).Failure(c) return } err := server.DeleteAndStop(streamPath) if err != nil { logger.Error(err.Error()) result.Wrong.WithMsg(err.Error()).Error(c) return } result.Ok.WithFlag(true).Success(c) } func GetToHlsList(c *gin.Context) { result.Ok.WithFlagValue(true, server.GetList()).Success(c) }