Diffuser en RTSP

Diffuser un flux (webcam) ou un fichier en RTSP avec VLC

Lorsqu'on veut diffuser un flux audio ou vidéo sur internet, le RTSP est un des protocoles les plus adaptés car il permet de diffuser à n'importe qui sans avoir besoin de définir l'adresse IP du client à l'avance. C'est ce qui en fait un protocole idéal pour la VOD (Vidéo à la demande).

Pour voir une application concrète, nous partirons sur le principe que nous voulons diffuser la vidéo d'une webcam pour, par exemple, réaliser une vidéosurveillance, sachant qu'à partir de cela, nous pouvons diffuser n'importe quel autre flux (fichier, DVB, etc.) ou retransmettre simplement un flux monodiffusion reçu par le serveur.

Préparation du serveur

Dans notre exemple, le serveur accessible depuis les clients possède un VLC qui tourne et diffuse le flux provenant de la webcam (ou d'un fichier ou autre). Si VLC se trouve sur une autre machine, le processus est semblable, mais un peu plus complexe.

Dans notre exemple, nous prendrons un flux vidéo généré au format mp4, aussi bien pour la vidéo que pour le son. Il revient à chacun ensuite de choisir les codecs qui lui conviennent et le bon paramétrage :

vlc  dshow:// --sout=#transcode{fps=30,vcodec=mp4v,vb=1024,width=640,height=480,acodec=mp4a,ab=64,channels=1}
:rtp{mux=ts,ttl=10,name="Webcam",description="Webcam au format MPEG-4",port=1234,sdp=rtsp://:80/test.sdp}

Cette simple commande réalise deux choses :

  • la partie transcode permet de transcoder le flux de la webcam en mp4 (audio+vidéo)

  • La partie rtp permet de diffuser un flux RTP/RTSP

L'avantage du RTSP, comme l'on peut le voir dans cet exemple, est que nous n'avons pas besoin de fournir l'adresse IP de destination (normalement indiquée avec l'option dst=x.x.x.x).

De la même façon, l'on n'a pas besoin de définir l'adresse IP du serveur (machine locale par rapport à VLC) si l'adresse est locale.

Que se passe-t-il ?

La commande rtp va générer un flux RTP ou RTSP en fonction de la configuration. sdp=rtsp://... indique à VLC qu'il s'agit de RTSP, donc de vidéo à la demande. Il va attendre les demandes des clients pour leur envoyer le flux généré par transcode.

sdp= va créer un pseudo serveur web (ici rtsp://adresse_ip_publique_du_serveur:80/) sur lequel il a déposé un fichier test.sdp qui contient les informations nécessaires au client pour charger le flux diffusé. Le fichier sdp ressemble à :

v=0
o=- 14766096864306528256 14766096864306528256 IN IP4 ccomp-bureau
s=Webcam
i=Webcam au format MPEG-4
c=IN IP4 192.168.0.8
t=0 0
a=tool:vlc 0.9.8a
a=recvonly
a=type:broadcast
a=charset:UTF-8
m=audio 1235 RTP/AVP 96
b=AS:64
b=RR:0
a=rtpmap:96 mpeg4-generic/44100
a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=0a08; SizeLength=13; IndexLength=3; IndexDeltaLength=3; Profile=1;
m=video 1237 RTP/AVP 97
b=AS:520
b=RR:0
a=rtpmap:97 MP4V-ES/90000
a=fmtp:97 profile-level-id=3; config=000001b001000001b58913000001000000012000c48d8800a514043c1463000001b24c61766335322e342e30;

Remarque

Remarquez donc que dans ce fichier sdp nous retouvons les informations fournies, notamment name et description.

Sauf dans le cas où l'on indique sdp=file://..., le fichier n'existe pas physiquement sur le disque. Mais il est accessible sur le serveur http (dans le cas sdp=http://...) ou rtsp (dans le cas sdp=rtsp://...) comme s'il existait physiquement sous la racine du serveur.

le port port= indiqué (ici 1234) est celui sur lequel est diffusé le flux vidéo. Il faudra compter deux ports par flux (1234 et 1235 dans le cas d'un monoflux, plus dans le cas de flux séparés). il faudra donc penser à ouvrir les ports 1234+1235 sur la mchine locale de façon à ce que le flux puisse être émis. De son côté, le client devra ouvrir les ports 1234+1235 pour le recevoir.

Client

Une fois le serveur en place, il ne reste plus qu'aux clients à se connecter, soit directement avec le lien rtsp://... (dans le cas de sdp=rtsp://...) ou http://... (dans le cas de sdp=http://...). Dans notre exemple, VLC est présent localement sur le serveur de diffusion. Pour VLC c'est localhost (pas besoin de lui indique d'adresse IP) mais pour un client provenant du réseau (interne ou externe), cette adresse est différente. Par exemple, pour une personne du réseau local, cette adresse sera rtsp://192.168.0.2:80/test.sdp. En revanche, pour une personne de l'extérieur, il s'agira de l'adresse publique internet ou, s'il existe, du nom de domaine : rtsp://mondomaine.org:80/test.sdp.

Il ne suffit pas de se connecter avec son navigateur pour recevoir le flux RTSP. Il faut un logiciel capable de le décoder. Il existe plusieurs logiciels capables de le faire : VLC, mplayer, QuickTime... Il suffira de lui indiquer l'adresse du serveur de diffusion en question rtsp://mondomaine.org:80/test.sdp et le logiciel fera le travail tout seul.

VLC