diff --git a/html/input.php b/html/input.php index 828b825..0d9453e 100644 --- a/html/input.php +++ b/html/input.php @@ -7,16 +7,16 @@ if (!file_exists($jsonFile)) { } $data = json_decode(file_get_contents($jsonFile), true); -/* Fix old entries missing service_name */ +/* Fix old entries missing service_name or volume */ foreach ($data as $k => $d) { - if (!isset($d["service_name"])) { - $data[$k]["service_name"] = ""; - } + 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 NEW SERVICE ---------------- */ +/* ---------------- ADD NEW ---------------- */ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "add") { + $new = [ "id" => time(), "service_name" => $_POST["service_name"], @@ -27,28 +27,33 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "add") { "resolution" => $_POST["resolution"], "video_bitrate" => $_POST["video_bitrate"], "audio_bitrate" => $_POST["audio_bitrate"], + "volume" => $_POST["volume"], "service" => $_POST["service"] ]; $data[] = $new; file_put_contents($jsonFile, json_encode($data, JSON_PRETTY_PRINT)); + /* ffmpeg build */ $ffmpeg = 'ffmpeg -fflags +genpts+discardcorrupt -re -i "udp://@' . $new["input_udp"] . '?overrun_nonfatal=1&fifo_size=50000000" '; switch ($new["video_format"]) { case "mpeg2video": - $ffmpeg .= " -vf scale=" . $new["resolution"] . " -c:v mpeg2video -pix_fmt yuv420p -b:v {$new["video_bitrate"]}k -maxrate {$new["video_bitrate"]}k -minrate {$new["video_bitrate"]}k -bufsize {$new["video_bitrate"]}k"; + $ffmpeg .= " -vf scale={$new["resolution"]} -c:v mpeg2video -pix_fmt yuv420p -b:v {$new["video_bitrate"]}k"; break; case "h264": - $ffmpeg .= " -vf scale=" . $new["resolution"] . " -c:v h264 -pix_fmt yuv420p -b:v {$new["video_bitrate"]}k -maxrate {$new["video_bitrate"]}k -minrate {$new["video_bitrate"]}k -bufsize {$new["video_bitrate"]}k"; + $ffmpeg .= " -vf scale={$new["resolution"]} -c:v h264 -pix_fmt yuv420p -b:v {$new["video_bitrate"]}k"; break; case "h265": - $ffmpeg .= " -vf scale=" . $new["resolution"] . " -c:v h265 -pix_fmt yuv420p -b:v {$new["video_bitrate"]}k -maxrate {$new["video_bitrate"]}k -minrate {$new["video_bitrate"]}k -bufsize {$new["video_bitrate"]}k"; + $ffmpeg .= " -vf scale={$new["resolution"]} -c:v h265 -pix_fmt yuv420p -b:v {$new["video_bitrate"]}k"; break; } - $ffmpeg .= ' -metadata service_provider=ShreeBhattJI -metadata service_name="' . $new["service_name"] . '"'; + /* audio volume filter */ + $ffmpeg .= ' -af "volume=' . $new["volume"] . 'dB"'; $ffmpeg .= ' -c:a ' . $new["audio_format"] . ' -b:a ' . $new["audio_bitrate"] . 'k -ar 48000 -ac 2'; + + $ffmpeg .= ' -metadata service_provider=ShreeBhattJI -metadata service_name="' . $new["service_name"] . '"'; $ffmpeg .= ' -f mpegts "udp://@' . $new["output_udp"] . '?pkt_size=1316&ttl=4"'; file_put_contents("/var/www/encoder/{$new["id"]}.sh", $ffmpeg); @@ -62,8 +67,9 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "add") { exit; } -/* ---------------- DELETE SERVICE ---------------- */ +/* ---------------- DELETE ---------------- */ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "delete") { + $id = intval($_POST["id"]); $newData = []; @@ -75,15 +81,15 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "delete") { exec("sudo systemctl stop encoder@$id"); exec("sudo systemctl disable encoder@$id"); - $shFile = "/var/www/encoder/$id.sh"; - if (file_exists($shFile)) unlink($shFile); + if (file_exists("/var/www/encoder/$id.sh")) unlink("/var/www/encoder/$id.sh"); echo "OK"; exit; } -/* ---------------- EDIT SERVICE ---------------- */ +/* ---------------- EDIT ---------------- */ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "edit") { + $id = intval($_POST["id"]); $newData = []; @@ -100,6 +106,7 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "edit") { "resolution" => $_POST["resolution"], "video_bitrate" => $_POST["video_bitrate"], "audio_bitrate" => $_POST["audio_bitrate"], + "volume" => $_POST["volume"], "service" => $_POST["service"] ]; @@ -109,18 +116,20 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "edit") { switch ($new["video_format"]) { case "mpeg2video": - $ffmpeg .= " -vf scale={$new["resolution"]} -c:v mpeg2video -pix_fmt yuv420p -b:v {$new["video_bitrate"]}k -maxrate {$new["video_bitrate"]}k -minrate {$new["video_bitrate"]}k -bufsize {$new["video_bitrate"]}k"; + $ffmpeg .= " -vf scale={$new["resolution"]} -c:v mpeg2video -pix_fmt yuv420p -b:v {$new["video_bitrate"]}k"; break; case "h264": - $ffmpeg .= " -vf scale={$new["resolution"]} -c:v h264 -pix_fmt yuv420p -b:v {$new["video_bitrate"]}k -maxrate {$new["video_bitrate"]}k -minrate {$new["video_bitrate"]}k -bufsize {$new["video_bitrate"]}k"; + $ffmpeg .= " -vf scale={$new["resolution"]} -c:v h264 -pix_fmt yuv420p -b:v {$new["video_bitrate"]}k"; break; case "h265": - $ffmpeg .= " -vf scale={$new["resolution"]} -c:v h265 -pix_fmt yuv420p -b:v {$new["video_bitrate"]}k -maxrate {$new["video_bitrate"]}k -minrate {$new["video_bitrate"]}k -bufsize {$new["video_bitrate"]}k"; + $ffmpeg .= " -vf scale={$new["resolution"]} -c:v h265 -pix_fmt yuv420p -b:v {$new["video_bitrate"]}k"; break; } - $ffmpeg .= ' -metadata service_provider=ShreeBhattJI -metadata service_name="' . $new["service_name"] . '"'; + $ffmpeg .= ' -af "volume=' . $new["volume"] . 'dB"'; $ffmpeg .= ' -c:a ' . $new["audio_format"] . ' -b:a ' . $new["audio_bitrate"] . 'k -ar 48000 -ac 2'; + + $ffmpeg .= ' -metadata service_provider=ShreeBhattJI -metadata service_name="' . $new["service_name"] . '"'; $ffmpeg .= ' -f mpegts "udp://@' . $new["output_udp"] . '?pkt_size=1316&ttl=4"'; file_put_contents("/var/www/encoder/$id.sh", $ffmpeg); @@ -142,7 +151,7 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "edit") { exit; } -/* ---------------- RESTART SERVICE ---------------- */ +/* ---------------- RESTART ---------------- */ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "restart") { $id = intval($_POST["id"]); exec("sudo systemctl restart encoder@$id"); @@ -164,7 +173,6 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "restart") { .restart-btn { background: #ffaa00; - color: black; } .delete-btn { @@ -196,13 +204,6 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "restart") { background: rgba(0, 0, 0, 0.5); } - input, - select { - width: 100%; - padding: 6px; - margin-bottom: 10px; - } - table { width: 100%; border-collapse: collapse; @@ -214,6 +215,13 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "restart") { border: 1px solid #ccc; padding: 10px; } + + input, + select { + width: 100%; + padding: 6px; + margin-bottom: 10px; + }
@@ -226,13 +234,14 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "restart") { ID Service Name - Input UDP - Output UDP - Video Format - Audio Format + Input + Output + Video + Audio Resolution - Video Bitrate - Audio Bitrate + V-Bitrate + A-Bitrate + Volume (dB) Status Actions @@ -248,6 +257,7 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "restart") { + dB @@ -266,7 +276,7 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "restart") { - + @@ -290,8 +300,22 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "restart") { - - + + + + +