HTML5 <Audio> Safari Live-Übertragung vs nicht

Ich versuche, ein HTML5-Audioelement einzubetten, das auf MP3- oder OGG-Daten verweist, die von einer PHP-Datei bereitgestellt werden. Wenn ich die Seite in Safari ansehe, werden die Steuerelemente angezeigt, auf der Benutzeroberfläche wird jedoch "Live Broadcast" angezeigt. Wenn ich auf Wiedergabe klicke, startet der Ton wie erwartet. Sobald es beendet ist, kann ich es nicht mehr starten, indem ich auf "Abspielen" klicke. Sogar die Verwendung der JS-API für das Audioelement und das Festlegen von currentTime auf 0 schlagen mit einer Indexfehlerausnahme fehl.

Ich vermutete, dass die Header aus dem PHP-Skript das Problem waren, insbesondere das Fehlen einer Inhaltslänge. Das ist aber nicht der Fall. Die Antwortheader enthalten eine angemessene Inhaltslänge, um anzuzeigen, dass das Audio eine endliche Größe hat. Darüber hinaus funktioniert in Firefox 3.5+ alles wie erwartet. Ich kann mehrmals auf das Audioelement klicken, um die Audiowiedergabe zu hören.

Wenn ich das PHP-Skript aus der Gleichung entferne und eine statische Kopie der MP3-Datei bereitstelle, funktioniert in Safari alles einwandfrei.

Bedeutet dies, dass Safari Audio-Quell-URLs mit Abfrageparametern anders behandelt als URLs ohne Abfrageparameter? Hat jemand Glück, dass das funktioniert?

Meine einfache Beispielseite ist:

<!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-Header aus PHP-Skript:

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-Header vom direkten Dateizugriff:

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

Ich habe versucht, den Accept-Ranges-Header fest in das Skript zu programmieren, aber kein Glück.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage