Comment streamer la caméra d’un Raspberry Pi
La prise en charge de caméras sur le Raspberry Pi a permit une multitude de nouvelles applications. De nombreuses applications nécessitent que le Pi diffuse en direct sa vidéo capturée et la rende accessible à l’utilisateur via une interface. Les modules de caméra Pi officiels sont parfaits pour ces projets.
Les modules de caméra Pi offrent une intégration étendue avec l’écosystème Raspberry Pi. Une fois installé, il existe deux façons de streamer la vidéo de la caméra Pi : créer un flux RTSP (Real Time Streaming Protocol) ou streamer dans une page web.
Dans ce tutoriel, nous verrons ces deux méthodes pour streamer la vidéo de la caméra Raspberry Pi. Avant de plonger dans le tutoriel, passons en revue les exigences matérielles et logicielles pour ce projet.
Si vous débutez avec Raspberry Pi ou Linux, j’ai quelque chose qui peut vous aider !
Téléchargez ma fiche mémo des commandes Linux gratuitement – c’est un guide de référence rapide avec toutes les commandes essentielles dont vous aurez besoin utiliser votre Raspberry Pi. Cliquez ici pour l’obtenir gratuitement !
Exigences matérielles et logicielles
Vous aurez besoin des composants matériels suivants pour ce projet :
- Raspberry Pi : Je recommande d’utiliser un Raspberry Pi 4, mais vous pouvez utiliser n’importe quelle version du Pi pour ce tutoriel.
- Carte SD : Pour flasher la dernière version de Raspberry Pi OS pour votre Pi, vous aurez besoin d’au moins 8 Go de capacité. Vous pouvez trouver mon benchmark de carte SD ici (ou obtenir la meilleure sur Amazon).
- Module Caméra : Il existe de nombreuses options pour les caméras. Je vous recommanderais d’utiliser l’un des modules de caméra Raspberry Pi officiels.
En ce qui concerne les exigences logicielles, tout ce dont vous avez besoin est la dernière version de Raspberry Pi OS flashée sur votre carte SD (sélectionnez celle qui vous offre une interface de bureau et des composants logiciels de soutien).
Veuillez noter qu’en raison de changements significatifs dans le logiciel de la caméra Pi dans la dernière distribution Bookworm (que j’utilise pour ce tutoriel), ce tutoriel ne fonctionnera pas pour les anciennes distributions logicielles.
Ce tutoriel suppose que vous avez une caméra fonctionnelle (vous devriez être en mesure de capturer des images fixes), comme expliqué dans le guide complet Installer une caméra sur votre Raspberry Pi : le guide ultime.
Si vous rencontrez des problèmes pendant le processus de configuration, vous pouvez consulter ce guide de dépannage Comment savoir si ma caméra Raspberry Pi fonctionne ?
C’est tout pour les prérequis. Maintenant que tout est en place, commençons le tutoriel.
Streamer la caméra Pi
Dans cette section, nous allons explorer deux façons de streamer le flux vidéo de notre caméra Raspberry Pi sur le réseau local :
Format PDF pratique, avec les 74 commandes à retenir pour maîtriser son Raspberry Pi.
Télécharger maintenant
- RTSP (Real Time Streaming Protocol)
- Intégrer la vidéo streamée dans une page Web avec Python
Alors, voyons maintenant ces deux méthodes en détail :
Méthode 1 : streamer via RTSP
La première méthode pour diffuser notre vidéo est via le protocole RTSP. La bonne nouvelle, c’est que vous n’avez besoin que d’exécuter une seule commande dans le terminal pour streamer ! Cette section couvrira les points suivants :
- Comprendre la commande RTSP
- Lancer notre premier stream de test
Comprendre la commande RTSP
Alors, prenons un moment pour d’abord examiner la commande. Nous la décomposerons par la suite pour faciliter sa compréhension :rpicam-vid -t 2 --inline -o - | cvlc stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8000/}' :demux=h264
La commande rpicam-vid est utilisée pour enregistrer des vidéos à partir de la caméra Pi et les sauvegarder si nécessaire. Voici un découpage de la commande ci-dessus :
- -o – : comme rien n’est mentionné, c’est transmis au flux stdout (ce que nous voulons pour le streaming). Si vous voulez le sauvegarder en tant que fichier, spécifiez le nom du fichier à la place.
- -t 2 : indique le délai avant le début de l’enregistrement vidéo. Nous l’avons réglé à 2 secondes pour l’instant.
Le ‘|’ indique une pause dans la commande. Ensuite, la commande cvlc (VLC Media Player) s’exécute, qui récupère le flux stdout et transmet en direct la vidéo encodée en H264 (c’est le format que la caméra Pi prend en charge) à travers le protocole RTSP sur le port que vous spécifiez (8000 dans ce cas).
Si les commandes Linux ce n’est pas trop votre truc, n’hésitez pas à jeter un œil à cet article qui vous explique les commandes qu’il faut absolument connaître. Je vous donne aussi une antisèche à télécharger pour les avoir toujours sous la main !
Lancer notre premier stream de test
Maintenant, l’exécution de la commande ci-dessus lancera l’enregistrement vidéo et créera un flux RTSP de cette même vidéo. Pour accéder à ce flux, vous aurez besoin de l’adresse IPv4 de votre Pi. Vous pouvez l’obtenir en exécutant ifconfig
sur votre terminal. Vous la trouverez dans la section wlan0 sous inet.
Vous pouvez y accéder depuis le lecteur multimédia VLC installé sur votre PC. Pour y accéder, ouvrez l’application, puis allez à File >> Open Network Stream.
Cela ouvrira une nouvelle fenêtre, où vous êtes invité à entrer l’URL pour le flux réseau. Tapez simplement l’URL suivante :rtsp://<adresse_ip_du_pi>:8000/
Voilà, c’est fait. Il suffit d’attendre quelques secondes pendant le chargement du flux. Ensuite, vous pourrez visualiser le flux de la caméra Pi en temps réel (bien qu’avec un retard d’environ 5 secondes) sur votre ordinateur portable.
Ensuite, nous verrons comment nous pouvons accéder à ce flux depuis une page web en utilisant un simple script Python.
Méthode 2 : streamer dans une page Web avec Python
La méthode précédente nécessitait de disposer du client VLC Media Player pour accéder au flux. Et si nous ne voulons pas d‘une telle dépendance ? C’est ce que cette section abordera. Nous utiliserons un simple script Python qui nous permettra de streamer notre vidéo en temps réel sur une simple page web.
D’abord, jetons un coup d’œil au code Python que nous utiliserons pour ce tutoriel.
Format PDF pratique, avec les 74 commandes à retenir pour maîtriser son Raspberry Pi.
Télécharger maintenant
Le code Python
Le script Python pour streamer une vidéo est partagé ci-dessous. Ce script fait partie des exemples du package officiel PiCamera2.
import io
import logging
import socketserver
from http import server
from threading import Condition
from picamera2 import Picamera2
from picamera2.encoders import JpegEncoder
from picamera2.outputs import FileOutput
# HTML page for the MJPEG streaming demo
PAGE = """\
<html>
<head>
<title>RaspberryTips Pi Cam Stream</title>
</head>
<body>
<h1>Raspberry Tips Pi Camera Live Stream Demo</h1>
<img src="stream.mjpg" width="640" height="480" />
</body>
</html>
"""
# Class to handle streaming output
class StreamingOutput(io.BufferedIOBase):
def __init__(self):
self.frame = None
self.condition = Condition()
def write(self, buf):
with self.condition:
self.frame = buf
self.condition.notify_all()
# Class to handle HTTP requests
class StreamingHandler(server.BaseHTTPRequestHandler):
def do_GET(self):
if self.path == '/':
# Redirect root path to index.html
self.send_response(301)
self.send_header('Location', '/index.html')
self.end_headers()
elif self.path == '/index.html':
# Serve the HTML page
content = PAGE.encode('utf-8')
self.send_response(200)
self.send_header('Content-Type', 'text/html')
self.send_header('Content-Length', len(content))
self.end_headers()
self.wfile.write(content)
elif self.path == '/stream.mjpg':
# Set up MJPEG streaming
self.send_response(200)
self.send_header('Age', 0)
self.send_header('Cache-Control', 'no-cache, private')
self.send_header('Pragma', 'no-cache')
self.send_header('Content-Type', 'multipart/x-mixed-replace; boundary=FRAME')
self.end_headers()
try:
while True:
with output.condition:
output.condition.wait()
frame = output.frame
self.wfile.write(b'--FRAME\r\n')
self.send_header('Content-Type', 'image/jpeg')
self.send_header('Content-Length', len(frame))
self.end_headers()
self.wfile.write(frame)
self.wfile.write(b'\r\n')
except Exception as e:
logging.warning(
'Removed streaming client %s: %s',
self.client_address, str(e))
else:
# Handle 404 Not Found
self.send_error(404)
self.end_headers()
# Class to handle streaming server
class StreamingServer(socketserver.ThreadingMixIn, server.HTTPServer):
allow_reuse_address = True
daemon_threads = True
# Create Picamera2 instance and configure it
picam2 = Picamera2()
picam2.configure(picam2.create_video_configuration(main={"size": (640, 480)}))
output = StreamingOutput()
picam2.start_recording(JpegEncoder(), FileOutput(output))
try:
# Set up and start the streaming server
address = ('', 8000)
server = StreamingServer(address, StreamingHandler)
server.serve_forever()
finally:
# Stop recording when the script is interrupted
picam2.stop_recording()
Au premier coup d’œil, ce code semble beaucoup plus compliqué qu’il ne l’est en réalité. Décortiquons-le en petites parties pour mieux le comprendre :
- La variable PAGE stocke le code HTML de notre page web simple qui sera affichée lorsque le code sera en cours d’exécution.
- La Classe StreamingOutput gère le flux de sortie qui provient de votre caméra Pi.
- La Classe StreamingHandler gère toutes les requêtes HTTP qui arrivent à notre page web. Elle nous permet d’accéder au flux chaque fois que nous ouvrons la page web.
- Enfin, la classe StreamingServer crée un serveur HTTP simple par lequel nous hébergeons notre page web et accédons à notre flux vidéo.
- Le code suivant est le principal extrait de code. Il fait ce qui suit : 1. Configure la caméra Pi avec une résolution spécifique comme nous l’avons fait dans la méthode précédente.
2. Crée une instance de StreamingOutput.
3. Ensuite, nous commençons l’enregistrement sur notre caméra Pi.
4. Après cela, nous mettons en place et créons une instance de StreamingServer.
5. Enfin, nous maintenons le flux en continu indéfiniment à moins qu’il ne soit interrompu.
Si vous débutez avec Raspberry Pi ou Linux, j’ai quelque chose qui peut vous aider !
Téléchargez ma fiche mémo des commandes Linux gratuitement – c’est un guide de référence rapide avec toutes les commandes essentielles dont vous aurez besoin utiliser votre Raspberry Pi. Cliquez ici pour l’obtenir gratuitement !
Démarrage et accès à notre flux Web
Pour démarrer notre flux web, copiez simplement ce code sur votre Pi. Vous pouvez copier et exécuter le code ci-dessus à l’aide d’un éditeur de texte qui dispose d’une interface graphique, comme Geany. Vous pouvez l’exécuter en appuyant sur l’icône d’avion affichée dans la barre de menu supérieure.
Une fois le script en cours d’exécution, visitez http://:8000/
à partir de n’importe quel appareil connecté au même réseau pour accéder à votre flux web.
Notez que le délai de diffusion avec cette méthode est presque inexistant. C’est pratiquement un flux en temps réel de ce que votre caméra capture, ce qui n’était pas le cas avec la méthode RTSP. De plus, vous bénéficiez de beaucoup plus de flexibilité en utilisant Python.
C’est tout pour ce tutoriel.
Format PDF pratique, avec les 74 commandes à retenir pour maîtriser son Raspberry Pi.
Télécharger maintenant
Vous voulez discuter avec d'autres passionnés de Raspberry Pi ? Rejoignez la communauté, partagez vos projets en cours et posez vos questions sur le forum (en anglais).
Comment streamer la caméra d’un Raspberry Pi
Dans ce tutoriel “Comment faire”, nous avons appris à streamer une vidéo depuis notre caméra Raspberry Pi en utilisant deux méthodes populaires : RTSP et par le biais d’un script Python. Maintenant, la question est comment utiliser cela en conditions réelles ?
Il est vraiment facile d’intégrer ces méthodes dans nos projets existants, surtout le script Python du tutoriel. Par exemple, vous pouvez créer un système de sécurité domestique entièrement fonctionnel en modifiant un peu le code et en ajoutant plusieurs caméras autour de votre maison.
De plus, vous pouvez utiliser une application comme ngrok qui vous permet d’accéder à votre flux sur Internet plutôt qu’uniquement sur votre réseau local.
Par conséquent, les possibilités sont infinies. Ce tutoriel fournit les bases nécessaires pour streamer le flux vidéo de votre caméra Pi.
Format PDF pratique, avec les 74 commandes à retenir pour maîtriser son Raspberry Pi.
Télécharger maintenant
Ressources supplémentaires pour votre Raspberry Pi
Initiation au Raspberry Pi en vidéo
Si vous débutez et voulez passer rapidement à la vitesse supérieure, j’ai exactement ce qu’il vous faut.
Regardez ma formation vidéo qui vous aidera à démarrer du bon bien, choisir votre matériel, installer les meilleures applications et vous lancer directement dans vos premiers projets avec mon aide.
Regarder les vidéos dès maintenant
Maîtrisez votre Raspberry Pi en 30 jours
Vous avez besoin de plus ? Si vous êtes à la recherche des meilleures astuces pour devenir expert sur Raspberry Pi, ce livre est fait pour vous. Développez vos compétences sous Linux et pratiquez via de nombreux projets en suivant mes guides étape par étape. 10% de remise aujourd’hui !
Télécharger le livre au format PDF ici
Maîtrisez Python sur Raspberry Pi
Pas besoin d’être un génie pour coder quelques lignes pour votre Raspberry Pi.
Je vous apprends juste ce qu’il faut sur Python afin de réaliser n’importe quel projet. La seconde partie du livre est d’ailleurs consacrée à des exemples de projets où je vous guide pas à pas.
Ne perdez pas de temps, apprenez le strict nécessaire et économisez 10% avec ce lien :
Télécharger maintenant
Autres ressources pour profiter de votre Raspberry Pi
J’ai regroupé toutes mes recommandations de logiciels, sites utiles et de matériel sur cette page de ressources. Je vous invite à la consulter régulièrement pour faire les bons choix et rester à jour.
Visiter les pages ressources