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
99 lines
2.2 KiB
2 years ago
|
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)
|
||
|
}
|