Intereting Posts
PHP: получение данных из ввода в формате HTML, а затем вывод с использованием filter_array Случай переключения PHP более 1 значения в случае почему ob_start () должен опережать session_start () для работы в PHP? Загрузка файла = 2 Добавить поле для загрузки в регистровую форму с помощью CodeIgniter Нужна помощь в выполнении сеансов PHP в suPHP Рекомендации по доступу к зарегистрированному объекту пользователя из других классов jquery / ajax form – serverside php, но получить предупреждение о перекрестном домене Получить родительскую категорию для страницы продукта Opencart убивать процессы пользователей в Linux с помощью php Выберите случайные строки из таблицы mysql генерировать PHP-классы из XSD? Как обращаться с выходом пользователя в браузере с несколькими вкладками? автоматический выход из системы всех открытых вкладок при выходе из одного из них Дизайн таблицы базы данных «Следуй за пользователем» PHP принимает все комбинации

Потоковое mp3-файл через php

Вот мой 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 Томасом Томассеном

Я надеюсь, что это помогает кому-то