Transmissão ao vivo em HTML5 <audio> Safari vs.

Eu estou tentando incorporar um elemento de áudio HTML5 apontando para dados MP3 ou OGG servidos por um arquivo PHP. Quando vejo a página no Safari, os controles aparecem, mas a interface do usuário diz "Transmissão ao vivo". Quando clico em reproduzir, o áudio é iniciado conforme o esperado. Assim que terminar, no entanto, não consigo iniciar a reprodução novamente clicando em reproduzir. Mesmo usando a API JS no elemento de áudio e a configuração currentTime para 0 falha com uma exceção de erro de índice.

Eu suspeitava que os cabeçalhos do script PHP fossem o problema, particularmente faltando um comprimento de conteúdo. Mas esse não é o caso. Os cabeçalhos de resposta incluem um Content-Length apropriado para indicar que o áudio tem tamanho finito. Além disso, tudo funciona como esperado no Firefox 3.5+. Eu posso clicar em reproduzir o elemento de áudio várias vezes para ouvir a reprodução do som.

Se eu remover o script PHP da equação e fornecer uma cópia estática do arquivo MP3, tudo funcionará bem no Safari.

Isso significa que o Safari está tratando URLs src de áudio com parâmetros de consulta de maneira diferente dos URLs que não os têm? Alguém tem alguma sorte em fazer isso funcionar?

Minha página de exemplo simples é:

<!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>

Cabeçalhos HTTP do script PHP:

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

Cabeçalhos HTTP do acesso direto a arquivos:

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

Eu tentei codificar o cabeçalho Accept-Ranges no script também, mas sem sorte.

questionAnswers(4)

yourAnswerToTheQuestion