rtsp_video_server_lan.py

# Ce travail est publié sous licence MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Tous droits réservés.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Serveur vidéo RTSP
#
# Cet exemple montre comment diffuser de la vidéo via RTSP avec votre caméra OpenMV.
#
# Vous pouvez utiliser un programme comme VLC pour visualiser le flux vidéo en vous connectant à
# l'adresse IP de la caméra OpenMV. Cependant, l'IDE OpenMV intègre un lecteur RTSP basé sur FFPLAY que
# vous pouvez utiliser via Tools->Video Tools->Play RSTP Stream.

import network
import rtsp
import csi
import time

# Si vous utilisez VLC sous Linux, vous devrez peut-être installer la bibliothèque live555 pour que la prise en charge de RTSP
# fonctionne. Si vous utilisez Ubuntu, exécutez la commande suivante :
#
# sudo apt-get install livemedia-utils

# Concernant la latence sur des programmes comme VLC, la mise en mémoire tampon par défaut est généralement d'1 seconde de vidéo
# avant la lecture. Pour la réduire, vous devez diminuer la mise en cache réseau, réglable via
# "afficher plus d'options" lorsque vous ouvrez le flux réseau dans VLC. Vous pouvez la réduire à environ 10 ms
# pour obtenir une vidéo en temps réel.

csi0 = csi.CSI(stream=False)
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.VGA)

# Configurer l'interface réseau

network_if = network.LAN()
network_if.active(True)
network_if.ifconfig("dhcp")

# Configurer le serveur RTSP

server = rtsp.rtsp_server(network_if)

# Pour les fonctions de rappel (callback) ci-dessous :
#
# `pathname` est le nom de la ressource de flux demandée par le client. Vous pouvez l'ignorer si ce n'est pas
# nécessaire. Sinon, vous pouvez l'utiliser pour déterminer quel objet image renvoyer. Par défaut, le
# nom du chemin sera "/".
#
# `session` est un nombre aléatoire qui change à chaque nouvelle connexion établie. Vous pouvez utiliser
# session avec un dictionnaire pour distinguer les différents accès au même nom de fichier.

# Suivre le FPS actuel.
clock = time.clock()


def setup_callback(pathname, session):
    print('Opening "%s" in session %d' % (pathname, session))


def play_callback(pathname, session):
    global clock
    clock.reset()
    clock.tick()
    print('Playing "%s" in session %d' % (pathname, session))


def pause_callback(pathname, session):  # VLC ne met en pause que localement. Ceci n'est jamais appelé.
    print('Pausing "%s" in session %d' % (pathname, session))


def teardown_callback(pathname, session):
    print('Closing "%s" in session %d' % (pathname, session))


server.register_setup_cb(setup_callback)
server.register_play_cb(play_callback)
server.register_pause_cb(pause_callback)
server.register_teardown_cb(teardown_callback)


# Appelé chaque fois qu'une nouvelle image est nécessaire.
def image_callback(pathname, session):
    global csi0
    global clock
    img = csi0.snapshot()
    # Annoter l'image et/ou effectuer diverses opérations.
    print(clock.fps())
    clock.tick()
    return img


# Stream ne retourne jamais. Il appellera `image_callback` lorsqu'il aura besoin d'obtenir un objet image à envoyer
# au client rtsp distant connecté au serveur.

server.stream(image_callback, quality=70)

results matching ""

    No results matching ""