Chloé – Arts & Sciences

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;

:, , , , , , ,

10 Les commentaires

  • top

    Merci pour cet article ! très clair et vraiment instructif.

  • sylvain

    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 ?)

  • Chloé

    C’est l’adresse DNS (le nom de domaine) ou l’IP.

  • Benoit

    Merci à toi pour cette astuce « videoKeyframeFrequency=5&totalDatarate=828″ indispensable pour faire des tests avec vlc

  • Jonathan

    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

  • Chloé

    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).

  • Olivier

    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

  • Chloé

    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.

  • Mobi

    Interessant cet article merci

  • Fred

    Et bien … toutes mes félicitations!
    Et surtout un grand merci!

    Bonne continuation!

Laisser un commentaire

Vous cherchez quelque chose ?

Utilisez ce formulaire pour rechercher un contenu:

Vous ne trouvez pas votre bonheur ? Contactez-moi avec un commentaire, je verrai que faire pour vous.