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.
 
 

96 lines
2.2 KiB

package ffmpeg
import (
"ycmediakit/internal/pkg/global"
"ycmediakit/internal/pkg/result"
"ycmediakit/internal/pkg/server/ffmpegServer"
"github.com/gin-gonic/gin"
)
var (
toHlsServer *ffmpegServer.ToHlsServer
)
func init() {
toHlsServer = ffmpegServer.NewToHlsServer(&cfg.ToHls)
global.ToHlsServer = toHlsServer
}
func StartToHls(c *gin.Context) {
target := c.Query("target")
streamPath := c.Query("streamPath")
target, ok := ffmpegServer.PrepareUrl(target)
if !ok {
result.InvalidParams.WithVoidFV().Failure(c)
return
}
streamPath, ok = ffmpegServer.PrepareStreamPath(streamPath)
if !ok {
result.InvalidParams.WithVoidFV().Failure(c)
return
}
ok = toHlsServer.Exists(streamPath)
if ok {
result.Created.WithFullFV(toHlsServer.BuildHlsPath(streamPath)).Success(c)
return
}
err := ffmpegServer.ProbeWithTimeout(target, cfg.Timeout)
if err != nil {
log.Error(err.Error())
result.Wrong.WithVoidFV().WithMsg(err.Error()).Error(c)
return
}
ok = toHlsServer.Add(target, streamPath, cfg.Timeout, &cfg.ToHls)
if !ok {
result.Ok.WithVoidFV().Failure(c)
return
}
go func() {
_, err = toHlsServer.RunToHlsCmd(streamPath)
if err != nil {
log.Error(err.Error())
err = toHlsServer.DeleteAndStop(streamPath)
if err != nil {
log.Error(err.Error())
}
}
}()
result.Ok.WithFullFV(toHlsServer.BuildHlsPath(streamPath)).Success(c)
}
func ExistsToHls(c *gin.Context) {
streamPath := c.Query("streamPath")
streamPath, ok := ffmpegServer.PrepareStreamPath(streamPath)
if !ok {
result.InvalidParams.Failure(c)
return
}
ok = toHlsServer.Exists(streamPath)
result.Ok.WithFlag(ok).Success(c)
}
func CloseToHls(c *gin.Context) {
streamPath := c.Query("streamPath")
streamPath, ok := ffmpegServer.PrepareStreamPath(streamPath)
if !ok {
result.InvalidParams.Failure(c)
return
}
ok = toHlsServer.Exists(streamPath)
if !ok {
result.NotFound.Failure(c)
return
}
err := toHlsServer.DeleteAndStop(streamPath)
if err != nil {
log.Error(err.Error())
result.Wrong.WithMsg(err.Error()).Error(c)
return
}
result.Ok.WithFlag(true).Success(c)
}
func GetToHlsList(c *gin.Context) {
result.Ok.WithData(toHlsServer.GetList()).Success(c)
}