Transmettre de la vidéo en wifi

Bonjour à tous,

Résumé :
Transmettre de la vidéo d’une GoPro ou un Sony A7S avec un Raspberry Pi Zero 2 W et une carte d’acquisition.
Résolution 1080@60 ou au pire 720@60.
Connexion wifi.

=====================================

Je suis streamer (Leprofjouljeu) et depuis 3 ans je couvre un évènement sportif (AeroJam) organisé par mon club de Parkour (AeroCrew).
Pour l’instant je ramène mon setup, je me connecte à internet via un téléphone et je met deux webcams et j’ai une à deux personnes qui se promène avec des téléphones pour me renvoyer la vidéo via VDO.ninja. Cette année, on me demande s’il est possible de stepup un peu en captant l’image via des gopro et caméra plus pro. Donc coté caméras branché sur le PC c’est pas un problème, carte de capture et tout ça va aller, mais c’est pour les caméras mobiles que je pense aux cartes RPi.

En fait j’aurais aimé savoir si vous pensez qu’il est possible d’utiliser un RPi pour faire un module de transmission vidéo qui pourrait récupérer de signal d’une gopro (certaines sont en USB et d’autres ont une sortie HDMI il me semble) et d’une caméra type Sony A7S ou je ne sais plus quoi qui ont des sorties HDMI.
Cette année j’aurais une borne Wifi et donc, plutôt que d’utiliser VDO.ninja qui passe le signal par internet, j’aimerais que ça reste en local et que ce soit plus flexible que l’utilisation du téléphone. (En passant par une GoPro je pourrais même avoir de la vidéo embarquée directement sur les athlètes si j’arrive a faire un truc assez compacte avec la carte et la batterie).
Mais tout cela dépend des capacité d’un RPi.

Je pensais utiliser un Raspberry Pi Zero 2 W et une carte d’acquisition HDMI → USB. Ensuite pour transmettre la vidéo, sur OBS j’ai déjà utilisé NDI pour passer des flux mais ça semble utiliser beaucoup de bande passante…

Avec Motion (sudo apt install motion) tu peux mettre une caméra en en IP Caméra, le stream sera « disponible » pour une lecture par un client, sinon, ajoute FFMpeg (sudo apt install ffmpeg) pour l’utiliser à fin de copier le stream (depuis le device ou le stream de motion) vers la cible (serveur).

Pour capturer ta GoPro, en HD (720/1080), il te faudra un module pour capturer le signal depuis un câble HDMI, mais de mes tests, ce sera compliqué, car le module va utiliser le port Camera du RPi et demande l’utilisation d’une version LEGACY de Raspbian (Lite de préférence).

Après pour le signal Wifi, ajoute une clé USB en WIfi N ou AC, car le G fournis avec les RPi 3/4 n’est pas très rapide. plus le signal est gros plus le débit le sera, et vite le Wifi sera saturé, le meilleur est d’utiliser en filaire.

Wifi G c’est 54.4Mbps maximum dans les meilleurs circonstance, et le Filaire c’est 100Mbps, en passant du Wifi au filaire tu « double » sur la possibilité de débit.

N’utilise pas le RPi Zero 2, il est aussi performant que RPi 3, mais, il n’est pas très performant avec un signal HD de caméra, si tu peux, va sur le RPi 4, qui va te donner pas mal plus de puissance. Le Wifi est pire que la version 3 ou 4.

Le débit a besoin du USB 3 pour le support HD. Après, je te conseil de ne pas trop en demander au RPi et de ne pas l’utiliser sur OBS par lui-même, tu devrais plutot le streamer directement sur le serveur ou capturer d’un PC le stream du RPi pour que ce PC s’occupe du OBS.

OBS va prendre tes ressources en mémoire et CPU, déjà, si tu opte pour un RPi 3 ou Zero 2, tu va prendre entre 70% et 100% du CPU et au moins la moitié de la RAM juste pour OBS. Vu que du USB c’est avant tout du gobe CPU, la conversion du HDMI via USB va lui surcharger ton port USB et demandé entre 10% et 50% de ton CPU 9selon la qualité du matériel). Après, prendre ce flut et l’encoder, va demander près de 100% du CPU, juste pour avoir une image encodé tu va saturer le RPi, ajouter OBS par dessus, tu risque d’avoir du lag énorme, des frameskip voir un plantage généralisé ou des déconnexions fréquentes.

SI tu prend une version « desktop » de Raspbian, tu perd déjà 15% de tes ressources. Utilise Raspbian LITE qui va moins demander, et passe tout en CLI pour du Headless, l’idée sera de ce servir du RPI comme conversion HDMI @ IP Camera, et tu laisse un PC gérer le stream avec OBS etc… tu gardera de la stabilité et de la vitesse. Et si le stream de la caméra « plante »’ tu garde ton lien avec OBS sur le serveur de streaming et peut afficher un « Problème technique » sans disparaitre de la diffusion.

Merci pour la réponse très complète déjà.
Pour OBS je ne compte pas l’utiliser sur le RPi c’est sur. J’aimerais que le RPi ne serve qu’a faire le lien sans fil entre la caméra et le PC qui sert au stream (comme tu as dis). La seul chose qui ‹ ‹ m’inquiète › › c’est comment je récupère le signal vidéo du RPi au PC, et là comme je n’ai utilisé que NDI pour l’instant j’ai ça en tête mais si il existe quelque chose de moins compliqué à faire tourner je prends :slight_smile:
Si il es possible de faire passer la vidéo avec le moins de compression possible pour alléger la charge du RPi c’est mieux, mais c’est sur qu’il faut aussi que la quantité de donnée arrive à passer par le wifi :confused:

Utilise Motion, avec lui, tu transforme le RPi en caméra IP.

Après, par un lien comme http://<ip_du_rpi>:8081/ tu va avoir un flux vidéo que tu va intégrer dans OBS par ce même lien (afficher une page Web, dois avoir un module pour ça) .

Dans la config de Motion, tu pourras ajuster les paramètres de compression etc…

Ok super, merci beaucoup, je teste ça dès que possible alors !! :slight_smile:
Est-ce que tu aurais un conseil à me donner aussi concernant la quantité de ram du Pi 4 ?
Je me dis que, qui peut le plus peut le moins mais c’est mon porte feuille qui ne pourra bientôt plus faire plus ^^’

Je fais du 960H à 25fps avec une piCamera sur un PiZero v1 avec Motion (qualité 75), le stream est récupéré depuis un PC. Il y a un lag de 1~5 secondes. Alors pour un 720p30 stable 1GB minimum, 2GB serais mieux.

Mais un RPi 4 en bas de 2GB, c’est un peu de l’argent perdu.