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 :

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 :

Téléchargez mon antisèche !
Format PDF pratique, avec les 74 commandes à retenir pour maîtriser son Raspberry Pi.
Télécharger maintenant
  1. RTSP (Real Time Streaming Protocol)
  2. 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.

Téléchargez mon antisèche !
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.

Téléchargez mon antisèche !
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.

Téléchargez mon antisèche !
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

Comment avez-vous trouvé cet article ?

Cliquez sur une étoile pour noter !

Note moyenne / 5. Nombre de votes :

Aucun vote pour l'instant ! Soyez le premier à évaluer cet article.

Si vous avez aimé cet article ...

Partagez le sur les réseaux

Nous sommes désolés que vous n'ayez pas aimé cet article !

Améliorons cet article !

Comment pouvons-nous améliorer cet article ?


Ce tutoriel ne marche plus à 100%? Prévenez-moi pour que je le mette à jour!

Publications similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *