obs = obslua local last_update_time = 0 -- Funktion, um die lokale IP-Adresse zu bekommen function get_ip_address() local handle = io.popen("ipconfig") local result = handle:read("*a") handle:close() -- Suche nach der IPv4-Adresse for line in result:gmatch("[^\r\n]+") do if line:match("IPv4%-Adresse") or line:match("IPv4 Address") then local ip = line:match("%d+%.%d+%.%d+%.%d+") if ip then return ip end end end return "IP-Adresse nicht gefunden" end -- Variablen, um die IP-Adresse und andere Einstellungen zu speichern local ip_address = get_ip_address() local source_name = "" local prefix = "" local suffix = ":" -- Initialisierung des Skripts in OBS function script_description() return "K_STYERs dynamische IP Quelle: Dieses Skript zeigt die aktuelle Netzwerk-IP-Adresse an und aktualisiert eine lokale Medienquelle mit dieser IP." end -- Eigenschaften für das Skript function script_properties() local props = obs.obs_properties_create() obs.obs_properties_add_button(props, "button_update", "Aktualisieren", function() update_source(true) end) obs.obs_properties_add_text(props, "source_name", "Name der Medienquelle", obs.OBS_TEXT_DEFAULT) obs.obs_properties_add_text(props, "prefix", "Präfix", obs.OBS_TEXT_DEFAULT) obs.obs_properties_add_text(props, "current_ip", "Aktuelle IP Adresse", obs.OBS_TEXT_DEFAULT) obs.obs_properties_add_text(props, "suffix", "Suffix", obs.OBS_TEXT_DEFAULT) return props end -- Wenn die Skript-Einstellungen aktualisiert werden function script_update(settings) source_name = obs.obs_data_get_string(settings, "source_name") prefix = obs.obs_data_get_string(settings, "prefix") suffix = obs.obs_data_get_string(settings, "suffix") obs.obs_data_set_string(settings, "current_ip", ip_address) end -- Funktion, um die Medienquelle zu aktualisieren function update_source(manual) local current_time = os.time() local twelve_hours_in_seconds = 12 * 60 * 60 if manual or (current_time - last_update_time) >= twelve_hours_in_seconds then ip_address = get_ip_address() local source = obs.obs_get_source_by_name(source_name) if source then local settings = obs.obs_source_get_settings(source) local url = prefix .. ip_address .. suffix obs.obs_data_set_string(settings, "input", url) obs.obs_source_update(source, settings) obs.obs_data_release(settings) obs.obs_source_release(source) last_update_time = current_time if manual then obs.script_log(obs.LOG_INFO, "Medienquelle aktualisiert mit IP-Adresse: " .. ip_address) obs.script_log(obs.LOG_INFO, "Aktualisiert mit URL: " .. prefix .. ip_address .. suffix) end else obs.script_log(obs.LOG_WARNING, "Quelle nicht gefunden: " .. source_name) end end end -- Beim Skript-Start und periodisch alle 60 Sekunden aktualisieren function script_load(settings) last_update_time = obs.obs_data_get_int(settings, "last_update_time") or (os.time() - (12 * 60 * 60)) -- Setze die letzte Aktualisierung auf 12 Stunden in der Vergangenheit, um eine sofortige Aktualisierung zu erzwingen, falls kein Wert vorhanden ist obs.timer_add(function() update_source(false) end, 60000) -- Überprüft alle 60 Sekunden, ob eine Aktualisierung erforderlich ist end function script_save(settings) -- Speichere die letzte Aktualisierungszeit obs.obs_data_set_int(settings, "last_update_time", last_update_time) end function script_unload() obs.timer_remove(function() update_source(false) end) end