auto-hébergement de Owncast un serveur de streaming vidéo
Wed, 12 Feb 2025 12:15:15 +0200[Update Android]
Je suis tombé récemment sur Mastodon sur un post visiblement automatisé de @deadtom@owncast.deadtom.me qui renvoyait vers son site de streaming vidéo DeadTOm’s Owncast. De fil en aiguille je découvre qu’il utilise le logiciel libre Owncast qui est développé en Go, et qui propose aussi un annuaire des streams décentralisés 😱 : directory.owncast.online
La baffe ne s’arrète pas là car Owncast intègre également le Fediverse. Cela veut dire qu’un utilisateur Mastodon peut s’abonner à un Stream Owncast et alors recevoir les notifications de stream.
Évidemment ni une ni deux je test sur mon infra auto hébergée.
L’installation est toute simple avec Docker, voici la doc pour un conteneur : Use a container image.
Très simple à adapter en HCL Nomad
job "owncast" {
datacenters = ["dc1"]
type = "service"
group "home" {
count = 1
network {
port "http" {
to = 8080 # container port the app runs on
host_network = "tailscale"
}
port "rtmp" {
to = 1935 # container port the app runs on
static = 1935 # host port to expose
host_network = "tailscale"
}
}
task "owncast" {
driver = "docker"
constraint {
attribute = "${attr.unique.hostname}"
value = "nuc"
}
config {
image = "owncast/owncast:latest"
volumes = [
"/data/volumes/owncast/:/app/data"
]
ports = [
"http", "rtmp"
]
}
resources {
cpu = 50
memory = 1000
}
service {
name = "owncast"
provider = "consul"
port = "http"
tags = ["tricot stream.fredix.xyz"]
}
service {
name = "owncast"
provider = "consul"
port = "rtmp"
}
}
}
}
Le service écoute sur 2 ports. Le 8080 pour l’interface web et aussi l’interface admin. Et le port RTMP 1935 qui sert à OBS pour envoyer le flux vidéo vers Owncast dans le réseau local.
Une fois l’application lancé il faut aller dans l’interface admin pour changer le pass admin et la Stream key : https://stream.domain.tld/admin/
. L’interface permet d’activer et configurer la Fédération, les tags, nom de l’instance le chat intégré et surtout les paramétrages d’encodage vidéo en fonction de votre matériel.
Après avoir généré une nouvelle clé API il suffit de lancer OBS et configurer un stream custom avec :
Finito, le reste c’est du OBS classique. On peut streamer le bureau de son PC, sa CAM ou bien un fichier vidéo. Comme vous le voyez j’ai intégré le HTML embarqué dans mon blog 😎
Par contre aucune idée de combien d’utilisateurs peut tenir un stream auto-hébergé cela dépend du débit d’envoi bien sûr. Owncast supporte les buckets S3 et cela servirait à déporter le streaming via S3 plutôt que d’utiliser la bande passante personnelle. Je n’ai pas testé mais attention je doute que la bande passante en sortie de votre fournisseur S3 soit gratuite.
A savoir que Peertube permet également de streamer en direct mais après un test OBS a subit des déconnexions intempestives. A mon avis de part ses technos Owncast me parait beaucoup plus adapté pour du live streaming.
Owncast permet d’utiliser l’encodage matériel VA-API pour décharger le CPU. Nomad pourrait utiliser le GPU du host mais cela semble concerner uniquement les cartes NVIDIA.
De toute manière j’ai testé en lancant Owncast directement sur le NUC sans docker et j’ai eu cette erreur qui confirme que mon GPU Intel intégré n’est pas supporté (j’ai bien installé le paquet libva-intel-driver)
ERRO[2025-02-12T20:02:03+01:00] [vost#0:0/h264_vaapi @ 0x5deb9ce09b40] Unknown pixel format requested: vaapi_vld.
En encodage classique par la libx264 ffmpeg sollicite alors pas mal de CPU pendant une session de streaming même si c’est dépendant de pleins d’options côté OBS et Owncast. Mon NUC a un load moyen de 6 et les 4 coeurs à 100%. Une excuse pour changer de MiniPC ? 😆
Il existe une application Android qui permet de streamer en RTMP : IRL Pro. Pour l’utiliser j’ai modifié l’interface RTMP de Owncast pour qu’elle écoute sur l’IP Tailscale. Il faut bien sûr installer le client Tailscale sur Android.
Dans l’interface web admin de Owncast j’ai ajouté une clé de stream qui ne contient qu’une majuscule, un chiffre et un caractère spécial. Cette clé ne doit pas avoir trop de caratères spéciaux sous peine qu’elle soit refusée par IRL Pro.
Dans les settings de l’application puis Connections il suffit d’ajouter cette URL : rtmp://IP_TAILSCALE_NUC:1935/live/cle_stream
et hop vous pouvez streamer en 5G 😆