diff --git a/plugins/rtmp-services/rtmp-common.c b/plugins/rtmp-services/rtmp-common.c index 77b4b74ad..ea54a126c 100644 --- a/plugins/rtmp-services/rtmp-common.c +++ b/plugins/rtmp-services/rtmp-common.c @@ -108,6 +108,31 @@ static void update_recommendations(struct rtmp_common *service, json_t *rec) service->max_fps = get_int_val(rec, "max fps"); } +#define RTMP_PREFIX "rtmp://" +#define RTMPS_PREFIX "rtmps://" + +static const char *get_protocol(json_t *service, obs_data_t *settings) +{ + const char *protocol = get_string_val(service, "protocol"); + if (protocol) { + return protocol; + } + + json_t *servers = json_object_get(service, "servers"); + if (!json_is_array(servers)) + return "RTMP"; + + json_t *server = json_array_get(servers, 0); + const char *url = get_string_val(server, "url"); + + if (strncmp(url, RTMPS_PREFIX, strlen(RTMPS_PREFIX)) == 0) { + obs_data_set_string(settings, "protocol", "RTMPS"); + return "RTMPS"; + } + + return "RTMP"; +} + static void rtmp_common_update(void *data, obs_data_t *settings) { struct rtmp_common *service = data; @@ -143,6 +168,13 @@ static void rtmp_common_update(void *data, obs_data_t *settings) service->service = bstrdup(new_name); } + if ((service->protocol == NULL || + service->protocol[0] == '\0')) { + bfree(service->protocol); + service->protocol = + bstrdup(get_protocol(serv, settings)); + } + if (serv) { json_t *rec = json_object_get(serv, "recommended"); if (json_is_object(rec)) { @@ -209,9 +241,6 @@ static inline bool get_bool_val(json_t *service, const char *key) return json_is_true(bool_val); } -#define RTMP_PREFIX "rtmp://" -#define RTMPS_PREFIX "rtmps://" - static bool is_protocol_available(json_t *service) { const char *protocol = get_string_val(service, "protocol");