You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
2.2 KiB

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)
}