Вот мой php-код для потокового mp3-файла через php
set_time_limit(0); $dirPath = "path_of_the_directory"; $songCode = $_REQUEST['c']; $filePath = $dirPath . "/" . $songCode . ".mp3"; $strContext=stream_context_create( array( 'http'=>array( 'method'=>'GET', 'header'=>"Accept-language: en\r\n" ) ) ); $fpOrigin=fopen($filePath, 'rb', false, $strContext); header('content-type: application/octet-stream'); while(!feof($fpOrigin)){ $buffer=fread($fpOrigin, 4096); echo $buffer; flush(); } fclose($fpOrigin);
Он работает на Mac Mini и других ПК, но не работает на iPad и iPhone. Даже потоковая передача работает на всех других смартфонах. Ваша помощь будет оценена по достоинству.
благодаря
Почему content-type: application/octet-stream
если это песня? Измените заголовки:
set_time_limit(0); $dirPath = "path_of_the_directory"; $songCode = $_REQUEST['c']; $filePath = $dirPath . "/" . $songCode . ".mp3"; $strContext=stream_context_create( array( 'http'=>array( 'method'=>'GET', 'header'=>"Accept-language: en\r\n" ) ) ); $fpOrigin=fopen($filePath, 'rb', false, $strContext); header('Content-Disposition: inline; filename="song.mp3"'); header('Pragma: no-cache'); header('Content-type: audio/mpeg'); header('Content-Length: '.filesize($filePath)); while(!feof($fpOrigin)){ $buffer=fread($fpOrigin, 4096); echo $buffer; flush(); } fclose($fpOrigin);
вset_time_limit(0); $dirPath = "path_of_the_directory"; $songCode = $_REQUEST['c']; $filePath = $dirPath . "/" . $songCode . ".mp3"; $strContext=stream_context_create( array( 'http'=>array( 'method'=>'GET', 'header'=>"Accept-language: en\r\n" ) ) ); $fpOrigin=fopen($filePath, 'rb', false, $strContext); header('Content-Disposition: inline; filename="song.mp3"'); header('Pragma: no-cache'); header('Content-type: audio/mpeg'); header('Content-Length: '.filesize($filePath)); while(!feof($fpOrigin)){ $buffer=fread($fpOrigin, 4096); echo $buffer; flush(); } fclose($fpOrigin);
LE: удалено Content-Transfer-Encoding
и изменено Content-Disposition
из attachment
в inline
<?php set_time_limit(0); $dirPath = "path_of_the_directory"; $songCode = $_REQUEST['c']; $filePath = $dirPath . "/" . $songCode . ".mp3"; $bitrate = 128; $strContext=stream_context_create( array( 'http'=>array( 'method'=>'GET', 'header'=>"Accept-language: en\r\n" ) ) ); header('Content-type: audio/mpeg'); header ("Content-Transfer-Encoding: binary"); header ("Pragma: no-cache"); header ("icy-br: " . $bitrate); $fpOrigin=fopen($filePath, 'rb', false, $strContext); while(!feof($fpOrigin)){ $buffer=fread($fpOrigin, 4096); echo $buffer; flush(); } fclose($fpOrigin);
в<?php set_time_limit(0); $dirPath = "path_of_the_directory"; $songCode = $_REQUEST['c']; $filePath = $dirPath . "/" . $songCode . ".mp3"; $bitrate = 128; $strContext=stream_context_create( array( 'http'=>array( 'method'=>'GET', 'header'=>"Accept-language: en\r\n" ) ) ); header('Content-type: audio/mpeg'); header ("Content-Transfer-Encoding: binary"); header ("Pragma: no-cache"); header ("icy-br: " . $bitrate); $fpOrigin=fopen($filePath, 'rb', false, $strContext); while(!feof($fpOrigin)){ $buffer=fread($fpOrigin, 4096); echo $buffer; flush(); } fclose($fpOrigin);
Я знаю, что этот пост был с прошлого года, но кто-то может найти это полезным. Это приведет к потоку содержимого.
Я знаю, что это старо, но мы просто столкнулись с такой же проблемой в iOS.
В принципе, кажется, что если ваше приложение использует собственный плеер для чтения файла, вам нужно внедрить Accept-Ranges и 206 Partial Content для чтения вашего файла.
В нашем случае произошло то, что файл был всего 4 минуты. Приложение будет играть около 1 минуты 50 секунд, а затем вернется к началу. Он не будет определять общую длину файла.
Несмотря на то, что мы настроили Accept-Ranges на ничто, iOS игнорировала его и все еще запрашивала части файла. Поскольку мы возвращали все это, это было «зацикливание» назад к началу следующего чтения диапазона.
Для реализации частичного контента мы использовали https://mobiforge.com/design-development/content-delivery-mobile-devices , Приложение A: Потоковая передача для Apple iPhone Томасом Томассеном
Я надеюсь, что это помогает кому-то