Аудио HTML5 со Сценарием PHP не работает над iPad/Iphone

Хорошо, я пытаюсь играть код аудио HTML iPad, но не работаю.

Я создал один Сценарий PHP для отправки к запросу MP3 к аудио коду HTML5

mp3_file_player.php?n=mp3file.mp3

Плеер здесь: http://www.avault.com/news/podcast-news/john-romero-podcast-episode-80/

Вы будете видеть, что работы над каждым HTML5 поддерживали браузер даже на моем iPod Touch. Но не работает над iPad/iPhone, даже над Safari на MAC OSX (я примерил Safari/Windows, хорошо работал),

Это - мой код PHP:

header("X-Powered-By: ");
header("Accept-Ranges: bytes");
header("Content-Length: ". (string)(filesize($episode_filename)) ."");
header("Content-type: audio/mpeg");
readfile($episode_filename);
exit();

Все хорошо работает, MP3 имеет те же заголовки как чтение mp3 непосредственно.

HTTP-заголовки от доступа файла прямого доступа:

(Status-Line) HTTP/1.1 200 OK
Date Mon, 31 May 2010 20:27:31 GMT
Server Apache/2.2.9
Last-Modified Wed, 26 May 2010 13:39:19 GMT
Etag "dac0039-41d91f8-4877f669cefc0"
Accept-Ranges bytes
Content-Length 50656162
Content-Range bytes 18390614-69046775/69046776
Keep-Alive timeout=15, max=100
Connection Keep-Alive
Content-Type audio/mpeg

HTTP-заголовок из моего Сценария PHP:

(Status-Line) HTTP/1.1 200 OK
Date Mon, 31 May 2010 20:27:08 GMT
Server Apache/2.2.9
Accept-Ranges bytes
Content-Length 69046776
Keep-Alive timeout=15, max=100
Connection Keep-Alive
Content-Type audio/mpeg

Единственная вещь, отличающаяся, это - Довольный Диапазон, я даже пытался добавить его, но если я буду использовать его, то плеер не будет работать над моим IPod touch. Таким образом, я удалил.

Большое спасибо.

8
задан zneak 31 May 2010 в 20:58
поделиться

2 ответа

Попробуйте удалить header("Accept-Ranges: bytes"); так как вы не отправляете часть файла. Удалите header("X-Powered-By: ");, так как Apache все равно его обслуживает

$etag = md5(serialize(fstat($fp))); 
fclose($fp); 
header('Etag: '.$etag); 

^^ Добавьте электронный тег

И попробуйте!

2
ответ дан 5 December 2019 в 18:57
поделиться

Content-Range действителен только при статусе 206.

Похоже, что ваш код вообще не поддерживает частичные запросы (вам пришлось бы разбирать заголовок Range и соответственно сшивать тело ответа, а Content-Length = filesize($episode_filename) будет недействительным почти в каждом случае).

Если вы не собираетесь реализовывать HTTP-сервер внутри HTTP-сервера, пусть Apache обслуживает MP3.

Если вам нужно, чтобы контроль доступа был реализован в PHP, проверьте расширение X-Sendfile или создайте симлинки с неугадываемыми именами файлов и перенаправляйте клиентов туда.

Если вы действительно хотите сделать частичную загрузку HTTP сложным способом, прочитайте RFC 2616 или найдите библиотеку, которая сделает все это за вас. Не отправляйте вслепую все HTTP-заголовки, которые найдете.

3
ответ дан 5 December 2019 в 18:57
поделиться
Другие вопросы по тегам:

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