diff --git a/api_config.json b/api_config.json new file mode 100644 index 0000000..b65a0ac --- /dev/null +++ b/api_config.json @@ -0,0 +1,12 @@ +{ + "database_name": "/tmp/music.sqlite3", + "addr": ":8080", + "token": "!! config your very strong token here !!", + "ffmpeg_configs": { + "0. OPUS 128k": {"args": "-c:a libopus -ab 128k"}, + "OPUS 96k": {"args": "-c:a libopus -ab 96k"}, + "OPUS 256k": {"args": "-c:a libopus -ab 256k"}, + "AAC 128k": {"args": "-c:a aac -ab 128k"}, + "AAC 256k": {"args": "-c:a aac -ab 256k"} + } +} diff --git a/internal/pkg/api/api.go b/internal/pkg/api/api.go index ba7087a..5ca8ed0 100644 --- a/internal/pkg/api/api.go +++ b/internal/pkg/api/api.go @@ -28,11 +28,11 @@ type FfmpegConfigs struct { type AddFfmpegConfigRequest struct { Token string `json:"token"` + Name string `json:"name"` FfmpegConfig FfmpegConfig `json:"ffmpeg_config"` } type FfmpegConfig struct { - Name string `json:"name"` Args string `json:"args"` } @@ -458,7 +458,7 @@ func (api *API) HandleAddFfmpegConfig(w http.ResponseWriter, r *http.Request) { } // check name and args not null - if addFfmpegConfigRequest.FfmpegConfig.Name == "" { + if addFfmpegConfigRequest.Name == "" { api.HandleErrorString(w, r, `"ffmpeg_config.name" can't be empty`) return } @@ -469,7 +469,7 @@ func (api *API) HandleAddFfmpegConfig(w http.ResponseWriter, r *http.Request) { log.Println("[api] Add ffmpeg config") - api.APIConfig.FfmpegConfigs[addFfmpegConfigRequest.FfmpegConfig.Name] = &addFfmpegConfigRequest.FfmpegConfig + api.APIConfig.FfmpegConfigs[addFfmpegConfigRequest.Name] = &addFfmpegConfigRequest.FfmpegConfig api.HandleOK(w, r) } diff --git a/main.go b/main.go index 865053f..bfbed70 100644 --- a/main.go +++ b/main.go @@ -1,39 +1,38 @@ package main import ( + "encoding/json" "flag" "log" "msw-open-music/internal/pkg/api" + "os" ) -var DatabaseName string -var Listen string -var Token string +var APIConfigFilePath string func init() { - flag.StringVar(&DatabaseName, "db", "/tmp/music.sqlite3", "sqlite3 database file path") - flag.StringVar(&Listen, "listen", ":8080", "http server listening") - flag.StringVar(&Token, "token", "mikusavetheworld", "secret token") + flag.StringVar(&APIConfigFilePath, "apiconfig", "api_config.json", "API Config Json file") } func main() { + var err error flag.Parse() apiConfig := api.NewAPIConfig() - apiConfig.FfmpegConfigs["libopus 128k"] = &api.FfmpegConfig{ - Name: "libopus 128k", - Args: "-c:a libopus -ab 128k", + + apiConfigFile, err := os.Open(APIConfigFilePath) + if err != nil { + log.Fatal(err) } - apiConfig.FfmpegConfigs["libopus 256k"] = &api.FfmpegConfig{ - Name: "libopus 256k", - Args: "-c:a libopus -ab 256k", + err = json.NewDecoder(apiConfigFile).Decode(&apiConfig) + if err != nil { + log.Fatal(err) } - apiConfig.DatabaseName = DatabaseName - apiConfig.Addr = Listen - apiConfig.Token = Token + apiConfigFile.Close() + api, err := api.NewAPI(apiConfig) if err != nil { log.Fatal(err) } - log.Println("Started") + log.Println("Starting", apiConfig.DatabaseName, apiConfig.Addr, apiConfig.Token) log.Fatal(api.Server.ListenAndServe()) } diff --git a/web/index.js b/web/index.js index e79a134..dee95fc 100644 --- a/web/index.js +++ b/web/index.js @@ -573,10 +573,14 @@ const component_stream_config = { mounted() { axios.get('/api/v1/get_ffmpeg_config_list', ).then(response => { + // 后端返回数据 ffmpeg_configs 是一个字典,name 作为 key,ffmpeg_config{} 作为 value + // 为方便前端,此处将 ffmpeg_configs 转为数组,并添加 name 到每个对象中 var ffmpeg_configs = response.data.ffmpeg_configs var tmp_list = [] for (var key in ffmpeg_configs) { - tmp_list.push(ffmpeg_configs[key]) + var ffmpeg_config = ffmpeg_configs[key] + ffmpeg_config.name = key + tmp_list.push(ffmpeg_config) } tmp_list.sort() this.ffmpeg_config_list = tmp_list