Forum

Se sentir libre de partager....

Vous n'êtes pas identifié(e).

#1 02-11-2009 01:19:27

dj3c1t
Team RSR
Inscription : 27-08-2006
Messages : 2 064
Site Web

streaming video (ogg theora/vorbis) avec vlc

Une petite récap ici des manips qui m'ont permis de faire un live from ma vebcam et mon entrée ligne.
Comme ça, ça me fait un endroit sur le web où j'ai un mémo pour quand j'en aurais besoin (merci RSR^^)
Et si ça permet à d'autres de faire leur web-tv alors c'est nickel

Maintenant, histoire de pas juste balancer des lignes de commandes sans aucun sens, je vais faire un post en deux parties.
Dans la première, j'expliquerais un peu les points techniques. Les notions sur lesquelles le streaming s'appuie.
Ensuite, une partie pratique résumera la mise en oeuvre.

So we go

I - Un peu de théorie

PC source / Serveur relais : une histoire de bande passante

Un stream video consomme pas mal de bande passante. La première chose à voir, c'est donc le débit des connexions. Et là, y'a deux infos à distinguer: le débit montant et le débit descendant. Le débit montant, c'est le débit que votre ordinateur peut envoyer vers Internet. Le débit descendant, c'est le débit que votre ordinateur peut recevoir d'Internet. Ces débits sont souvent bien différents. Et si vous voulez emmettre un flux vidéo, c'est donc le débit montant qu'il va falloir regarder.

Mettons par exemple que vous avez encodé votre flux (on verra ça plus bas) à 300 Kb/s. ça signifie que pour envoyer 1 flux (à 1 seul spectateur), vous devez avoir un débit montant qui soit au minimum de 300 Kb/s. Si vous voulez avoir 2 spectateurs simultanés, il vous faudra un débit montant de 600 Kb/s. Etc.

Il faut savoir maintenant qu'une connexion ADSL propose en général un débit montant qui tourne autour des 500 Kb/s (en gros entre 100 et 900, selon le lieu, le FAI, etc). Quand votre FAI vous annonce tel débit de connexion, c'est pour le débit descendant et vous pouvez en général le diviser par 10 pour avoir votre débit montant. Donc même en compressant votre flux à 200 Kb/s, vous ne pourrez pas avoir plus de 2 ou 3 spectateurs simultanés. A moins d'être connecté non pas en ADSL mais sur la fibre. là, le débit montant commence à être sympa wink.

Mais si vous êtes en ADSL, l'idée, c'est donc de passer par un relais. c'est à dire une machine sur Internet qui a, elle, un bon débit montant. Par exemple une dédibox chez Free ou une kimsufi chez OVH... Et au lieu d'envoyer votre flux à tous les spectateurs, vous vous contentez de l'envoyer au relais, et c'est là que les spectateurs viennent le piocher.

diffusion.png

dans ce tuto, on va utiliser VLC, aussi bien sur le PC d'emission que sur le relais
sur le PC d'emission, VLC va se charger de lire ce qui arrive de la webcam et de l'entrée ligne et l'enverra sur le relais
et sur le relais, un autre VLC va récupérer le flux et le proposer aux spectateurs

Les codecs, les encapsulations et les protocols de transfère

Bon, on a donc le shéma d'ensemble.
reste à le générer, ce flux.

Et là, il faut savoir qu'un flux vidéo est composé en vrai de deux flux : un pour la vidéo et un autre pour le son.
Chacun de ces deux flux est encodé avec un codec
Un codec, c'est donc ce qui permet de transformer un son ou une vidéo en un fichier numerique.
pour le son, on a par exemple les codecs : mp3, wav, flac, vorbis...
pour la vidéo: mpeg-2, h264, wmv-2...
c'est en paramétrant les codecs qu'on va pouvoir gérer le débit du flux.

Et on a donc deux flux pour la vidéo, qu'on va ensuite regrouper dans un conteneur: c'est ce qu'on appelle l'encapsulation.
comme conteneur, on va trouver : mpeg1, mp4, ogg, mkv...

Enfin, quand les flux seront encodés et encapsulés, on les enverra sur le web. Et pour ça, on va utiliser un protocol de transfère. C'est à dire une façon de communiquer entre ordinateurs via Internet.
et là, on a : HTTP, UDP, RTP...

Le truc à faire gaffe, ici, c'est qu'il existe pas mal de codecs, de conteneurs et de protocols différents, mais que toutes les combinaisons ne sont pas possibles. Certains conteneurs n'acceptent de regrouper que certains codecs. Et certains protocols ne peuvent échanger que certains conteneurs...

Par exemple, pour envoyer du Ogg sur Internet, VLC ne sait faire qu'en utilisant le protocol HTTP.
plus de détails sur les combinaisons possibles avec VLC ici :
http://www.videolan.org/streaming-features.html

Quelques précisions sur les protocols de transfère

Pour envoyer un flux sur Internet, vous avez en gros deux approches. Soit vous proposez un flux sur un PC, sans savoir à priori qui va le lire, et ce sont alors les autres PC qui viendront s'y connecter. Soit vous envoyez directement le flux à un PC donné (et ce dernier décide alors s'il veut lire ce qui lui parvient, ou pas).

Pour rendre le flux accessible pour que ce soient les autres machines qui viennent le chercher, on a par exemple le protocol HTTP.
Pour envoyer le flux à une machine donnée, on peut utiliser le protocol UPD (ou aussi RTP)

ces deux approches ont chacune une conséquence à prendre en compte:

1) Si vous proposez un flux en HTTP, ça veut dire que la machine qui propose le flux doit pouvoir être joingnable (pour que les autres machines la trouve et puissent venir lui demander le flux). Le problème se pose si la machine qui émet est par exemple dans un réseau local (ce qui est le plus souvent le cas avec les PC connectés via les ***box de tout genre. freebox, livebox, etc). dans ce cas, vous devrez faire du "port-forwarding" pour rendre le PC accessible.

2) Si vous envoyez le flux en UDP (ou en RTP)... pas besoin de faire du port-forwarding, mais vous devez par contre connaitre à l'avance les machines auxquelles vous enverrez votre flux.

Plusieurs approches

L'idéal, ce serait donc d'envoyer en UDP entre le PC d'emission et le relais, et d'envoyer ensuite en HTTP sur le relais pour qui veut.
Seulement voilà : VLC ne sait envoyer du Ogg qu'en HTTP.

Donc là, on a deux solutions.
Soit on fait du port-forwarding
Soit on encapsule le flux avec un autre conteneur (qui va bien en UDP) entre le PC et le relais (ce qui implique aussi du coup de choisir d'autres codecs), puis on réencode à la volé, en ogg, sur le relais.

la mise oeuvre qui suit décrit la première solution (avec des précisions ici pour le port-forwarding).

pour la deuxième solution, voir quelques posts plus bas.

II - En pratique

On récapitule

Le shéma utilisé ici est le suivant :

- VLC encode en Ogg (avec les codecs theora/vorbis) sur mon PC et rend le flux accessible par http sur l'adresse locale du PC
   (chez moi 192.168.0.5), sur le port 7524.
- sur mon routeur, j'ai fait suivre le port 7524 pour qu'il corresponde au port 7524 de la machine 192.168.0.5
- sur le relais, VLC va ouvrir le flux qu'il trouve à l'adresse http://82.457.12.15:7524
   (82.457.12.15 est l'adresse public de mon PC sur le web)
- le flux est reproposé sur le relais via HTTP

(note : les IP et les ports indiqués ici ne correspondent pas à celles que j'utilise, c'est pour l'exemple. mais je me tiendrais à ces valeurs dans la suite)

Coté PC

VLC est lancé avec :

vlc v4l:// :v4l-vdev=/dev/video0 :v4l-adev=/dev/dsp --sout="#transcode{vcodec=theo,vb=192,scale=1,acodec=vorb,ab=96,channels=2}:duplicate{dst=std{access=http,mux=ogg,dst=192.168.0.5:7524}}"

v4l:// c'est le module video4linux qui est utilisé pour accéder aux périphériques de capture
:v4l-vdev=/dev/video0 chez moi, ma webcam est accessible via /dev/video0
:v4l-adev=/dev/dsp et ma carte son via /dev/dsp
le bloc transcode fait l'encodage en Ogg
vb=192 bitrate vidéo
ab=96 bitrate audio
la partie duplicate determine les flux de sortie
ici, on en utilise qu'un: access=http
mux=ogg les flux sont encapsulés en Ogg
dst=192.168.0.5:7524 le tout est rendu public sur mon adresse locale, avec le port qui va bien (donc à changer en fonction de votre IP locale et du port que vous avez fait suivre sur votre routeur)

mais vous pouvez ajouter un flux de sortie, par exemple pour faire en même temps une sauvegarde dans un fichier de votre ordi:

vlc v4l:// :v4l-vdev=/dev/video0 :v4l-adev=/dev/dsp --sout="#transcode{vcodec=theo,vb=192,scale=1,acodec=vorb,ab=96,channels=2}:duplicate{dst=std{access=http,mux=ogg,dst=192.168.0.5:7524},dst=std{access=file,dst=/chemin/du/fichier.ogg}}"

là, on rajoute dst=std{access=file,dst=/chemin/du/fichier.ogg} avec le chemin du fichier ogg pour la sauvegarde.

Coté relais

Une fois que le flux est lancé sur le PC source, VLC est lancé sur le relais avec :

vlc http://82.457.12.15:7524 --sout="#transcode{vcodec=theo,vb=192,scale=1,acodec=vorb,ab=96,channels=2}:duplicate{dst=std{access=http,mux=ogg,dst=88.71.164.14:2424/flux.ogg}}" -vvv

http://82.457.12.15:7524 là, il faut mettre l'IP public de votre PC, et le port que vous avez choisi sur votre routeur
la suite est globalement sur la même idée que pour la source, à la différence du flux de sorti:
dst=88.71.164.14:2424/flux.ogg avec l'IP du relais, le port sur lequel vous voulez rendre le flux accessible sur le relais (au choix) et le point d'accès (/flux.ogg ou /monstreamdelamort.ogg, ...)

et si tout se passe bien, le flux est alors accessible par là:
http://88.71.164.14:2424/flux.ogg

Intégrer le flux dans un lecteur sur une page web

Et histoire de paufiner tout ça, vous pouvez mettre un lecteur sur une page web qui diffusera votre flux. Pour ça, je conseille fortement le lecteur Ithéora. Très bon lecteur Ogg wink

http://itheora.org/

Le site propose un générateur de code pour avoir le code à copier/coller dans le HTML de votre page:
http://itheora.org/?p=code

Pour l'adresse de la vidéo, indiquez l'url de votre flux ( dans l'exemple : http://88.71.164.14:2424/flux.ogg )

et banzaï

... bon stream !!!


dead ?

Hors ligne

#2 02-11-2009 22:29:03

Alphonse
Team RSR
Inscription : 15-05-2006
Messages : 1 365
Site Web

Re : streaming video (ogg theora/vorbis) avec vlc

je garantis pas que je le ferai ce soir, mais c'est un beau tutoriel !


Allons voir si les autres rêvent encore...
http://www.troisptitspoints.net

Hors ligne

#3 02-11-2009 22:39:24

lsotis
rsr team
Inscription : 03-12-2006
Messages : 877
Site Web

Re : streaming video (ogg theora/vorbis) avec vlc

oui, ça me fait peur et me rappelle ma médiocrité informatistique sad

Hors ligne

#4 02-11-2009 22:54:52

dj3c1t
Team RSR
Inscription : 27-08-2006
Messages : 2 064
Site Web

Re : streaming video (ogg theora/vorbis) avec vlc

bon... y'a sûrement plus simple ^^
je suis en train chercher d'ailleurs wink

...
maybe avec icecast (enfin il faut que je planche un peu plus le truc)


dead ?

Hors ligne

#5 14-01-2010 00:03:06

dj3c1t
Team RSR
Inscription : 27-08-2006
Messages : 2 064
Site Web

Re : streaming video (ogg theora/vorbis) avec vlc

une variante, que je viens de tester et qui ma foi marche aussi pas trop mal
... et qui simplifie un peu les choses

pour résumer le truc:

l'un des problèmes évoqués plus haut était de devoir bidouiller la box (ou le routeur) pour faire du "port-forwarding".
cette manip est necessaire si vous emettez en HTTP entre votre PC et le relais.
Et on a vu plus haut que pour le ogg, vlc ne sait envoyer qu'en HTTP... donc "port-forwarding" obligé.

Sauf que
rien ne vous oblige en fait à envoyer du ogg entre votre PC et le relais
vous pouvez par exemple envoyer un flux en mp4 sur le relais
et le relais se chargera ensuite de le transformer en ogg

diffusion.mp4.ogg.png

l'avantage de faire ça, c'est que le mp4, vous pouvez l'envoyer en UDP
et que vous n'avez plus besoin, dans ce cas, de faire du port-forwarding

et donc (toujours sous Linux) ça donne:

coté PC, on envoie donc cette fois du mp4, en UDP :

vlc v4l:// :v4l-vdev=/dev/video0 :v4l-adev=/dev/dsp --sout="#transcode{vcodec=mp4v,vb=192,scale=1,acodec=mp4a,ab=128,channels=2}:duplicate{dst=std{access=udp,mux=ts,dst=88.71.164.14:1234}}"

en remplaçant l'adresse IP par celle du relais et en adaptant le reste comme vous le sentez
(vb=192 pour le bitrate video, ab=128 pour le bitrate audio, :1234 pour envoyer sur le port 1234 du relais...)

et coté relais, le flux est donc récupéré sur l'entrée UDP, sur le port choisi ci-dessus (le reste est pareille qu'avant) :

vlc udp://@:1234 --sout="#transcode{vcodec=theo,vb=192,scale=1,acodec=vorb,ab=96,channels=2}:duplicate{dst=std{access=http,mux=ogg,dst=88.71.164.14:2424/flux.ogg}}" -vvv

et pareil, avec l'adresse IP du relais, le port choisi et les bitrate qui vont bien

et voilou
plus besoin d'aller triffouiler le routeur wink


dead ?

Hors ligne

#6 14-01-2010 21:05:22

dj3c1t
Team RSR
Inscription : 27-08-2006
Messages : 2 064
Site Web

Re : streaming video (ogg theora/vorbis) avec vlc

édité un peu le premier post de ce thread, pour faire deux parties: théorie / pratique.


dead ?

Hors ligne

Pied de page des forums

Propulsé par FluxBB 1.5.3