Я пытаюсь встроить аудио-элемент HTML5, указывающий на данные MP3 или OGG, обслуживаемые файлом PHP. Когда я просматриваю страницу в Safari, элементы управления отображаются, но пользовательский интерфейс говорит "Live Broadcast". Когда я нажимаю кнопку воспроизведения, звук начинается, как ожидалось. Однако, как только это закончится, я не могу запустить его снова, нажав кнопку воспроизведения. Даже использование JS API на аудиоэлементе и установка currentTime на 0 с ошибкой исключения индекса.
Я подозревал, что заголовки из PHP script были проблемой, особенно отсутствием длины содержимого. Но это не так. Заголовки ответов содержат правильный Content-Length, чтобы указать, что звук имеет конечный размер. Кроме того, все работает как ожидается в Firefox 3.5+. Я могу несколько раз щелкнуть по звуковому элементу, чтобы услышать звуковой повтор.
Если я удалю PHP script из уравнения и отправлю статическую копию файла MP3, все будет хорошо работать в Safari.
Означает ли это, что Safari обрабатывает URL-адреса аудио src с параметрами запроса иначе, чем URL-адреса, которые их не имеют? Кому-нибудь удастся заставить это работать?
Моя простая страница с примерами:
<!DOCTYPE html>
<html>
<head></head>
<body>
<audio controls autobuffer>
<source src="say.php?text=this%20is%20a%20test&format=.ogg" />
<source src="say.php?text=this%20is%20a%20test&format=.mp3" />
</audio>
</body>
</html>
Заголовки HTTP из PHP script:
HTTP/1.x 200 OK
Date: Sun, 03 Jan 2010 15:39:34 GMT
Server: Apache
X-Powered-By: PHP/5.2.10
Content-Length: 8993
Keep-Alive: timeout=2, max=98
Connection: Keep-Alive
Content-Type: audio/mpeg
Заголовки HTTP из прямого доступа к файлам:
HTTP/1.x 200 OK
Date: Sun, 03 Jan 2010 20:06:59 GMT
Server: Apache
Last-Modified: Sun, 03 Jan 2010 03:20:02 GMT
Etag: "a404b-c3f-47c3a14937c80"
Accept-Ranges: bytes
Content-Length: 8993
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Content-Type: audio/mpeg
Я пробовал жестко кодировать заголовок Accept-Ranges в script, но не повезло.