瀏覽代碼

rtmp-services: Add auth settings for custom server

Username and Password prompts have been added to the custom RTMP server UI
and saved in the config file alongside server and key.
Jess Mayo 10 年之前
父節點
當前提交
65d7f3b63f
共有 2 個文件被更改,包括 48 次插入1 次删除
  1. 3 0
      plugins/rtmp-services/data/locale/en-US.ini
  2. 45 1
      plugins/rtmp-services/rtmp-custom.c

+ 3 - 0
plugins/rtmp-services/data/locale/en-US.ini

@@ -3,3 +3,6 @@ CustomStreamingServer="Custom Streaming Server"
 Service="Service"
 Server="Server"
 StreamKey="Stream key"
+UseAuth="Use authentication"
+Username="Username"
+Password="Password"

+ 45 - 1
plugins/rtmp-services/rtmp-custom.c

@@ -2,6 +2,8 @@
 
 struct rtmp_custom {
 	char *server, *key;
+	bool use_auth;
+	char *username, *password;
 };
 
 static const char *rtmp_custom_name(void)
@@ -18,6 +20,9 @@ static void rtmp_custom_update(void *data, obs_data_t *settings)
 
 	service->server = bstrdup(obs_data_get_string(settings, "server"));
 	service->key    = bstrdup(obs_data_get_string(settings, "key"));
+	service->use_auth = obs_data_get_bool(settings, "use_auth");
+	service->username = bstrdup(obs_data_get_string(settings, "username"));
+	service->password = bstrdup(obs_data_get_string(settings, "password"));
 }
 
 static void rtmp_custom_destroy(void *data)
@@ -26,6 +31,8 @@ static void rtmp_custom_destroy(void *data)
 
 	bfree(service->server);
 	bfree(service->key);
+	bfree(service->username);
+	bfree(service->password);
 	bfree(service);
 }
 
@@ -38,16 +45,35 @@ static void *rtmp_custom_create(obs_data_t *settings, obs_service_t *service)
 	return data;
 }
 
+static bool use_auth_modified(obs_properties_t *ppts, obs_property_t *p,
+	obs_data_t *settings)
+{
+	bool use_auth = obs_data_get_bool(settings, "use_auth");
+	p = obs_properties_get(ppts, "username");
+	obs_property_set_visible(p, use_auth);
+	p = obs_properties_get(ppts, "password");
+	obs_property_set_visible(p, use_auth);
+	return true;
+}
+
 static obs_properties_t *rtmp_custom_properties(void *unused)
 {
 	UNUSED_PARAMETER(unused);
 
 	obs_properties_t *ppts = obs_properties_create();
+	obs_property_t *p;
 
 	obs_properties_add_text(ppts, "server", "URL", OBS_TEXT_DEFAULT);
 
 	obs_properties_add_text(ppts, "key", obs_module_text("StreamKey"),
 			OBS_TEXT_PASSWORD);
+
+	p = obs_properties_add_bool(ppts, "use_auth", obs_module_text("UseAuth"));
+	obs_properties_add_text(ppts, "username", obs_module_text("Username"),
+			OBS_TEXT_DEFAULT);
+	obs_properties_add_text(ppts, "password", obs_module_text("Password"),
+			OBS_TEXT_PASSWORD);
+	obs_property_set_modified_callback(p, use_auth_modified);
 	return ppts;
 }
 
@@ -63,6 +89,22 @@ static const char *rtmp_custom_key(void *data)
 	return service->key;
 }
 
+static const char *rtmp_custom_username(void *data)
+{
+	struct rtmp_custom *service = data;
+	if (!service->use_auth)
+		return NULL;
+	return service->username;
+}
+
+static const char *rtmp_custom_password(void *data)
+{
+	struct rtmp_custom *service = data;
+	if (!service->use_auth)
+		return NULL;
+	return service->password;
+}
+
 struct obs_service_info rtmp_custom_service = {
 	.id             = "rtmp_custom",
 	.get_name       = rtmp_custom_name,
@@ -71,5 +113,7 @@ struct obs_service_info rtmp_custom_service = {
 	.update         = rtmp_custom_update,
 	.get_properties = rtmp_custom_properties,
 	.get_url        = rtmp_custom_url,
-	.get_key        = rtmp_custom_key
+	.get_key        = rtmp_custom_key,
+	.get_username   = rtmp_custom_username,
+	.get_password   = rtmp_custom_password
 };