diff --git a/server/WebApi.cpp b/server/WebApi.cpp index 5f64e07352..ba5f29c2f2 100755 --- a/server/WebApi.cpp +++ b/server/WebApi.cpp @@ -1090,7 +1090,8 @@ void installWebApi() { args.emplace(pr.first, pr.second); } - ProtocolOption option(allArgs); + ProtocolOption option; + load(allArgs, option); auto retry_count = allArgs["retry_count"].empty()? -1: allArgs["retry_count"].as(); addStreamProxy(allArgs["vhost"], allArgs["app"], @@ -1849,7 +1850,7 @@ void installWebApi() { // 默认解复用mp4不生成mp4 option.enable_mp4 = false; // 但是如果参数明确指定开启mp4, 那么也允许之 - option.load(allArgs); + load(allArgs, option); // 强制无人观看时自动关闭 option.auto_close = true; diff --git a/server/WebHook.cpp b/server/WebHook.cpp index aa99a94c22..717bd5564b 100755 --- a/server/WebHook.cpp +++ b/server/WebHook.cpp @@ -351,13 +351,14 @@ void installWebHook() { body["originTypeStr"] = getOriginTypeString(type); // 执行hook do_http_hook(hook_publish, body, [invoker](const Value &obj, const string &err) mutable { + ProtocolOption o; + // 默认 推流鉴权失败 if (err.empty()) { // 推流鉴权成功 - invoker(err, ProtocolOption(jsonToMini(obj))); - } else { - // 推流鉴权失败 - invoker(err, ProtocolOption()); + load(jsonToMini(obj), o); } + // using PublishAuthInvoker = std::function; + invoker(err, o); }); }); diff --git a/src/Common/MediaSource.h b/src/Common/MediaSource.h index b156954c5c..dbdd324a0a 100644 --- a/src/Common/MediaSource.h +++ b/src/Common/MediaSource.h @@ -214,45 +214,41 @@ class ProtocolOption { // 最大track数 size_t max_track = 2; +}; - template - ProtocolOption(const MAP &allArgs) : ProtocolOption() { - load(allArgs); - } - template - void load(const MAP &allArgs) { -#define GET_OPT_VALUE(key) getArgsValue(allArgs, #key, key) - GET_OPT_VALUE(modify_stamp); - GET_OPT_VALUE(enable_audio); - GET_OPT_VALUE(add_mute_audio); - GET_OPT_VALUE(auto_close); - GET_OPT_VALUE(continue_push_ms); - GET_OPT_VALUE(paced_sender_ms); - - GET_OPT_VALUE(enable_hls); - GET_OPT_VALUE(enable_hls_fmp4); - GET_OPT_VALUE(enable_mp4); - GET_OPT_VALUE(enable_rtsp); - GET_OPT_VALUE(enable_rtmp); - GET_OPT_VALUE(enable_ts); - GET_OPT_VALUE(enable_fmp4); - - GET_OPT_VALUE(hls_demand); - GET_OPT_VALUE(rtsp_demand); - GET_OPT_VALUE(rtmp_demand); - GET_OPT_VALUE(ts_demand); - GET_OPT_VALUE(fmp4_demand); - - GET_OPT_VALUE(mp4_max_second); - GET_OPT_VALUE(mp4_as_player); - GET_OPT_VALUE(mp4_save_path); - - GET_OPT_VALUE(hls_save_path); - GET_OPT_VALUE(stream_replace); - GET_OPT_VALUE(max_track); - } -}; +template +void load(const MAP &allArgs, ProtocolOption& o) { +#define GET_OPT_VALUE(key) getArgsValue(allArgs, #key, o. key) + GET_OPT_VALUE(modify_stamp); + GET_OPT_VALUE(enable_audio); + GET_OPT_VALUE(add_mute_audio); + GET_OPT_VALUE(auto_close); + GET_OPT_VALUE(continue_push_ms); + GET_OPT_VALUE(paced_sender_ms); + + GET_OPT_VALUE(enable_hls); + GET_OPT_VALUE(enable_hls_fmp4); + GET_OPT_VALUE(enable_mp4); + GET_OPT_VALUE(enable_rtsp); + GET_OPT_VALUE(enable_rtmp); + GET_OPT_VALUE(enable_ts); + GET_OPT_VALUE(enable_fmp4); + + GET_OPT_VALUE(hls_demand); + GET_OPT_VALUE(rtsp_demand); + GET_OPT_VALUE(rtmp_demand); + GET_OPT_VALUE(ts_demand); + GET_OPT_VALUE(fmp4_demand); + + GET_OPT_VALUE(mp4_max_second); + GET_OPT_VALUE(mp4_as_player); + GET_OPT_VALUE(mp4_save_path); + + GET_OPT_VALUE(hls_save_path); + GET_OPT_VALUE(stream_replace); + GET_OPT_VALUE(max_track); +} //该对象用于拦截感兴趣的MediaSourceEvent事件 class MediaSourceEventInterceptor : public MediaSourceEvent {