Fast3r
true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_MAXREDIRS => 3,
CURLOPT_TIMEOUT => 10,
CURLOPT_CONNECTTIMEOUT => 5,
CURLOPT_TCP_FASTOPEN => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_ENCODING => '',
CURLOPT_USERAGENT => 'Android',
CURLOPT_HTTPHEADER => ['Connection: keep-alive']
]);
$content = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($code != 200 || !$content) {
http_response_code(502);
exit('Stream unavailable');
}
// Fast URL rewrite
$content = preg_replace_callback(
'/^([^#\n].+\.ts)$/m',
function($m) { return '?f=' . urlencode($m[1]); },
$content
);
header('Content-Type: application/vnd.apple.mpegurl');
header('Access-Control-Allow-Origin: *');
header('Cache-Control: no-cache');
header('Connection: keep-alive');
echo $content;
exit;
}
function proxySegment($file) {
$url = BASE_URL . $file;
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_MAXREDIRS => 3,
CURLOPT_TIMEOUT => 15,
CURLOPT_CONNECTTIMEOUT => 5,
CURLOPT_TCP_FASTOPEN => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_USERAGENT => 'Android',
CURLOPT_BUFFERSIZE => 131072, // 128KB chunks
CURLOPT_WRITEFUNCTION => function($ch, $data) {
echo $data;
return strlen($data);
}
]);
header('Content-Type: video/MP2T');
header('Access-Control-Allow-Origin: *');
header('Cache-Control: max-age=3600');
header('Connection: keep-alive');
curl_exec($ch);
curl_close($ch);
exit;
}
?>
Comments
Post a Comment