package main import ( "fmt" "rkkvm/config" "rkkvm/external/ffmpeg" "rkkvm/external/process" "rkkvm/http/route" "rkkvm/http/rtc" "strings" "github.com/gin-gonic/gin" log "github.com/sirupsen/logrus" ) const ConfigFile = "/etc/rkkvm/rkkvm.yml" func main() { if err := config.Load(ConfigFile); err != nil { config.Init() if err = config.Save(ConfigFile); err != nil { log.Error(err) } } 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") } webrtc, err := rtc.InitListener(cfg.WebRtc.Host, cfg.WebRtc.VideoPort, cfg.WebRtc.AudioPort) if err != nil { log.Fatal(err) } defer webrtc.Close() go webrtc.VideoListenerRead() go webrtc.AudioListenerRead() if cfg.Stream.Source == config.StreamSourceMjpeg { ustreamer := process.Init(cfg.UStreamer.Path, strings.Split(cfg.UStreamer.Args, " ")) ustreamer.Start() //go ustreamer.Watch() } else if cfg.Stream.Source == config.StreamSourceH264 { ffmpeg.InitFFmpeg() } else { log.Fatalf("unsupported stream source type: %v", cfg.Stream.Source) } r := gin.Default() r.Use(gin.Recovery()) route.Api(r) route.Static(r) if cfg.NanoKVMUISupport { route.Auth(r) route.VM(r) } r.Run(fmt.Sprintf(":%d", cfg.Port)) }