package main import ( "fmt" "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.Video.Path, cfg.Video.FormatArgs()) ffmpeg.Start() audio := stream.InitPipedCmd(config.Get().Audio) audio.Start() } else { log.Fatalf("unsupported stream source type: %v", cfg.Stream.Source) } webrtc, err := rtc.InitListener(cfg.WebRtc.Host, cfg.WebRtc.Port, 5006) if err != nil { log.Fatal(err) } defer webrtc.Close() go webrtc.VideoListenerRead() go webrtc.AudioListenerRead() 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)) }