rtsp_video_server_lan.py

# Questo lavoro è concesso in licenza MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Tutti i diritti riservati.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Server video RTSP
#
# Questo esempio mostra come trasmettere video in streaming via RTSP con la tua OpenMV Cam.
#
# Puoi usare un programma come VLC per visualizzare lo stream video connettendoti
# all'indirizzo IP della OpenMV Cam. Tuttavia, OpenMV IDE include un visualizzatore RTSP basato su FFPLAY che
# puoi usare andando su Tools->Video Tools->Play RSTP Stream.

import network
import rtsp
import csi
import time

# Se usi VLC su Linux potresti dover installare la libreria live555 affinché il supporto RTSP
# funzioni. Se usi Ubuntu, esegui il comando seguente:
#
# sudo apt-get install livemedia-utils

# Per quanto riguarda la latenza su programmi come VLC, il valore predefinito è tipicamente impostato per bufferizzare 1 secondo di video
# prima della riproduzione. Per ridurla è necessario ridurre il caching di rete, che può essere impostato usando
# "mostra più opzioni" quando apri lo stream di rete in VLC. Puoi ridurlo a circa 10ms
# per rendere il video in tempo reale.

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

# Configurazione dell'interfaccia di rete

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

# Configurazione del server RTSP

server = rtsp.rtsp_server(network_if)

# Per le funzioni di callback seguenti:
#
# `pathname` è il nome della risorsa dello stream richiesta dal client. Puoi ignorarlo se non è
# necessario. Altrimenti, puoi usarlo per determinare quale oggetto immagine restituire. Per impostazione predefinita il percorso
# sarà "/".
#
# `session` è un numero casuale che cambia quando viene stabilita una nuova connessione. Puoi usarlo
# insieme a un dizionario per distinguere i diversi accessi allo stesso nome di file.

# Tieni traccia degli FPS correnti.
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 mette in pausa solo localmente. Questa funzione non viene mai chiamata.
    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)


# Chiamata ogni volta che è necessario un nuovo fotogramma.
def image_callback(pathname, session):
    global csi0
    global clock
    img = csi0.snapshot()
    # Contrassegna l'immagine e/o esegue varie operazioni.
    print(clock.fps())
    clock.tick()
    return img


# Lo streaming non ritorna. Chiamerà `image_callback` quando ha bisogno di ottenere un oggetto immagine da inviare
# al client rtsp remoto connesso al server.

server.stream(image_callback, quality=70)

results matching ""

    No results matching ""