Потоковое аудио с Laravel 4.2 и JPlayer — выпуск Safari

У меня есть приложение Laravel 4.2, работающее на Google App Engine, которое транслирует аудиофайлы m4a из корзины Google. У меня это работает (гремит) на Chrome и Firefox, но звук не воспроизводится в Safari (прямая ссылка или в JPlayer). Мне интересно, если я что-то упустил в заголовках запроса.

Url / Request выглядит так (это играет на любом браузере, кроме Safari)
https://myapp.com/stream/audio/388fh38fhh47fhh3839883

Это фрагмент того, как я возвращаю контент

Response::macro('streamed', function($type, $size, $callback) {
$start = 0;
$length = $size;
$status = 200;
$headers = [
'Content-Type' => $type,
'Content-Length' => $size,
'Accept-Ranges' => 'bytes'
];

if (false !== $range = Request::server('HTTP_RANGE', false)) {
list($param, $range) = explode('=', $range);
if (strtolower(trim($param)) !== 'bytes') {
header('HTTP/1.1 400 Invalid Request');
exit;
}
list($from, $to) = explode('-', $range);
if ($from === '') {
$end = $size - 1;
$start = $end - intval($from);
} elseif ($to === '') {
$start = intval($from);
$end = $size - 1;
} else {
$start = intval($from);
$end = intval($to);
}
if ($end >= $length) {
$end = $length - 1;
}
$length = $end - $start + 1;
$status = 206;
$headers['Content-Range'] = sprintf('bytes %d-%d/%d', $start, $end, $size);
$headers['Content-Length'] = $length;
}
return Response::stream(function() use ($start, $length, $callback) {
call_user_func($callback, $start, $length);
}, $status, $headers);
});

$path = "https://storage.googleapis.com/mybucket/audio/track-ec60317d4f486794cd7e16d87f55570d.m4a";
$size = $filesize;
$type = 'audio/mp4';
return Response::streamed($type, $size, function($offset, $length) use ($path) {
$stream = GuzzleHttp\Stream\Stream::factory(fopen($path, 'r'));
$stream->seek($offset);
while (!$stream->eof()) {
echo $stream->read($length);
}
$stream->close();
});

Дайте мне знать, если я что-то делаю не так или могу улучшить. Спасибо!

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]