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.
 
 

90 lines
1.9 KiB

package cmd
import (
"context"
"fmt"
"net/http"
"path/filepath"
"ycmediakit/internal/app/ffmpeg"
"ycmediakit/internal/pkg/config"
"ycmediakit/internal/pkg/global"
"ycmediakit/internal/pkg/server/ffmpegServer"
"ycmediakit/internal/pkg/server/systemServer"
"ycmediakit/internal/pkg/util"
"ycmediakit/middleware"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)
var (
rCfg *config.RunConfig
aCfg *config.AppConfig
log *zap.Logger
ctx context.Context
engine *gin.Engine
)
var (
payloadServer *systemServer.PayloadServer
toHlsServer *ffmpegServer.ToHlsServer
)
func init() {
initAttr()
initServer()
initEngine()
}
func initAttr() {
rCfg = global.RunConfig
aCfg = global.AppConfig
log = global.Logger
}
func initServer() {
payloadServer = global.PayloadServer
toHlsServer = global.ToHlsServer
}
func initEngine() {
if !rCfg.Debug {
gin.SetMode(gin.ReleaseMode)
}
engine = gin.New()
engine.Use(middleware.Cors())
engine.Use(middleware.GinLogger(log), middleware.GinRecovery(log, true))
engine.Use(middleware.HttpInterceptor())
initFfmpegServices()
}
func initFfmpegServices() {
fCfg := &aCfg.Ffmpeg
ffmpegGroup := engine.Group("/ffmpeg")
if payloadServer.Cfg.Enable {
ffmpegGroup.Use(middleware.ProbePayloadInterceptor(payloadServer))
}
ffmpeg.BindRouters(ffmpegGroup)
toHlsCfg := &fCfg.ToHls
hlsPath := filepath.Join(util.GetWorkPath(), toHlsCfg.HlsRoot)
_, _ = util.CheckDir(hlsPath)
hlsGroup := engine.Group("/" + toHlsCfg.HlsRoot)
if toHlsServer.Cfg.Keepalive.Enable {
hlsGroup.Use(middleware.KeepAliveToHlsInterceptor(toHlsServer.Supervisor))
ffmpegGroup.Use(middleware.ProbePayloadInterceptor(payloadServer))
}
hlsGroup.StaticFS("/", http.Dir(hlsPath))
}
func Run(ctx_ context.Context) {
ctx = ctx_
port := aCfg.Server.Port
runMsg := "Listening and serving HTTP on :" + port
fmt.Printf(runMsg + "\n")
log.Info(runMsg)
if err := engine.Run(":" + port); err != nil {
log.Error(err.Error())
return
}
}