Capter un flux web avec streamlink

L'outil streamlink permet de capter un flux brut MPEG-TS transporté via http(s) issu de plateformes comme YouTube, pluto.tv ou france.tv. Voyons un usage simple ainsi que comment installer l'outil suivant l'OS.

Exemples d'utilisation

Enregistrer localement dans un fichier

On retire la verbosité (--quiet), on ajoute le preset de qualité (best) et on applique une redirection du flux :

1streamlink --quiet -o - "https://www.youtube.com/watch?v=l8PMl7tUDIE" best \
2> flux.ts

Piper dans un autre processus

Cette autre processus peut parser le flux pour faire des stats de discontinuités, des analyses par pid, procéder à une découpe horaire ...

1streamlink --quiet -o - "https://www.youtube.com/watch?v=l8PMl7tUDIE" best \
2| ./captncut-ts.php

Diffuser en multicast

Sur l'ip 239.0.0.1, port 1234, en udp :

1streamlink --quiet -o - "https://www.youtube.com/watch?v=l8PMl7tUDIE" best \
2| ffmpeg -re -f mpegts -i - -c copy -map 0 -f mpegts udp://239.0.0.1:1234

Installation

Debian 12 : oui

  • paquet dans la distrib (apt install streamlink)
1streamlink --version
2streamlink 5.2.1

AlmaLinux 10 : oui

1dnf install python3-packaging
2pip3 install streamlink

AlmaLinux 9 : oui

  • pas packagé
  • pip3 install streamlink ok

AlmaLinux 8 : non

  • pas de paquets dans la distrib
  • openssl 1.1.1 ok
  • pip3 install streamlink (en root) marche mais crash au runtime

CentOS 7 : non

  • pas de paquets dans la distrib (dnf search streamlink)
  • s'installe avec pip3 install streamlink mais ne s'exécute pas à cause d'un openssl trop vieux. Recompiler à la main openssl ? (mauvaise idée)

-> abandon

MacOS : oui

  • paquet dispo dans homebrew (brew install streamlink)
1streamlink --version
2streamlink 6.4.2

Multicast restreint à la boucle locale sous MacOS

Pour éviter de flooder le réseau :

1sudo route add 239.0.0.0/24 127.0.0.1 # activer
2netstat -nr -f inet | grep 239.0.0 # vérifier
3sudo route delete 239.0.0.0/24 127.0.0.1 # désactiver

Monitoring trafic avec bwm-ng (à faire pendant une diffusion multicast, cas qu'il faut qu'un client soit abonné au groupe multicast. Ex: mpv udp://239.0.0.1:1234)

1brew install bwm-ng
 1  bwm-ng v0.6.3 (probing every 0.500s), press 'h' for help
 2  input: getifaddrs type: rate
 3  /         iface                   Rx                   Tx                Total
 4  ==============================================================================
 5              lo0:         628.23 KB/s          628.23 KB/s         1256.46 KB/s <--- trafic multicast
 6              en3:           0.00 KB/s            0.00 KB/s            0.00 KB/s
 7              ap1:           0.00 KB/s            0.00 KB/s            0.00 KB/s
 8              en0:           0.00 KB/s            0.00 KB/s            0.00 KB/s
 9              en1:           0.00 KB/s            0.00 KB/s            0.00 KB/s
10              en2:           0.00 KB/s            0.00 KB/s            0.00 KB/s
11              en5:           0.00 KB/s           11.93 KB/s           11.93 KB/s
12          bridge0:           0.00 KB/s            0.00 KB/s            0.00 KB/s
13            utun0:           0.00 KB/s            0.00 KB/s            0.00 KB/s
14            utun1:           0.00 KB/s            0.00 KB/s            0.00 KB/s
15            utun2:           0.00 KB/s            0.00 KB/s            0.00 KB/s
16            utun3:           0.00 KB/s            0.00 KB/s            0.00 KB/s
17             en14:           0.00 KB/s            0.00 KB/s            0.00 KB/s
18             en16:           0.00 KB/s            0.00 KB/s            0.00 KB/s
19  ------------------------------------------------------------------------------
20            total:         628.23 KB/s          640.16 KB/s         1268.39 KB/s

Ressources

comments powered by Disqus