shoutcast et flash

Posté le mardi 22 mai 2007 à 1 h 20, Read it in english with Google

Shoutcast, pour ceux qui ne connaissent pas encore, est un serveur de streaming audio permettant le plus simplement du monde de diffuser votre webradio.
La quasi totalité des applications permettant d’envoyer un flux audio continu sont compatible avec Shoutcast. Il est develloppé par nullsoft, la société qui a créé Winamp, et les binaires pour la plus part des plate-forme sont disponibles gratuitement.

Seulement nullsoft n’a pas fait les choses si bien que ça… Un serveur Shoutcast permet de distribuer du son via l’URL « http://ip_du_serveur:port/ » , et, lorsque c’est un navigateur qui tente d’accéder à cette adresse, Shoutcast lui affiche les informations de la webradio. Shoutcast se base donc uniquement sur l’entête HTTP user-agent.



Lorsqu’un objet Flash dans une page HTML tente d’accéder à du contenu extérieur, il envoie la chaine user-agent du navigateur ou bien encore « flashplayer ». Donc si on essaye de lire le son provenant d’un serveur Shoutcast avec Flash, le serveur nous renverra uniquement la page d’information de la webradio. Le son ne pourra donc jamais être lu. C’est pour cette raison que si vous avez créé une animation flash qui réussit à lire un flux Shoutcast lors du débuggage dans Flash (ctrl + enter), elle ne marchera pas dans une page web, le user-agent n’étant pas le même.

Ce n’est pas la faute des systèmes de protection Flash (fichiers de régulation inter-domaine; cross-domain policy).
Pour vous en convaincre, télécharger l’extension firefox User Agent Switcher et ajouter une user agent string avec « WinampMPEG » comme définition agent utilisateur. Maintenant votre objet flash marche.

Pourquoi c’est la faute de Shoutcast et pas de Flash ? Parce que Shoutcast devrait proposer un autre point de montage du flux audio, tout comme le fait Icecast2. Mais Icecast2 n’est pas aussi diffusé que Shoutcast maleureusement, et beaucoup moins d’applications sont compatible avec lui …

Une solution est de rediriger le flux audio via un script serveur mais cela entraine une double consomation du server hébergeant le script (reception du flux de la webradio + envoie au client). Si vous avez accès au serveur hébergeant Shoutcast vous pouvez toujours créer un serveur relay sur ce même serveur. Cela permettra de rediriger le flux de Shoutcast proprement, Shoutcast ne servira au final qu’a traiter le son entrant.

La solution que j’ai adopté est de ne pas utiliser Flash mais un object windows media ou mplayer (pas très portable…).

Mise à jour :
ça y est c’est trouvé ! Il suffit de rajouter « ; » (point-virgule) à la suite de l’url shoutcast pour que le flux soit renvoyé.
Naturellement, ce point de montage n’est pas indiqué dans la maigre documentation de ShoutCast

Shoutcast va envoyer le flux sans filtrer la chaine User-Agent lorsque le chemin de l’URL est :
/;ainsi si vous entriez habituellement cette URL dans Winamp :
http://1.2.3.4:8000il faudra entrer celle-ci dans Flash :
http://1.2.3.4:8000/;stream.nsvShoutcast envera alors uniquement le flux audio, quelque soit le navigateur utilisé.
Plus besoin d’une redirection de flux qui vous consomme toutes vos ressources !

Il y a tout de même un petit bémol sur Flash 9 avec l’ActionScript 3. Si le serveur Shoutcast visé est configurer de telle manière a jouer un son en introduction (autrement dit si le paramètre IntroFile du fichier de config shoutcast n’est pas vide), le flux audio ne sera pas correctement lu par Flash Player 9. Il y aura des interruptions aussi longue que le buffer, et même en diminuant le buffer à zéro (avec SoundLoaderContext(0)) vu aurez toujours des coupures insupportables.

Pourquoi ? aucune idée. J’ai écrit à Adobe pour leur rapporter ce bug, sans réponse évidemment. ça doit venir d’une mauvaise gestion de la part de Flash 9 lors changement de format audio (lorsque l’intro se termine). D’autant plus que tout marche bien si vous créez une animation compatible Flash 8. Mais dans ce cas adieu l’analyseur de spectre (computeSpectrum)…

15 réponses à “shoutcast et flash”

  1. Zozoban

    Explication très claire… mais il me manque des bases pour tout assimiler… En tout cas, je crois comprendre que ce que je veux faire est presque infaisable. En calir, je veux mettre un player flash (ça existe, je l ai acheté : flashplayer.net) dans mes pages… Je teste sur leur site en ligne, ça fonctionne et je peux lire un flux en direct (et non une liste de MP3 !) – voilefm.serveftp.com:8000, qui est une redirection no-ip vers mon PC, flux qui rentre dans winamp. Ce que je veux, c est faire comme les grands (europe 1 par exemple) et envoyer en léger différé sur le web ce qui se passe à l antenne… en faisant rentrer sur line in de la carte son un son en provenance de la table de mixage de la mini radio. Or TOUS les players trouvés se contentent de diffuser des listes PLS ou mu3…. Je ne veux pas charger une liste tous les matins et remplir le répertoire avec des sons mais diffuser du direct. Après toutes ces précautions oratoires, quelqu un a-t-il une idée ou une solution pour moi ?.. j ai demandé l assistance de flashplayer.net mais rien à ce jour… J ai accès à mon serveur, au php.ini, etc… A la rigueur, je me fiche de flash. Un objet gif ou jpeg auquel associer mon flux me suffirait… pas de marche-arrêt. pas de volume +ou – (je rame avec ce serveur qui ne prend pas les apostrophes et les slashs… lol). Voilà une semaine complète que je cherche et je n ai rien trouvé… Snif ! merci d avance

  2. XoraX

    ok tu veux faire le DJ sur tes platines et renvoyer le flux sur le net pour que tout le monde t’entende !! no problème 😀

    va voir de ce coté : http://www.shoutcast.com/download/broadcast.phtml
    Le plugin shoutcast de winamp te permet de rediriger également l’entrée de ta carte son (onglet Input > Soundcard Input). Attention le plugin ne contient pas le serveur Shoutcast, il permet juste de lui envoyé un flux audio à redirigé.

    Mais il faut bien que tu sache que tu a surement une connection très limité en upload. Donc suivant le bitrate audio de shoutcast, tu pourra te faire écouter par plus ou moins une vingtaine de personnes maximum!
    Pour palier se problème il faut que ton serveur Shoutcast soit installé sur un serveur externe ayant un plus gros débit. Tu pourra ainsi lui envoyé ton seul flux audio qu’il se chargera de rediffusé vers les clients.
    Moi aussi j’aime jouer au DJ mix.xorax.net 😉

  3. radio-maghreb

    svp pourrez vous m’indiquer à un site de la creation d’un serveur shoutcast gratuit pour ma radio
    et merci

  4. doowie

    Salut,

    J’arrive un peu tard mais ça peut servir à celui qui a le même problème.

    J’ai cherché looooooooooooooooooooonguement sur internet une solution pour résoudre ce problème de user-agent, j’avais envisagé de passer par un serveur IceCast comme relais mais la solution la plus simple qui a fonctionné pour moi (pas testé avec d’autres serveur Shoutcast mais je ne vois pas de raison pour laquelle ça marcherait qu’avec moi) est de demander à flash de charger non pas l’adresse « http://ip_du_serveur:port/ »
    MAIS : « http://ip_du_serveur:port/;stream.nsv » !!!

    J’espère que ça aidera beaucoup de monde parceque j’étais trèèèèèès loin d’être le seul à en avoir besoin !!

  5. XoraX

    ouep ça marche bien je l’ai trouvé il y a un moment, et en fait peu importe le paramètre, il suffit qu’il y est « ; » (point virgule) à la suite de l’url et shoutcast renvoie le tout en mode streaming.
    Je sort un prochain article dans pas longtemps.

    Mais j’ai des erreurs de lecture sur flash 9 pour les stream shoutcast qui ont une musique d’entré (lors de la connection, genre sur http://ufg.impek.tv/)… alors que ça marche impeccable sur flash 8 mais bon… pas de computeSpectrum sur flash 8 🙁

  6. yvonne

    j’aimerais connaitre les differentes etapes a suivre afin de creer ma propre webradio

  7. CaptainMurk

    Salut, moi aussi j’aimerai bien pouvoir diffuser une radio presente sur le serveur shoutcast (keskistram) mais a partir de mon site.

    J’avais trouver http://www.votreradiosurlenet.com/playerflash/index2.php mais au bout d’ un moment l’allopass revient cher xD

    Donc si vous pouviez juste mettre un tit tuto ca serai cool ^^

    Sur mon site j’ai deja un lecteur flv, est ce que je peu m’en servir ou faut il en prendre un autre afin de diffuser ces radio?

    Merci ^^

  8. Radio

    J’ai toujours cru que la problématique des lecteurs flash étatit similaire a celle des restrictions java sur la sécurité des applets. A savoir, impossible pour un objet contenu dans une page web de communiquer avec autre chose que le serveur web hébergeant la page, du coup impossibilité pour flash d’aller relayer un flux creacast.

    Avez vous des liens vers un script permettant de contourner ce problème, j’aimerais inclure un player dans une page (la solution activeX exclue car trop de visiteurs sous FF).

    cordialement

  9. DareMe2

    Donc si je comprends bien ce qui a été dit plus haut il suffit de rajouter « ; » a la fin de l’url pour que shoutcast renvois le stream vers le lecteur flash et donc vers les auditeurs ?
    Parce que a l’heure actuelle je n’arrives pas a faire passer mon stream shoutcast dans le lecteur flash en y mettant simplement http://url:port.

  10. Beginner

    effectivement ca fonctionne avec http://ip_du_serveur:port/;stream.nsv mais pas avec chrome

  11. Yograph

    Whouaaa merci pour cette histoire de « ; »

    cela faisait des heures que je cherchais partout une solution à ce problème pour mon lecteur radio flash…
    Beaucoup font commerce de player flash et gardent ce genre d’info pour eux.

    Donc vraiment merci beaucoup.

  12. Ludo

    Vous pouvez trouver une webradio Flash gratuite ici: http://webiswell.fr/09/12/2008/tuto-creer-le-flash-de-votre-lecteur-audio-avec-flash-cs4-et-actionscript-3-785/

    Merci pour cette précision ;stream.nsv !!

  13. djgreg

    Voila je chercher un lectuer style virtual dj car la nuit mon virtual dj plante
    il me fautrait un lecteur pour la nuit avez vous une idee a me donner?

  14. Luca

    FRENCHEMENT, MERCI !!!!
    http://ip:port/;stream.pls marche vraiment !!! Avec un lecteur FLASH 😀

    Un grand merci !!

  15. Luca

    http://ip:port/;stream.nsv pardon. Sur chrome ça fonctionne aussi si tu as un lecteur flash. si tu prend un lecteur de se coter : http://flash-mp3-player.net/

    V – Vérifié et certifié

Laissez un commentaire :