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