'disable', 'service_rtmp0_multiple' => 'disable', 'service_rtmp0_hls' => 'disable', 'service_rtmp0_dash' => 'disable', 'service_rtmp1_multiple' => 'disable', 'service_rtmp1_hls' => 'disable', 'service_rtmp1_dash' => 'disable', 'service_udp0' => 'disable', 'service_udp1' => 'disable', 'service_udp2' => 'disable', 'service_srt_multiple' => 'disable', 'service_custom' => 'disable', 'rtmp0_multiple' => [], 'rtmp1_multiple' => [], 'srt_multiple' => [], 'rtmp0' => [ 'resolution' => '1920x1080', 'data_rate' => '6M', 'framerate' => '30', 'gop' => '30', 'extra' => '', 'audio_data_rate' => '128k', 'audio_db_gain' => '0dB', 'audio_sample_rate' => '48000' ], 'rtmp1' => [ 'resolution' => '720x576', 'data_rate' => '1.5M', 'framerate' => '25', 'gop' => '25', 'extra' => '', 'audio_data_rate' => '96k', 'audio_db_gain' => '0dB', 'audio_sample_rate' => '48000' ], 'udp0' => [ 'udp' => 'udp://@224.1.1.1:8001', 'formate' => 'h264_qsv', 'resolution' => '1280x720', 'data_rate' => '2.2M', 'framerate' => '25', 'gop' => '25', 'extra' => '', 'audio_formate' => 'aac', 'audio_data_rate' => '128k', 'audio_db_gain' => '0dB', 'audio_sample_rate' => '48000' ], 'udp1' => [ 'udp' => 'udp://@224.1.1.1:8001', 'formate' => 'h264_qsv', 'resolution' => '720x576', 'data_rate' => '1.5M', 'framerate' => '25', 'gop' => '25', 'extra' => '', 'audio_formate' => 'mp2', 'audio_data_rate' => '128k', 'audio_db_gain' => '0dB', 'audio_sample_rate' => '48000' ], 'udp2' => [ 'udp' => 'udp://@224.1.1.1:8002', 'formate' => 'mpeg2video', 'resolution' => '720x576', 'data_rate' => '3M', 'framerate' => '25', 'gop' => '25', 'extra' => '', 'audio_formate' => 'mp2', 'audio_data_rate' => '96k', 'audio_db_gain' => '0dB', 'audio_sample_rate' => '48000' ], 'srt' => [ 'formate' => 'mpeg2video', 'resolution' => '1920x1080', 'data_rate' => '6M', 'framerate' => '50', 'gop' => '50', 'extra' => '', 'audio_formate' => 'aac', 'audio_data_rate' => '256k', 'audio_db_gain' => '0dB', 'audio_sample_rate' => '48000' ], 'display' => '1920x1080@60.00', 'display_audio' => '0,3', 'custom_output' => '' ]; for ($i = 1; $i <= 11; $i++) { $defaults['rtmp0_multiple'][$i] = ['url' => '', 'name' => '', 'enabled' => false]; $defaults['rtmp1_multiple'][$i] = ['url' => '', 'name' => '', 'enabled' => false]; $defaults['srt_multiple'][$i] = ['url' => '', 'name' => '', 'enabled' => false]; } if (file_exists($jsonFile)) { $raw = file_get_contents($jsonFile); $data = json_decode($raw, true); if (!is_array($data)) $data = $defaults; $data = array_replace_recursive($defaults, $data); } else { $data = $defaults; } $errors = []; $success = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $get = function ($k, $d = '') { return isset($_POST[$k]) ? trim((string)$_POST[$k]) : $d; }; $new = $data; $new['service_display'] = $get('service_display', $defaults['service_display']); $new['service_rtmp0_multiple'] = $get('service_rtmp0_multiple', $defaults['service_rtmp0_multiple']); $new['service_rtmp0_hls'] = $get('service_rtmp0_hls', $defaults['service_rtmp0_hls']); $new['service_rtmp0_dash'] = $get('service_rtmp0_dash', $defaults['service_rtmp0_dash']); $new['service_rtmp1_multiple'] = $get('service_rtmp1_multiple', $defaults['service_rtmp1_multiple']); $new['service_rtmp1_hls'] = $get('service_rtmp1_hls', $defaults['service_rtmp1_hls']); $new['service_rtmp1_dash'] = $get('service_rtmp1_dash', $defaults['service_rtmp1_dash']); $new['service_udp0'] = $get('service_udp0', $defaults['service_udp0']); $new['service_udp1'] = $get('service_udp1', $defaults['service_udp1']); $new['service_udp2'] = $get('service_udp2', $defaults['service_udp2']); $new['service_srt_multiple'] = $get('service_srt_multiple', $defaults['service_srt_multiple']); $new['service_custom'] = $get('service_custom', $defaults['service_custom']); $new['display'] = $get('display', $defaults['display']); $new['display_audio'] = $get('display_audio', $defaults['display_audio']); $new['rtmp0']['resolution'] = $get('rtmp0_resolution', $defaults['rtmp0']['resolution']); $new['rtmp0']['data_rate'] = $get('rtmp0_data_rate', $defaults['rtmp0']['data_rate']); $new['rtmp0']['framerate'] = $get('rtmp0_framerate', $defaults['rtmp0']['framerate']); $new['rtmp0']['gop'] = $get('rtmp0_gop', $defaults['rtmp0']['gop']); $new['rtmp0']['extra'] = $get('rtmp0_extra', $defaults['rtmp0']['extra']); $new['rtmp0']['audio_data_rate'] = $get('rtmp0_audio_data_rate', $defaults['rtmp0']['audio_data_rate']); $new['rtmp0']['audio_db_gain'] = $get('rtmp0_audio_db_gain', $defaults['rtmp0']['audio_db_gain']); $new['rtmp0']['audio_sample_rate'] = $get('rtmp0_audio_sample_rate', $defaults['rtmp0']['audio_sample_rate']); $new['rtmp1']['resolution'] = $get('rtmp1_resolution', $defaults['rtmp1']['resolution']); $new['rtmp1']['data_rate'] = $get('rtmp1_data_rate', $defaults['rtmp1']['data_rate']); $new['rtmp1']['framerate'] = $get('rtmp1_framerate', $defaults['rtmp1']['framerate']); $new['rtmp1']['gop'] = $get('rtmp1_gop', $defaults['rtmp1']['gop']); $new['rtmp1']['extra'] = $get('rtmp1_extra', $defaults['rtmp1']['extra']); $new['rtmp1']['audio_data_rate'] = $get('rtmp1_audio_data_rate', $defaults['rtmp1']['audio_data_rate']); $new['rtmp1']['audio_db_gain'] = $get('rtmp1_audio_db_gain', $defaults['rtmp1']['audio_db_gain']); $new['rtmp1']['audio_sample_rate'] = $get('rtmp1_audio_sample_rate', $defaults['rtmp1']['audio_sample_rate']); $new['udp0']['format'] = $get('udp0_format', $defaults['udp0']['format']); $new['udp0']['resolution'] = $get('udp0_resolution', $defaults['udp0']['resolution']); $new['udp0']['data_rate'] = $get('udp0_data_rate', $defaults['udp0']['data_rate']); $new['udp0']['framerate'] = $get('udp0_framerate', $defaults['udp0']['framerate']); $new['udp0']['gop'] = $get('udp0_gop', $defaults['udp0']['gop']); $new['udp0']['extra'] = $get('udp0_extra', $defaults['udp0']['extra']); $new['udp0']['audio_format'] = $get('udp0_audio_format', $defaults['udp0']['audio_format']); $new['udp0']['audio_data_rate'] = $get('udp0_audio_data_rate', $defaults['udp0']['audio_data_rate']); $new['udp0']['audio_db_gain'] = $get('udp0_audio_db_gain', $defaults['udp0']['audio_db_gain']); $new['udp0']['audio_sample_rate'] = $get('udp0_audio_sample_rate', $defaults['udp0']['audio_sample_rate']); $new['udp0']['udp'] = $get('udp0_ip', $defaults['udp0']['udp']); $new['udp1']['format'] = $get('udp1_format', $defaults['udp1']['format']); $new['udp1']['resolution'] = $get('udp1_resolution', $defaults['udp1']['resolution']); $new['udp1']['data_rate'] = $get('udp1_data_rate', $defaults['udp1']['data_rate']); $new['udp1']['framerate'] = $get('udp1_framerate', $defaults['udp1']['framerate']); $new['udp1']['gop'] = $get('udp1_gop', $defaults['udp1']['gop']); $new['udp1']['extra'] = $get('udp1_extra', $defaults['udp1']['extra']); $new['udp1']['audio_format'] = $get('udp1_audio_format', $defaults['udp1']['audio_format']); $new['udp1']['audio_data_rate'] = $get('udp1_audio_data_rate', $defaults['udp1']['audio_data_rate']); $new['udp1']['audio_db_gain'] = $get('udp1_audio_db_gain', $defaults['udp1']['audio_db_gain']); $new['udp1']['audio_sample_rate'] = $get('udp1_audio_sample_rate', $defaults['udp1']['audio_sample_rate']); $new['udp1']['udp'] = $get('udp1_ip', $defaults['udp1']['udp']); $new['udp2']['format'] = $get('udp2_format', $defaults['udp2']['format']); $new['udp2']['resolution'] = $get('udp2_resolution', $defaults['udp2']['resolution']); $new['udp2']['data_rate'] = $get('udp2_data_rate', $defaults['udp2']['data_rate']); $new['udp2']['framerate'] = $get('udp2_framerate', $defaults['udp2']['framerate']); $new['udp2']['gop'] = $get('udp2_gop', $defaults['udp2']['gop']); $new['udp2']['extra'] = $get('udp2_extra', $defaults['udp2']['extra']); $new['udp2']['audio_format'] = $get('udp2_audio_format', $defaults['udp2']['audio_format']); $new['udp2']['audio_data_rate'] = $get('udp2_audio_data_rate', $defaults['udp2']['audio_data_rate']); $new['udp2']['audio_db_gain'] = $get('udp2_audio_db_gain', $defaults['udp2']['audio_db_gain']); $new['udp2']['audio_sample_rate'] = $get('udp2_audio_sample_rate', $defaults['udp2']['audio_sample_rate']); $new['udp2']['udp'] = $get('udp2_ip', $defaults['udp2']['udp']); $new['srt']['format'] = $get('srt_resolution', $defaults['srt']['format']); $new['srt']['resolution'] = $get('srt_resolution', $defaults['srt']['resolution']); $new['srt']['data_rate'] = $get('srt_data_rate', $defaults['srt']['data_rate']); $new['srt']['framerate'] = $get('srt_framerate', $defaults['srt']['framerate']); $new['srt']['gop'] = $get('srt_gop', $defaults['srt']['gop']); $new['srt']['extra'] = $get('srt_extra', $defaults['srt']['extra']); $new['srt']['audio_format'] = $get('srt_audio_format', $defaults['srt']['audio_format']); $new['srt']['audio_data_rate'] = $get('srt_audio_data_rate', $defaults['srt']['audio_data_rate']); $new['srt']['audio_db_gain'] = $get('srt_audio_db_gain', $defaults['srt']['audio_db_gain']); $new['srt']['audio_sample_rate'] = $get('srt_audio_sample_rate', $defaults['srt']['audio_sample_rate']); $new['custom_output'] = $get('custom_output', ''); if ($new['rtmp0']['gop'] !== '' && !ctype_digit((string)$new['rtmp0']['gop'])) { $errors[] = "RTMP0 GOP must be an integer."; } if ($new['rtmp1']['gop'] !== '' && !ctype_digit((string)$new['rtmp1']['gop'])) { $errors[] = "RTMP1 GOP must be an integer."; } if ($new['udp0']['gop'] !== '' && !ctype_digit((string)$new['udp0']['gop'])) { $errors[] = "UDP0 GOP must be an integer."; } if ($new['udp1']['gop'] !== '' && !ctype_digit((string)$new['udp1']['gop'])) { $errors[] = "UDP1 GOP must be an integer."; } if ($new['udp2']['gop'] !== '' && !ctype_digit((string)$new['udp2']['gop'])) { $errors[] = "UDP2 GOP must be an integer."; } if ($new['srt']['gop'] !== '' && !ctype_digit((string)$new['srt']['gop'])) { $errors[] = "srt GOP must be an integer."; } for ($i = 1; $i <= 11; $i++) { $u0 = $get("rtmp0_{$i}", ''); $n0 = $get("rtmp0_{$i}_name", ''); $e0 = isset($_POST["rtmp0_{$i}_enable"]) ? true : false; $new['rtmp0_multiple'][$i] = ['url' => $u0, 'name' => $n0, 'enabled' => $e0]; $u1 = $get("rtmp1_{$i}", ''); $n1 = $get("rtmp1_{$i}_name", ''); $e1 = isset($_POST["rtmp1_{$i}_enable"]) ? true : false; $new['rtmp1_multiple'][$i] = ['url' => $u1, 'name' => $n1, 'enabled' => $e1]; $u2 = $get("srt_{$i}", ''); $n2 = $get("srt_{$i}_name", ''); $e2 = isset($_POST["srt_{$i}_enable"]) ? true : false; $new['srt_multiple'][$i] = ['url' => $u2, 'name' => $n2, 'enabled' => $e2]; } if (empty($errors)) { $json = json_encode($new, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); if (file_put_contents($jsonFile, $json, LOCK_EX) === false) { $errors[] = "Failed to write {$jsonFile}. Check permissions."; } else { $data = $new; $success = "Saved."; } } if (isset($_POST['display'])) { update_service("display"); } if (isset($_POST['rtmp0'])) { update_service("rtmp0"); } if (isset($_POST['rtmp1'])) { update_service("rtmp1"); } if (isset($_POST['udp0'])) { update_service("udp0"); } if (isset($_POST['udp1'])) { update_service("udp1"); } if (isset($_POST['udp2'])) { update_service("udp2"); } if (isset($_POST['srt'])) { update_service("srt"); } if (isset($_POST['custom'])) { update_service("custom"); } } ?>