2013-06-09 1 views
3

J'essaye de jouer des stations de radio de flux de shoutcast de mp3 avec l'acoustique HTML5.Lecture de flux Shoutcast mp3 avec HTML5 audio dans Firefox?

Je ne pense pas que ce sera pertinent, mais voici le code de toute façon:

var player = new Audio(); 
player.autobuffer = true; 
player.src = "http://173.192.48.71:9048/;"; 
player.volume = 1; 
player.play(); 

Shoutcast détecte cette demande vient du navigateur et retourne la page d'état de radio, donc je mets « ; » à la fin du flux qui oblige le serveur à renvoyer le flux audio au lieu de la page d'état. Cela fonctionne très bien dans Chrome et Safari, mais pas dans Firefox.

Firefox pour une raison quelconque détecte sous forme de texte/contenu simple et refuse de jouer avec cette erreur:

HTTP "Content-Type" of "text/plain" is not supported. 
Load of media resource http://173.192.48.71:9048/; failed. 

je Fiddler pour inspecter ce qui est envoyé du serveur shoutcast et il est clairement « Content- tapez: audio/mpeg ". Existe-t-il un moyen de forcer Firefox à diffuser le flux shoutcast avec l'audio HTML5?

+0

Firefox ne supporte généralement pas MP3. https://developer.mozilla.org/en-US/docs/HTML/Supported_media_formats Êtes-vous sur une version qui le fait? – Brad

+0

@Brad MP3 n'est pas supporté nativement, mais il utilise le codec du système d'exploitation. J'ai essayé de jouer un flux mp3 non-shoutcast et ça marche, mais pour shoutcast ça ne marche pas. Je suppose que FF pense que c'est du texte/plaine à cause de l'en-tête textuel des métadonnées de ICY. –

+0

Les en-têtes 'ICY- *' n'affecteront rien. Le message d'erreur est soit mal rapporté, ou il y a un bug dans votre où vous chargez une URL différente. (Je doute que ce soit un bogue, comme si vous frappiez un autre point de terminaison sur ce serveur, vous obtiendriez 'text/html' à la place.) – Brad

Répondre

3

La prise en charge d'Adobe Flash Player pour Shoutcast a cassé deux fois (voir here et here) l'année dernière, c'est donc un problème très important pour moi.

J'ai décidé d'enquêter. Au lieu d'utiliser le protocole HTTP standard, Shoutcast utilise le protocole ICY, qui est approximativement le même que HTTP/1.0.

La ligne d'état qui Shoutcast envoie est

ICY 200 OK 

mais Mozilla ne comprend pas la partie ICY de cette ligne d'état, il suppose que la réponse est HTTP/0.9 (qui n'a pas de type de contenu/en-têtes). Le résultat de ceci est que le corps du flux inclut la ligne d'état et les en-têtes ICY (c'est-à-dire que les en-têtes sont et non analysés par Mozilla). Parce qu'il n'y a pas de type de contenu, Mozilla fait un peu de "reniflage de média" et découvre des trames MP3 valides avec un léger décalage dans le contenu et les fonctions de la balise <audio> en utilisant ce type de contenu reniflé.

Maintenant vient an issue qui est corrigé en forçant tout le contenu HTTP/0.9 venant sur les ports non standard (c'est-à-dire non-port 80/443) à un type de contenu de text/plain. Maintenant, lorsque le corps du contenu est passé à la balise HTML <audio>, il a déjà un type de contenu text/plain, il n'est donc plus reniflé comme c'était le cas avant ce problème, et Mozilla ne le permet pas. Les bonnes nouvelles sont que I fixed this annoyance et Mozilla traite maintenant le protocole ICY comme étant équivalent à HTTP/1.0. Cela signifie que Mozilla peut décoder les en-têtes et lire le type de contenu correct audio/mpeg et la lecture est restaurée.

Mon correctif devrait trouver sa place dans Mozilla24 plus tard cette année.

En attendant, si vous voulez jouer Shoutcast dans Mozilla, vous aurez besoin de diffuser sur le port 80.

+0

Juste essayé dans la dernière nuit Nightly, fonctionne très bien! Merci de mettre en place le support pour ICY. –

Questions connexes