package main import ( "fmt" "net/http" "rkkvm/config" "rkkvm/http/hw/rtc" "rkkvm/http/hw/stream" "rkkvm/http/route" "strings" "github.com/gin-gonic/gin" log "github.com/sirupsen/logrus" ) func main() { config.Init() cfg := config.Get() lvl, err := log.ParseLevel(cfg.LogLevel) if err == nil { log.SetLevel(lvl) } else { log.Println("Failed to parse log level, use default level: info") } if cfg.Stream.Source == config.StreamSourceMjpeg { ustreamer := stream.Init(cfg.UStreamer.Path, strings.Split(cfg.UStreamer.Args, " ")) ustreamer.Start() //go ustreamer.Watch() } else if cfg.Stream.Source == config.StreamSourceH264 { ffmpeg := stream.InitFFmpeg(cfg.FFmpeg.Path, cfg.FFmpeg.FormatArgs()) ffmpeg.Start() //go ffmpeg.Watch() } else { log.Fatalf("unsupported stream source type: %v", cfg.Stream.Source) } webrtc, err := rtc.Init(cfg.WebRtc.Host, cfg.WebRtc.Port) if err != nil { log.Fatal(err) } go webrtc.Read() go webrtc.Listen() r := gin.Default() r.Use(gin.Recovery()) r.GET("/ping", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "pong", }) }) route.Api(r) route.Static(r) if cfg.NanoKVMUISupport { r.POST("/api/auth/login", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "token": "disabled", }) }) } r.Run(fmt.Sprintf(":%d", cfg.Port)) }