2010-07-13 4 views
1

Je lis la question suivante et répondre HTML5 <audio> Safari live broadcast vs notjouer Safari et iPhone Safari « en direct » avec la taille du fichier fini (MySQL, PHP)

sait pas encore comment résoudre le problème dans ma situation:

Le Les fichiers audio (mp3) avec lesquels je travaille sont stockés dans mySQL et extraits dans le navigateur par un script PHP qui envoie les en-têtes Content-length et Content-type avant les données. Cela fonctionne parfaitement dans Firefox, Opera, Chrome, IE 6,7,8.

Pour une raison quelconque, cependant, Safari est incapable de déterminer la taille du fichier et insiste sur le fait que les données sont un flux, à la fois avec des balises audio et embed ...

La suggestion dans le poste ci-dessus doit faire avec plugin serveur que je suppose aurait à faire avec le service du fichier à partir d'un chemin de système de fichiers, pas une base de données. Comment puis-je résoudre ce problème avec mes données provenant de MySQL?

Merci,

M

Répondre

0

Voir this answer; bien qu'il mentionne la vidéo, c'est la même chose. Fondamentalement, vous devez indiquer au client la taille du fichier lorsque vous envoyez la réponse (ce que vous faites); Pour soutenir la recherche, vous devez également analyser les en-têtes Range du client. Peut-être que le problème est là, mais il y a probablement plus de problèmes. En lisant la réponse à laquelle vous avez lié, vous devez absolument analyser les en-têtes Range: et pas seulement le côté gauche de l'intervalle, comme dans la réponse à laquelle je suis lié.

0

Heh. C'était plus facile que je ne le pensais.

Je viens d'ajouter l'en-tête suivant au fichier PHP qui sert l'audio:

header('Content-Range: bytes 0-'.$audioLength.'/'.$audioLength); 

où $ audioLength est la longueur du fichier en octets - cette valeur est récupérée à partir du fichier un stocké avec le données audio dans la base de données mySQL. Apparemment, Safari ne craint pas d'être informé que la plage correspond à la longueur totale du contenu. Drôle. Donc, au moins dans Safari version 5.0, il n'est pas nécessaire d'avoir une implication plus profonde dans les en-têtes Range que celle-ci.