En effet, HLS et DASH semblent adaptés si tu trouves un bon player Web qui le supporte (ce qui ne devrait pas être un souci). Avec ffmpeg
, tu le sais peut-être déjà, tu peux générer tes segments et ton manifeste pour HLS ou DASH, lesquels n’ont plus qu’à être servis avec un simple serveur HTTP statique comme NGINX par exemple.
Pour ton problème de carte SD, tu peux éviter l’écriture physique dessus en utilisant la RAM. Comme ffmpeg
travaille en sortant des fichiers, l’astuce est d’utiliser un volume temporaire monté en RAM (en tmpfs
par exemple). Parfois les distributions l’appliquent automatiquement pour /tmp
(mais pas toujours) et /dev/shm
. Tu peux donc indiquer à ffmpeg
de générer les segments et le manifeste dans un tel volume (dans un subdirectory de préférence), puis configurer ton serveur HTTP pour servir à partir de là. Il n’y aura alors pas la moindre écriture sur la carte SD.
Évidemment, on ne veut pas accumuler les fichiers là-dedans sinon ta RAM saturera. Les segments peuvent être automatiquement supprimés ou remplacés selon les options que tu passes à ffmpeg
afin de garder une occupation RAM constante.
Je pars du principe que tu ne veux pas spécialement enregistrer le live, sinon il faudra écrire quelque part, carte SD ou disque externe.
Le stream peut être sécurisé s’il est servi sur HTTPS, c’est à voir avec la configuration de ton serveur HTTP.
Exemple rapide (pas testé et pas optimisé) avec ffmpeg
pour du HLS :
ffmpeg \
-f video4linux2 \
-i $device \
-f hls \
-c:v h264 \
-s 640x480 \
-hls_time 5 \
-strftime 1 \
-hls_segment_filename "/tmp/live/seg-%s.ts" \
"/tmp/live/out.m3u8"
Côté NGINX, quelque chose comme ça sur le même RPi (sans HTTPS) :
server {
listen 80;
listen [::]:80;
server_name monlive.example.com;
root /tmp/live;
}
Et sans oublier de servir la page HTML qui contient le code nécessaire pour le player HLS ou DASH bien-sûr ! (pas forcément sur le même serveur)
Pour que ce soit accessible en dehors du réseau local, il faudra voir avec les paramètres réseaux de ton routeur. Difficile d’en dire plus sans plus d’infos, ça pourrait potentiellement mériter son propre topic selon les cas. Il y aura aussi la partie sécurité à voir (pour mettre en place HTTPS et éviter aux clients d’accéder à des fichiers indûment).