time(), "name" => $_POST["name"], "input_udp" => $_POST["input_udp"], "output_udp" => $_POST["output_udp"], "video_format" => $_POST["video_format"], "audio_format" => $_POST["audio_format"], "resolution" => $_POST["resolution"], "video_bitrate" => $_POST["video_bitrate"], "audio_bitrate" => $_POST["audio_bitrate"], "service" => $_POST["service"] ]; $data[] = $new; file_put_contents($jsonFile, json_encode($data, JSON_PRETTY_PRINT)); $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"; 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"; 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"; break; } $ffmpeg .= " -metadata service_provider=ShreeBhattJI -metadata service_name=".$new["name"]." -c:a " . $new["audio_format"] . " -b:a " . $new["audio_bitrate"] . 'k -ar 48000 -ac 2 -f mpegts "udp://@' . $new["output_udp"] . '?pkt_size=1316&ttl=4"'; file_put_contents("/var/www/encoder/" . $new["id"] . ".sh", $ffmpeg); if ($new["service"] === "enable") { exec("sudo systemctl enable encoder@" . $new["id"]); exec("sudo systemctl restart encoder@" . $new["id"]); } echo "OK"; exit; } /* ---------------- DELETE SERVICE ---------------- */ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "delete") { $id = intval($_POST["id"]); $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); if (file_exists("/var/www/encoder/" . $id . ".sh")) { unlink("/var/www/encoder/" . $id . ".sh"); } echo "OK"; exit; } /* ---------------- EDIT SERVICE ---------------- */ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "edit") { $id = intval($_POST["id"]); $newData = []; foreach ($data as $row) { if ($row["id"] == $id) { $row = [ "id" => $id, "name" => $_POST["name"], "input_udp" => $_POST["input_udp"], "output_udp" => $_POST["output_udp"], "video_format" => $_POST["video_format"], "audio_format" => $_POST["audio_format"], "resolution" => $_POST["resolution"], "video_bitrate" => $_POST["video_bitrate"], "audio_bitrate" => $_POST["audio_bitrate"], "service" => $_POST["service"] ]; $new = $row; $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"; 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"; 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"; break; } $ffmpeg .= " -metadata service_provider=ShreeBhattJI -metadata service_name=".$new["name"]." -c:a " . $new["audio_format"] . " -b:a " . $new["audio_bitrate"] . 'k -ar 48000 -ac 2 -f mpegts "udp://@' . $new["output_udp"] . '?pkt_size=1316&ttl=4"'; file_put_contents("/var/www/encoder/" . $new["id"] . ".sh", $ffmpeg); if ($new["service"] === "enable") { exec("sudo systemctl enable encoder@" . $new["id"]); exec("sudo systemctl restart encoder@" . $new["id"]); } else { exec("sudo systemctl stop encoder@" . $new["id"]); exec("sudo systemctl disable encoder@" . $new["id"]); } } $newData[] = $row; } file_put_contents($jsonFile, json_encode($newData, JSON_PRETTY_PRINT)); echo "OK"; exit; } /* ---------------- RESTART SERVICE ---------------- */ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_POST["action"] === "restart") { $id = intval($_POST["id"]); exec("sudo systemctl restart encoder@" . $id); echo "OK"; exit; } ?>
| ID | Name | Input UDP | Output UDP | Video Format | Audio Format | Resolution | Video Bitrate | Audio Bitrate | Service | Actions |
|---|---|---|---|---|---|---|---|---|---|---|
| = $row["id"] ?> | = $row["name"] ?> | = $row["input_udp"] ?> | = $row["output_udp"] ?> | = $row["video_format"] ?> | = $row["audio_format"] ?> | = $row["resolution"] ?> | = $row["video_bitrate"] ?> | = $row["audio_bitrate"] ?> | = $row["service"] ?> |