64 lines
1.3 KiB
Go
64 lines
1.3 KiB
Go
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))
|
|
}
|