Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Works without Range #6

Open
let-aurn opened this issue Sep 10, 2016 · 0 comments
Open

Works without Range #6

let-aurn opened this issue Sep 10, 2016 · 0 comments

Comments

@let-aurn
Copy link

let-aurn commented Sep 10, 2016

The initial code works well on desktop (Chrome OSX). But not on Safari (iOS).

I've comment out all about Range and now it works on iPhone too.

I did that because I've inspected requests on Chrome (desktop) and it seems it doesn't even use Ranges. Response is just 200 OK instead of 206 using Chrome on OSX.

Anyway, here is my current working code for Safari/Chrome on iOS (not tested on Android) :

$begin = 0;
$end = $size - 1;

// if (isset($_SERVER['HTTP_RANGE'])) {
//     if (preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'], $matches)) {
//         $begin = intval($matches[1]);
//         if (!empty($matches[2])) {
//             $end = intval($matches[2]);
//         }
//     }
// }
// if (isset($_SERVER['HTTP_RANGE'])) {
//     header('HTTP/1.1 206 Partial Content');
// } else {
    header('HTTP/1.1 200 OK');
// }

header("Content-Type: audio/mpeg");
header('Cache-Control: public, must-revalidate, max-age=0');
header('Pragma: no-cache');
header('Accept-Ranges: bytes');
header('Content-Length:' . (($end - $begin) + 1));
// if (isset($_SERVER['HTTP_RANGE'])) {
//     header("Content-Range: bytes $begin-$end/$size");
// }
header("Content-Disposition: inline; filename=file.mp3");
header("Content-Transfer-Encoding: binary");
header("Last-Modified: $time");

\Log::info("=======");
\Log::info("Media : " . $location);
\Log::info("Range: " . (isset($_SERVER['HTTP_RANGE']) ? "Accepted" : "Not accepted"));
\Log::info("=======");

$cur = $begin;
fseek($fm, $begin, 0);

while (!feof($fm) && $cur <= $end && (connection_status() == 0)) {
    print fread($fm, min(1024 * 16, ($end - $cur) + 1));
    $cur += 1024 * 16;
}

PS : The code above doesn't work on Safari Desktop (works on Chrome desktop)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant