Files
lkm/args.go
2024-11-30 17:48:39 +08:00

94 lines
1.9 KiB
Go

package main
import (
"github.com/lkmio/avformat/utils"
"github.com/lkmio/lkm/stream"
"os"
"strconv"
"strings"
)
func readRunArgs() (map[string]string, map[string]string) {
args := os.Args
// 运行参数项优先级高于config.json参数项
// --disable-rtmp --enable-rtmp=11935
// --disable-rtsp --enable-rtsp
// --disable-hls --enable-hls
// --disable-webrtc --enable-webrtc=18000
// --disable-gb28181 --enable-gb28181
// --disable-jt1078 --enable-jt1078=11078
// --disable-hooks --enable-hooks
// --disable-record --enable-record
disableOptions := map[string]string{}
enableOptions := map[string]string{}
for _, arg := range args {
// 参数忽略大小写
arg = strings.ToLower(arg)
var option string
var enable bool
if strings.HasPrefix(arg, "--disable-") {
option = arg[len("--disable-"):]
} else if strings.HasPrefix(arg, "--enable-") {
option = arg[len("--enable-"):]
enable = true
} else {
continue
}
pair := strings.Split(option, "=")
var value string
if len(pair) > 1 {
value = pair[1]
}
if enable {
enableOptions[pair[0]] = value
} else {
disableOptions[pair[0]] = value
}
}
// 删除重叠参数, 禁用和开启同时声明时, 以开启为准.
for k := range enableOptions {
if _, ok := disableOptions[k]; ok {
delete(disableOptions, k)
}
}
return disableOptions, enableOptions
}
func mergeArgs(options map[string]stream.EnableConfig, disableOptions, enableOptions map[string]string) {
for k := range disableOptions {
option, ok := options[k]
utils.Assert(ok)
option.SetEnable(false)
}
for k, v := range enableOptions {
var port int
if len(v) > 0 {
atoi, err := strconv.Atoi(v)
if err == nil && atoi > 0 {
port = atoi
}
}
option, ok := options[k]
utils.Assert(ok)
option.SetEnable(true)
if port > 0 {
if config, ok := option.(stream.PortConfig); ok {
config.SetPort(port)
}
}
}
}