La diffusion d’une vidéo en continu et en direct sur le Web (« live streaming » en anglais) est surtout utilisée pour la vidéosurveillance ou pour la retransmission d’événements en direct. Elle permet aussi de découvrir un lieu à distance (reportage, visite d’usine…) ou de faire des travaux pratiques en filmant du matériel situé sur un autre site. Elle est plus pratique que la visioconférence, car la diffusion est publique et accessible en permanence une fois l’installation en place.
Il existe plusieurs protocoles de communication pour faire de la diffusion en continu et en direct. Les plus courants sont :
Protocole |
Connexion entrante1 |
Avantages |
Inconvénients |
Données transmises |
NON |
Très faible latence. Open Source. |
Sera remplacé par WebTransport ? |
Flux audio/vidéo. |
|
RTMP |
NON |
Faible latence. Répandu dans les caméras en réseau (caméras IP). |
Incompatible avec HTML5. |
Flux audio/vidéo. |
RTSP |
OUI (serveur côté caméra) |
Répandu dans les caméras IP, permet de les commander à distance (lecture, pause…). Généralement utilisé avec le protocole RTP qui transmet le flux vidéo de la caméra. RTP est parfois utilisé avec le protocole RTCP (Real-time Transport Control Protocol) pour contrôler la qualité de service. |
Flux audio/vidéo. |
|
NON |
Faible latence. Open Source. |
Flux audio/vidéo. |
||
NON |
Faible latence. Open Source. |
Flux audio/vidéo. |
1 Connexion entrante : cela nécessite la mise en place de moyens de sécurisation du serveur situé dans le réseau privé (isolation, filtrage des flux…), en plus du paramétrage d’un routeur, d’un pare-feu, voire d’un proxy. Il vaut mieux utiliser un protocole avec une connexion sortante, vers un serveur situé en dehors du réseau privé. Dans le doute, demandez à la personne responsable de la sécurité informatique.
Il peut être très intéressant d’utiliser le protocole MQTT couplé avec le système de commande d’une caméra (ONVIF, API HTTP…) pour l’allumer/éteindre depuis Internet, zoomer et la faire pivoter.
Les protocoles RTMP (« Real Time Messaging Protocol »), SRT (« Secure Reliable Transport »), RIST (« Reliable Internet Stream Transport ») ou WebRTC permettent de « pousser » un flux vidéo vers une plateforme de diffusion en continu et en direct. La plateforme affiche la vidéo dans une page web, en lui envoyant un flux vidéo découpé en segments (protocoles HLS, MPEG-DASH, LLDASH, Low-Latency HLS) ou un flux vidéo continu (protocole WebRTC) :
Attention : suivant les protocoles utilisés, la latence peut dépasser 30 secondes. C’est l’écart entre le moment où on filme avec la caméra et le moment où on affiche la vidéo dans une page web. HLS (« HTTP Live Streaming ») et MPEG-DASH (« Dynamic Adaptive Streaming over HTTP ») ont une latence de 20 à 30 secondes, due à la transmission du flux vidéo en segments. RTMP, RTSP/RTP (« Real Time Streaming Protocol »), SRT, RIST, LLDASH et Low-Latency HLS ont une latence d’environ 3 secondes. WebRTC a une latence de moins d’une seconde. Il faut donc vérifier les protocoles de transmission utilisés par la plateforme de diffusion.
Pour économiser la bande passante, il faut compresser le flux vidéo brut avec un encodeur performant : AV1 ou sinon, H.266/VVC (« Versatile Video Coding ») ou MPEG-5. Les encodeurs VP9 et H.265/HEVC (« High Efficiency Video Coding ») sont moins performants, les encodeurs VP8 et H.264/AVC sont beaucoup moins performants.
Pour lire un flux vidéo et le diffuser avec le protocole de son choix :
- RtspSimpleServer.
- Restreamer : [RTMP, RTSP/RTP, HLS] -> [RTMP, HLS].
- FFmpeg génère un flux RTMP, SRT ou RIST à partir du flux vidéo brut issu d’une caméra. Le logiciel de capture vidéo et de streaming OBS Studio fait de même, ainsi qu’à partir d’une capture d’écran/fenêtre.
- Un dérivé d’OBS Studio génère un flux WebRTC : OBS-studio WebRTC. Il est développé par Dolby.io.
- GStreamer génère un flux RTMP, SRT, RIST ou WebRTC à partir du flux vidéo brut issu d’une caméra.
- go2rtc génère un flux RTSP/RTP, HLS ou WebRTC à partir d’un flux vidéo brut ou d’un flux RTMP.
SipRadius propose des encodeurs + diffuseurs de flux vidéo.
Serveurs de « live streaming » sous licence Open Source :
- MistServer : RTMP, RTSP/RTP, SRT -> RMTP (H.264), RTSP/RTP (H.264, H.265), Low-Latency HLS (H.264, H.265), WebRTC (H.264, VP8, VP9). AV1 est disponible dans la version professionnelle.
- Open WebRTC Toolkit Media Server. RTMP, RTSP/RTP, WebRTC. (H.264, VP8, H.265, VP9).
- OvenMediaEngine. RTMP, RTSP/RTP, SRT, WebRTC -> RTMP, Low-Latency HLS, WebRTC (VP8, H.264). AV1 dans une prochaine version est en discussion.
Plateformes de « live streaming » sous licence Open Source :
- Kerberos.io. RTSP (H.264), WebRTC. Plateforme de vidéosurveillance.
Plateformes de « live streaming » sous licence non Open Source (liste non exhaustive) :
- Agora Broadcast Streaming. -> WebRTC (VP8, H.264).
- Ant Media. Pour la version commerciale : [RTMP, RTSP/RTP, SRT, WebRTC] -> WebRTC, RTMP -> RTMP, RTSP/RTP -> RTSP/RTP. La version Open Source est limitée aux protocoles à forte latence. Vidéo encodée en H.264 ou VP8.
- Dolby.io. [RTMP (H.264), SRT, WebRTC (H.264, H.265, VP8, VP9, AV1)] -> WebRTC.
- LiveU Studio à Strasbourg. [RTMP, RTP, SRT, WebRTC] -> [RTMP, SRT, WebRTC]. Vidéo encodée en H.264 ou H.265.
- nanoStream. [RTMP (H.264), RTSP, SRT (H.264), WebRTC] -> Low Latency HLS.
- Nimble Streamer de Softvelum. [RTMP (H.264, H.265, AV1), RTSP/RTP (H.264, VP8, H.265, VP9), Low Latency HLS (H.264, H.265), SRT (H.264, H.265, AV1), RIST (H.264, H.265, AV1), WebRTC (H.264, VP8, H.265, VP9)] -> [RTMP (H.264), RTSP/RTP (H.264, VP8, VP9), Low Latency HLS (H.264), SRT (H.264), RIST (H.264)].
- Restream. Basée sur le serveur de vidéoconférence Mediasoup.
- WOWZA. [RTMP, SRT (H.264, H.265), WebRTC] -> Low Latency HLS, WebRTC.
- Zixi. Diffusion via le réseau 5G.
Lecteurs vidéo intégrables dans une page web :
- Video.js et son module videojs-webrtc-plugin permettent d’afficher une vidéo dans une page web à partir d’un flux WebRTC.
- OvenPlayer permet d’afficher une vidéo dans une page web à partir d’un flux LLDASH, Low-Latency HLS ou WebRTC. Démonstration.
- Lecteur vidéo de Ghostream.
- L’extension WordPress SRS Player permet d’afficher un flux vidéo dans une page de blog.
- WebRTC player.
Auteur : David VANTYGHEM <david.vantyghem@ensam.eu>. Ce document est mis à disposition selon les termes de la Licence Creative Commons Attribution – Partage dans les Mêmes Conditions 4.0 International.
Image en vignette : Centre de diffusion en continu de ZDF à Mayence © Olaf Kosinsky / Wikimedia Commons, licence CC BY-SA 3.0 Deutschland.
N’hésitez pas à signaler les erreurs et à commenter cet article ci-dessous.
Plein de tests intéressants pour comparer les différents encodages vidéo, les taux de compression, les vitesses d’encodage/décodage, la charge CPU, l’intégration dans les navigateurs web : https://lafibre.info/tv-numerique-hd-3d/comparer-h-264-vp9-av1/