From d5e7fd62e829b1d44bc8451b199371d21acd39a9 Mon Sep 17 00:00:00 2001 From: devdatt Date: Sun, 18 Jan 2026 00:56:27 +0530 Subject: [PATCH] update --- html/input.php | 444 +++++++++++++++++++++++++++++++++----- html/stop_all_encoders.sh | 15 ++ 2 files changed, 410 insertions(+), 49 deletions(-) create mode 100644 html/stop_all_encoders.sh diff --git a/html/input.php b/html/input.php index 20eaee0..19c1633 100644 --- a/html/input.php +++ b/html/input.php @@ -1,58 +1,62 @@ $d) { if (!isset($d["service_name"])) $data[$k]["service_name"] = ""; if (!isset($d["volume"])) $data[$k]["volume"] = "0"; } file_put_contents($jsonFile, json_encode($data, JSON_PRETTY_PRINT)); -/* ---------------- ADD ---------------- */ - +/* ---------------- ADD NEW ---------------- */ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "add") { - $id = time(); - $core = allocateCore($id); - $new = [ - "id" => $id, + "id" => time(), "service_name" => $_POST["service_name"], "input_udp" => $_POST["input_udp"], "output_udp" => $_POST["output_udp"], @@ -90,6 +90,7 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "add") { $data[] = $new; file_put_contents($jsonFile, json_encode($data, JSON_PRETTY_PRINT)); + $core = allocateCore($new["id"]); $ffmpeg = 'taskset -c ' . $core . ' ffmpeg -hide_banner -loglevel error \ -thread_queue_size 16384 \ @@ -99,9 +100,12 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "add") { -vf "scale=' . $new["resolution"] . ',format=yuv420p" \ -c:v ' . $new["video_format"] . ' \ -threads 1 \ - -r 25 -g 50 -bf 0 \ + -r 25 \ + -g 50 \ + -bf 0 \ -qmin 3 -qmax 35 \ - -me_method dia -subq 0 \ + -me_method dia \ + -subq 0 \ -b:v ' . $new["video_bitrate"] . 'k \ -minrate ' . $new["video_bitrate"] . 'k \ -maxrate ' . $new["video_bitrate"] . 'k \ @@ -110,37 +114,42 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "add") { -b:a ' . $new["audio_bitrate"] . 'k -ar 48000 -ac 2 \ -af "volume=' . $new["volume"] . 'dB,aresample=async=1000" \ -metadata service_provider="ShreeBhattJI" '; + 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"'; + if ($new["service_name"] !== "") - $ffmpeg .= '-metadata service_name="' . $new["service_name"] . '" '; + $ffmpeg .= '-metadata service_name="' . $new["service_name"] . '"'; + $ffmpeg .= ' -f mpegts "udp://@' . $new["output_udp"] . '?pkt_size=1316&bitrate=4500000"'; - $ffmpeg .= '-pcr_period 20 \ - -f mpegts "udp://' . $new["output_udp"] . '?pkt_size=1316&flush_packets=1"'; - file_put_contents("/var/www/encoder/{$id}.sh", $ffmpeg); + + file_put_contents("/var/www/encoder/{$new["id"]}.sh", $ffmpeg); if ($new["service"] === "enable") { - exec("sudo systemctl enable encoder@$id"); - exec("sudo systemctl restart encoder@$id"); + exec("sudo systemctl enable encoder@{$new["id"]}"); + exec("sudo systemctl restart encoder@{$new["id"]}"); } - echo "OK"; exit; } /* ---------------- DELETE ---------------- */ - if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "delete") { $id = intval($_POST["id"]); - $data = array_values(array_filter($data, fn($r) => $r["id"] != $id)); - file_put_contents($jsonFile, json_encode($data, JSON_PRETTY_PRINT)); + $newData = []; + foreach ($data as $row) { + if ($row["id"] != $id) $newData[] = $row; + } + + file_put_contents($jsonFile, json_encode($newData, JSON_PRETTY_PRINT)); exec("sudo systemctl stop encoder@$id"); exec("sudo systemctl disable encoder@$id"); - freeCore($id); - if (file_exists("/var/www/encoder/$id.sh")) unlink("/var/www/encoder/$id.sh"); echo "OK"; @@ -148,13 +157,12 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "delete") { } /* ---------------- EDIT ---------------- */ - if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "edit") { $id = intval($_POST["id"]); - $core = getServiceCore($id) ?? allocateCore($id); + $newData = []; - foreach ($data as &$row) { + foreach ($data as $row) { if ($row["id"] == $id) { $row = [ @@ -171,10 +179,43 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "edit") { "service" => $_POST["service"] ]; - $ffmpeg = 'taskset -c ' . $core . ' ffmpeg -hide_banner -loglevel error ...'; + $new = $row; + $core = getServiceCore($id); + if ($core === null) { + $core = allocateCore($id); + } + + $ffmpeg = 'taskset -c ' . $core . ' ffmpeg -hide_banner -loglevel error \ + -thread_queue_size 16384 \ + -fflags +genpts+discardcorrupt+nobuffer \ + -flags +low_delay \ + -i "udp://@' . $new["input_udp"] . '?fifo_size=50000000&buffer_size=50000000&overrun_nonfatal=1" \ + -vf "scale=' . $new["resolution"] . ',format=yuv420p" \ + -c:v ' . $new["video_format"] . ' \ + -threads 1 \ + -r 25 \ + -g 50 \ + -bf 0 \ + -qmin 3 -qmax 35 \ + -me_method dia \ + -subq 0 \ + -b:v ' . $new["video_bitrate"] . 'k \ + -minrate ' . $new["video_bitrate"] . 'k \ + -maxrate ' . $new["video_bitrate"] . 'k \ + -bufsize ' . ((int)$new["video_bitrate"] * 2) . 'k \ + -c:a ' . $new["audio_format"] . ' \ + -b:a ' . $new["audio_bitrate"] . 'k -ar 48000 -ac 2 \ + -af "volume=' . $new["volume"] . 'dB,aresample=async=1000" \ + -metadata service_provider="ShreeBhattJI" '; + 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"'; + + file_put_contents("/var/www/encoder/$id.sh", $ffmpeg); - if ($row["service"] === "enable") { + if ($new["service"] === "enable") { exec("sudo systemctl enable encoder@$id"); exec("sudo systemctl restart encoder@$id"); } else { @@ -182,21 +223,326 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "edit") { exec("sudo systemctl disable encoder@$id"); } } + + $newData[] = $row; } - file_put_contents($jsonFile, json_encode($data, JSON_PRETTY_PRINT)); + file_put_contents($jsonFile, json_encode($newData, JSON_PRETTY_PRINT)); echo "OK"; exit; } /* ---------------- RESTART ---------------- */ - if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "restart") { - exec("sudo systemctl restart encoder@" . intval($_POST["id"])); + $id = intval($_POST["id"]); + exec("sudo systemctl restart encoder@$id"); echo "OK"; exit; } ?> + + +
+
+ +

Service List

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDService NameInputOutputVideoAudioResolutionV-BitrateA-BitrateVolume (dB)StatusActions
dB + + + +
+ + +
+ +
+
+
+
+ + \ No newline at end of file diff --git a/html/stop_all_encoders.sh b/html/stop_all_encoders.sh new file mode 100644 index 0000000..2313ab3 --- /dev/null +++ b/html/stop_all_encoders.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +set -e + +echo "Stopping and disabling all encoder@ services..." + +for svc in $(systemctl list-units --all --no-legend "encoder@*" | awk '{print $1}'); do + echo "Stopping $svc" + systemctl stop "$svc" + + echo "Disabling $svc" + systemctl disable "$svc" +done + +echo "All encoder@ services stopped and disabled."