ILoveYAnny
@ILoveYAnny

Почему тормозит воспроизведение mp3 через radfile() на Apache?

Здравствуйте, есть Ubuntu server + Apache. Если напрямую загрузить туда мп3 и через браузер запросить доступ к файлу, всё отлично, всё перематывается - кликаешь на не прогруженную область, он догружается и воспроизводится. Перематываешь назад, всё окей.

У меня реализован скрипт выдачи mp3, вот когда слушаешь через него, браузер так же открывает дефолтный плеер, однако стоит кликнуть на не прогруженную область или перемотать назад, как всё зависает намертво. Подскажите пожалуйста как можно решить эту проблему ?

Вот заголовки:
function getMedia($file, $i) {
  if (file_exists($file)) {
    if (ob_get_level()) {
     ob_end_clean();
    }
	
	$fsize = filesize($file);
	$track2play = $i.".mp3";
	$shortlen = $fsize-1;
	
	header( 'HTTP/1.1 200 OK' );
	header("Pragma: public");
	header("Expires: 0"); 
	header("Content-Type: audio/mpeg");
	header('x-amz-request-id: '.rand(0,1000));
	header('Content-Length: ' . $fsize);
	header('Content-Disposition: inline; filename="' . $track2play . '"');
	header( 'Content-Range: bytes 0-'.$shortlen.'/'.$fsize); 
	header( 'Accept-Ranges: bytes');
	header('X-Pad: avoid browser bug');
	header('Cache-Control: no-cache');
 
	readfile($file);
    exit;
  }
}
  • Вопрос задан
  • 254 просмотра
Пригласить эксперта
Ответы на вопрос 2
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
это так не будет работать.
Как ни крути но php это точно не для стриминга медиа.

Если нужна какая-то логика для файлов это делать надо через защиту от хотлинкинга и сгенерированные ссылки.
Но проверять это должен вебсервер, а не php.
Ответ написан
Stalker_RED
@Stalker_RED
Если присмотреться к заголовкам запросов, которые срабатывают при перемотке, то вы обнаружите там http range. А ваш скрипт такие заголовки не обрабатывает, всегда выдает файл сначала и целиком.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы