Créer une WebTV simple, rapide et gratuite
par Chloé le 7 avril 2009, dans la catégorie Audiovisuel, Informatique
L’un de mes travaux en ce moment, en tant qu’assistante de Christine Rougemont, est de l’aider à préparer ses cours sur le streaming Flash, cours devant aboutir à la création d’une WebTV. La WebTV en question doit tourner avec un client en Flash (une fenêtre de navigateur) et être entièrement automatisée, afin que des non-experts puissent l’utiliser.
Le principe est le suivant : on a un studio de télévision, pleinement équipé, avec une régie qui tourne. Je ne traiterai pas dans ce post des modalités d’installation d’un studio de télé, ne maîtrisant moi-même pas le sujet. Toujours est-il que l’on a une sortie vidéo, un cable Firewire ou un ensemble de fichiers.
Maintenant, on veut streamer. Deux solutions faciles s’offrent à nous pour la diffusion.
On peut encoder le flux en MPEG4/Theora et l’envoyer sur un serveur Icecast (solution 1), ou on peut encoder le flux en FLV et l’envoyer sur un Flash Media Server ou sur Red5 (solution 2).
Solution 1 : Theora + Icecast
En cas de diffusion directe depuis la régie.
$ dvgrab --format raw - | ffmpeg2theora -a 0 -v 5 -f dv -x 640 -y 480 -o /dev/stdout - | oggfwd serveur-de-streaming port-du-serveur mot-de-passe /myvideostream.ogg
Explication: Une machine Linux, BSD ou autre Unix supportant dvgrab récupère directement le flux DV depuis la régie. On l’encode en Theora avec FFmpeg et on le pousse directement vers le serveur Icecast.
Attention ! Il faut une machine qui « assure », voire qui « dépote » pour pouvoir se permettre de diffuser en direct. On doit faire de l’encodage en temps réel pour que la qualité soit suffisante. De plus, il faut que l’encodage ne consomme pas toutes les ressources processeur: on a besoin d’un minimum de puissance pour encapsuler l’OGM dans du HTTP et envoyer vers le serveur Icecast. Il est aussi nécessaire d’avoir une connexion Internet montante d’un débit suffisant. Je recommande au moins 5Mb/s (une ligne SDSL/Cable/FO suffit – par contre, votre ADSL familial vous obligera à réduire grandement la qualité d’image et de son, rendant les fichiers inexploitables pour la WebTV).
En cas de diffusion depuis des fichiers pré-enregistrés
C’est un peu plus amusant à faire. Générez une liste des séquences que vous souhaitez diffuser. Supposons par exemple que vous vouliez diffuser mire.ogm puis emission_du_matin.ogm puis annonceur1.ogm puis emission_de_l_am.ogm puis mire.ogm… on reste basique, je ne suis pas directrice d’antenne
Mettez une liste bout à bout des fichiers que vous voulez lire, par exemple
divers/mire.ogm
emission/emission_du_matin.ogm
pub/annonceur1.ogm
emission/emission_de_l_am.ogm
dans un fichier playlist.txt. Je vous conseille de les avoir déjà encodés afin de pouvoir économiser de la puissance processeur
Puis, tapez la commande suivante (ou programmez la dans un script)
cat $(cat playlist.txt) | oggfwd serveur-de-streaming port-du-serveur mot-de-passe /myvideostream.ogg
Vous devriez être en train de streamer à l’antenne
Cette solution requiert beaucoup moins de puissance processeur (un serveur type Dedibox devrait suffir largement) mais toujours autant de bande passante montante.
Solution 2 : Red5 / Flash Media Live Encoder
Je ne traiterai pas ici de Flash Media Server, n’ayant pas de licence pour ce logiciel et me sentant d’humeur (si ces gentils messieurs-dames de chez Adobe passent sur ce blog, drop me a license key !).
Installation de Red5
L’installation est relativement simple: télécharger et installer Red5 sur votre serveur de diffusion depuis l’adresse http://osflash.org/red5 (utiliser de préférence les versions Java 6).
Dans l’installeur (http://adresse-de-votre-serveur:5080/installer/) installer l’application oflaDemo si elle ne l’est pas déjà. Libre à vous de la renommer afin de changer son nom pour quelque chose de plus « professionnel » (flashStreaming).
Red5 est prêt à streamer.
Utilisation de Flash Media Live Encoder
Ici j’assume que vous pouvez connecter la sortie régie à votre ordinateur, et qu’elle est considérée comme une caméra DV (le cas est applicable à l’utilisation directe d’une caméra en entrée: j’ai fait mes tests avec une Sony DSR-390 sur l’entrée FireWire de mon PC).
Téléchargez Flash Media Live Encoder depuis http://www.adobe.com/products/flashmediaserver/flashmediaencoder/ et installez-le sur votre PC.
Démarrez le logiciel (Menu démarrer / Adobe / Adobe Flash Media Live Encoder).
Dans le panneau de gauche
Cochez la case « Vidéo » si ce n’est déjà fait. Sélectionnez en « Device » l’entrée correspondant à votre caméra DV. En format, choisissez VP6 pour maximiser la compatibilité. En frame rate, adoptez le frame rate standard 25 images / secondes. En Input Size choisissez la résolution maximale proposée par votre périphérique vidéo (720×576 par exemple). Vient la partie « Bit Rate ». Ici vous allez choisir dans quelles qualités vous aller diffuser (je ne traîterai pas de ce point: mes valeurs). Vous pouvez adopter le profil « Multi Bitrate – 2 streams (1300 Kbps) – VP6″ par exemple. Celui-ci diffuse un flux en 320×240 et un autre en 640×480, permettant d’atteindre une résolution proche de celle d’une TV classique.
Cochez ensuite, si ce n’est pas déjà fait, la case « Audio ». Choisissez votre périphérique d’entrée, votre codec audio, le nombre de canaux, le taux d’échantillonnage et le bit rate. Réglez le volume de sortie afin qu’il soit à un niveau standard, ni trop fort ni trop faible.
Une fois les réglages faits, prenez note des paramètres « Total video… + Audio bitrate » pour chacun de vos flux: cela vous servira pour la diffusion.
Dans le panneau de droite
Cochez la case « Stream to Flash Media Server ». Dans « FMS URL », entrez « rtmp://adresse-de-votre-serveur/oflaDemo » (pourvu que vous n’ayez pas changé le nom de l’application oflaDemo pour autre chose, auquel cas vous savez ce qu’il vous reste à faire… pour le reste du tutoriel je considère que comme moi vous ne l’avez pas changé). Laissez « Backup URL » vierge (vous pouvez l’activer si vous avez un deuxième serveur de streaming, pour le secours). Dans le champ « Stream », indiquez « live%i ». Ceci permettra de numéroter les flux. Vous pouvez changer ça pour « ma_tele_web_%i » si ça vous chante. Je considère qu’on va rester sur « live ».
Cliquez sur « Connect ». Si tout se passe bien, vous n’aurez pas de message d’erreur. Sinon, une fenêtre apparaîtra, vous indiquant qu’il y a eu un problème: probablement votre pare-feu qui vous empêche de vous connecter au serveur, ou une mauvaise configuration de Red5 (s’exécute-t’il ? oflaDemo est-il bien installé ?)
Cliquez sur « Start ». Le streaming commence.
Visionnage
Installez un logiciel tel que FLVPlayer, qui permet de lire les flux rtmp. L’URL de visionnage de votre premier stream est ainsi constituée: rtmp://adresse-de-votre-serveur/oflaDemo/live1?videoKeyframeFrequency=5&totalDatarate=428, 428 étant le nombre que vous avez pris soin de noter précédemment (rassurez-vous: vous pouvez le retrouver en cliquant sur « Encoding options » dans Flash Media Live Encoder). Pour le deuxième, c’est rtmp://adresse-de-votre-serveur/oflaDemo/live2?videoKeyframeFrequency=5&totalDatarate=828, 828 étant le bitrate que vous avez noté pour le deuxième flux. C’est assez ennuyeux de devoir écrire tous les paramètres ainsi, mais c’est une incompatibilité entre Flash Media Live Encoder et Red5. Copiez cette adresse dans votre presse-papiers et collez la sur la fenêtre de FLVPlayer (ctrl+v). Vous devriez voir votre vidéo. Vous pouvez tout à fait la mettre sur un site Web quelconque. Assurez-vous de conserver les mêmes paramètres afin qu’à chaque fois que votre stream tourne la vidéo soit fonctionnelle. Je ne développerai pas ici d’explications sur « Comment lire un flux RTMP avec Flash ».
J’espère que cet article vous aidera. Je le complèterai prochainement;









juillet 9th, 2009 on 15 h 40 min
Merci pour cet article ! très clair et vraiment instructif.
juillet 20th, 2009 on 15 h 14 min
Merci pour cet article, très intéressant.
Juste une (surment bête) question :
« http://adresse-de-votre-serveur:5080/installer/ »
—> adresse-de-votre-serveur , c’est quoi l’adresse , c un serveur qu’il faut acheter ? (si oui kel type de serveur ?)
août 19th, 2009 on 14 h 14 min
C’est l’adresse DNS (le nom de domaine) ou l’IP.
septembre 17th, 2009 on 18 h 12 min
Merci à toi pour cette astuce « videoKeyframeFrequency=5&totalDatarate=828″ indispensable pour faire des tests avec vlc
septembre 23rd, 2009 on 23 h 57 min
Bonjour ;
Voila j’ai un ti probleme je connais rien en flash
Me je voudret affiche le flux que j’envoi par media live sur mon server red5 sur un site web pourier vous me renseigne commen faire pour affiche mon flux video sur mon site web
Merci Cordialement Jonathan
septembre 24th, 2009 on 0 h 02 min
Bonjour,
première étape: http://www.amazon.fr/Apprendre-lOrthographe-Ancien-Editeur-Euros/dp/2218728575 pour que je puisse lire sans saigner des yeux.
deuxième étape: lire mon tutoriel. Procure toi un lecteur Flash qui fonctionne ou apprends à le fabriquer. Il y a tout ce qu’il faut sur ce site. Si tu ne connais pas Flash: apprends. Ca vaut la peine.
On n’a rien sans rien. Et si tu ne veux vraiment pas apprendre, je suis prestataire de services pour des tarifs raisonnables (dans les deux sens).
octobre 14th, 2009 on 19 h 06 min
Bonjour et merci pour ce tuto qui m’a beaucoup aidé.
De mon côté, le fonctionnement de FME en acquisition DV ne pose aucun problème (j’envoie vers un serveur Red5).
Par contre , tous les essais avec des webcams ou autres sources USB (VGA2USB,…) provoquent des saccades lors de la lecture sur mon lecteur Flash alors que le CPU de ma machine est à 50%.
L’avez vous déjà constaté ? Avez-vous une idée?…
Merci
octobre 14th, 2009 on 19 h 55 min
Bonjour Olivier,
mauvais pilote je dirais, comme trop souvent sous Linux. Peut-être faut-il augmenter le frame-rate dans le pilote, éventuellement (modinfo ou une option de modprobe peuvent montrer les options du pilote je pense)
Je n’utilise pas de V4L pour sourcer du multimedia en direct. Eventuellement du dvgrab, rien d’autre.
janvier 15th, 2010 on 4 h 45 min
Interessant cet article merci
janvier 27th, 2010 on 23 h 59 min
Et bien … toutes mes félicitations!
Et surtout un grand merci!
Bonne continuation!