rtsp_video_server_wlan.py

# Dieses Werk ist unter der MIT-Lizenz lizenziert.
# Copyright (c) 2013-2023 OpenMV LLC. Alle Rechte vorbehalten.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# RTSP-Videoserver
#
# Dieses Beispiel zeigt, wie Video über RTSP mit Ihrer OpenMV Cam gestreamt wird.
#
# Sie können ein Programm wie VLC verwenden, um den Videostream anzuzeigen, indem Sie sich mit der
# IP-Adresse der OpenMV Cam verbinden. OpenMV IDE verfügt jedoch über einen integrierten, auf FFPLAY basierenden RTSP-Viewer, den
# Sie über Tools->Video Tools->Play RSTP Stream verwenden können.

import network
import rtsp
import csi
import time

# Wenn Sie VLC unter Linux verwenden, müssen Sie eventuell die live555-Bibliothek installieren, damit die RTSP-Unterstützung
# funktioniert. Wenn Sie Ubuntu verwenden, führen Sie den folgenden Befehl aus:
#
# sudo apt-get install livemedia-utils

# Bezüglich der Latenz bei Programmen wie VLC ist die Standardeinstellung normalerweise so festgelegt, dass 1 Sekunde Video gepuffert wird,
# bevor die Wiedergabe beginnt. Um dies zu verringern, müssen Sie das Netzwerk-Caching reduzieren, das eingestellt werden kann über
# „Mehr Optionen anzeigen“, wenn Sie den Netzwerk-Stream in VLC öffnen. Sie können dies auf etwa 10 ms reduzieren
# um das Video echtzeitfähig zu machen.

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

# Netzwerkschnittstelle einrichten

network_if = network.WLAN(network.STA_IF)
network_if.active(True)
network_if.connect("your-ssid", "your-password")
while not network_if.isconnected():
    print("Trying to connect. Note this may take a while...")
    time.sleep_ms(1000)

# RTSP-Server einrichten

server = rtsp.rtsp_server(network_if)

# Für die folgenden Callback-Funktionen:
#
# `pathname` ist der Name der Stream-Ressource, die der Client anfordert. Sie können dies ignorieren, wenn es nicht
# benötigt wird. Andernfalls können Sie damit bestimmen, welches Bildobjekt zurückgegeben werden soll. Standardmäßig lautet der Pfad
# name "/".
#
# `session` ist eine Zufallszahl, die sich ändert, wenn eine neue Verbindung hergestellt wird. Sie können
# session mit einem Dictionary verwenden, um verschiedene Zugriffe auf denselben Dateinamen zu unterscheiden.

# Die aktuelle FPS verfolgen.
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 pausiert nur lokal. Dies wird nie aufgerufen.
    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)


# Wird jedes Mal aufgerufen, wenn ein neues Bild benötigt wird.
def image_callback(pathname, session):
    global csi0
    global clock
    img = csi0.snapshot()
    # Bild markieren und/oder verschiedene Dinge tun.
    print(clock.fps())
    clock.tick()
    return img


# Der Stream kehrt nicht zurück. Er ruft `image_callback` auf, wenn er ein Bildobjekt zum Senden benötigt
# an den entfernten RTSP-Client, der sich mit dem Server verbindet.

server.stream(image_callback, quality=70)

results matching ""

    No results matching ""