diff --git a/html/input.php b/html/input.php index 89ead82..4f11bbf 100755 --- a/html/input.php +++ b/html/input.php @@ -162,8 +162,9 @@ function all_service_update() if ($new["service_name"] !== "") { $ffmpeg .= '-metadata service_name="' . $new["service_name"] . '" '; } - $ffmpeg .= ' -pcr_period 20 -f mpegts "udp://' . $new["output_udp"] . '?pkt_size=1316&bitrate=4500000&flush_packets=1&localaddr=10.10.10.11"'; + $ffmpeg .= ' -pcr_period 20 -f mpegts "udp://' . $new["output_udp"] . '?pkt_size=1316&bitrate=4500000&flush_packets=1'; + $ffmpeg .= '"'; file_put_contents("/var/www/encoder/" . $new["id"] . ".sh", $ffmpeg); if ($new["service"] === "enable") { @@ -213,8 +214,9 @@ function all_service_start() if ($new["service_name"] !== "") { $ffmpeg .= '-metadata service_name="' . $new["service_name"] . '" '; } - $ffmpeg .= ' -pcr_period 20 -f mpegts "udp://' . $new["output_udp"] . '?pkt_size=1316&bitrate=4500000&flush_packets=1&localaddr=10.10.10.11"'; + $ffmpeg .= ' -pcr_period 20 -f mpegts "udp://' . $new["output_udp"] . '?pkt_size=1316&bitrate=4500000&flush_packets=1'; + $ffmpeg .= '"'; file_put_contents("/var/www/encoder/" . $new["id"] . ".sh", $ffmpeg); if ($new["service"] === "enable") { @@ -258,6 +260,21 @@ function all_service_stop() ); } +// Load network interfaces +$networkFile = "/var/www/network.json"; +$interfaces = []; +if (file_exists($networkFile)) { + $networkData = json_decode(file_get_contents($networkFile), true); + if (is_array($networkData)) { + foreach ($networkData as $interfaceName => $interfaceData) { + $nickname = !empty($interfaceData["interface_nickname"]) + ? $interfaceData["interface_nickname"] + : $interfaceName; + $interfaces[$interfaceName] = $nickname; + } + } +} + $jsonFile = __DIR__ . "/input.json"; if (!file_exists($jsonFile)) { file_put_contents($jsonFile, json_encode([])); @@ -267,6 +284,21 @@ $data = json_decode(file_get_contents($jsonFile), true); foreach ($data as $k => $d) { if (!isset($d["service_name"])) $data[$k]["service_name"] = ""; if (!isset($d["volume"])) $data[$k]["volume"] = "0"; + // Extract interface from input_udp and output_udp if not already present + if (isset($d["input_udp"]) && !isset($d["input_interface"])) { + $parts = explode(':', $d["input_udp"]); + if (count($parts) >= 3) { + $data[$k]["input_interface"] = $parts[0]; + $data[$k]["input_udp"] = $parts[1] . ':' . $parts[2]; + } + } + if (isset($d["output_udp"]) && !isset($d["output_interface"])) { + $parts = explode(':', $d["output_udp"]); + if (count($parts) >= 3) { + $data[$k]["output_interface"] = $parts[0]; + $data[$k]["output_udp"] = $parts[1] . ':' . $parts[2]; + } + } } file_put_contents($jsonFile, json_encode($data, JSON_PRETTY_PRINT)); @@ -278,7 +310,9 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") { "id" => time(), "service_name" => $_POST["service_name"], "input_udp" => $_POST["input_udp"], + "input_interface" => $_POST["in_interface"], "output_udp" => $_POST["output_udp"], + "output_interface" => $_POST["out_interface"], "video_format" => $_POST["video_format"], "audio_format" => $_POST["audio_format"], "resolution" => $_POST["resolution"], @@ -308,8 +342,9 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") { if ($new["service_name"] !== "") { $ffmpeg .= '-metadata service_name="' . $new["service_name"] . '" '; } - $ffmpeg .= ' -pcr_period 20 -f mpegts "udp://' . $new["output_udp"] . '?pkt_size=1316&bitrate=4500000&flush_packets=1&localaddr=10.10.10.11"'; + $ffmpeg .= ' -pcr_period 20 -f mpegts "udp://' . $new["output_udp"] . '?pkt_size=1316&bitrate=4500000&flush_packets=1'; + $ffmpeg .= '"'; file_put_contents("/var/www/encoder/" . $new["id"] . ".sh", $ffmpeg); if ($new["service"] === "enable") { @@ -335,7 +370,6 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") { if (file_exists("/var/www/encoder/$id.sh")) unlink("/var/www/encoder/$id.sh"); - // Redirect to refresh page after deleting header("Location: " . $_SERVER["PHP_SELF"]); exit; break; @@ -349,7 +383,9 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") { "id" => $id, "service_name" => $_POST["service_name"], "input_udp" => $_POST["input_udp"], + "input_interface" => $_POST["in_interface"], "output_udp" => $_POST["output_udp"], + "output_interface" => $_POST["out_interface"], "video_format" => $_POST["video_format"], "audio_format" => $_POST["audio_format"], "resolution" => $_POST["resolution"], @@ -376,7 +412,8 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") { if ($new["service_name"] !== "") { $ffmpeg .= '-metadata service_name="' . $new["service_name"] . '" '; } - $ffmpeg .= ' -pcr_period 20 -f mpegts "udp://' . $new["output_udp"] . '?pkt_size=1316&bitrate=4500000&flush_packets=1&localaddr=10.10.10.11"'; + $ffmpeg .= ' -pcr_period 20 -f mpegts "udp://' . $new["output_udp"] . '?pkt_size=1316&bitrate=4500000&flush_packets=1'; + $ffmpeg .= '"'; file_put_contents("/var/www/encoder/$id.sh", $ffmpeg); @@ -393,32 +430,27 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") { } file_put_contents($jsonFile, json_encode($newData, JSON_PRETTY_PRINT)); - // Redirect to refresh page after editing header("Location: " . $_SERVER["PHP_SELF"]); exit; break; case "restart": $id = intval($_POST["id"]); exec("sudo systemctl restart encoder@$id"); - // Redirect to refresh page after restart header("Location: " . $_SERVER["PHP_SELF"]); exit; break; case "start_all": all_service_start(); - // Redirect to refresh page after start_all header("Location: " . $_SERVER["PHP_SELF"]); exit; break; case "stop_all": all_service_stop(); - // Redirect to refresh page after stop_all header("Location: " . $_SERVER["PHP_SELF"]); exit; break; case "update_all": all_service_update(); - // Redirect to refresh page after update_all header("Location: " . $_SERVER["PHP_SELF"]); exit; break; @@ -430,6 +462,21 @@ $data = json_decode(file_get_contents($jsonFile), true); foreach ($data as $k => $d) { if (!isset($d["service_name"])) $data[$k]["service_name"] = ""; if (!isset($d["volume"])) $data[$k]["volume"] = "0"; + // Extract interface from input_udp and output_udp if not already present + if (isset($d["input_udp"]) && !isset($d["input_interface"])) { + $parts = explode(':', $d["input_udp"]); + if (count($parts) >= 3) { + $data[$k]["input_interface"] = $parts[0]; + $data[$k]["input_udp"] = $parts[1] . ':' . $parts[2]; + } + } + if (isset($d["output_udp"]) && !isset($d["output_interface"])) { + $parts = explode(':', $d["output_udp"]); + if (count($parts) >= 3) { + $data[$k]["output_interface"] = $parts[0]; + $data[$k]["output_udp"] = $parts[1] . ':' . $parts[2]; + } + } } file_put_contents($jsonFile, json_encode($data, JSON_PRETTY_PRINT)); @@ -482,8 +529,30 @@ file_put_contents($jsonFile, json_encode($data, JSON_PRETTY_PRINT)); -
In:
-
Out:
+
In: + +
+
In Port: + +
+
Out: + +
+
Out Port: + +
@@ -523,8 +592,29 @@ file_put_contents($jsonFile, json_encode($data, JSON_PRETTY_PRINT)); - - +
+
+ + +
+
+ + +
+
+ + + - +