Livevideos streamen

Die Video Intelligence Streaming API unterstützt Live-Streaming-Standardprotokolle wie RTSP, RTMP und HLS. Die Aufnahmepipeline AIStreamer verhält sich wie ein Streaming-Proxy und wandelt von Live-Streaming-Protokollen in bidirektionale Streaming-gRPC-Verbindungen um.

Video Intelligence nutzt das offene Medien-Framework GStreamer, um Live-Streaming-Protokolle zu unterstützen.

Schritt 1: Eine Named Pipe erstellen

Es wird eine Named Pipe zur Kommunikation zwischen GStreamer und dem Aufnahme-Proxy von AIStreamer erstellt. Die beiden Prozesse werden im gleichen Docker-Container ausgeführt.

  • path_to_pipe: Dateipfad in Ihrer lokalen Umgebung. Beispiel: /user/local/Desktop/
  • name_of_pipe: Name der von Ihnen bereitgestellten Pipe. z. B. my-football-game.
$ export PIPE_NAME=/path_to_pipe/name_of_pipe
$ mkfifo $PIPE_NAME

Beispiel: /user/local/Desktop/my-football-game

Schritt 2: Aufnahme-Proxy von AIStreamer ausführen

Diese C ++-Beispiele, die Ihnen zur Verfügung stehen, enthalten eine einzelne Binärdatei, die alle Funktionen unterstützt. Folgen Sie zum Erstellen der Beispiele diese Erstellungsanleitung.

Im folgenden Beispiel wird gezeigt, wie das Binärprogramm über die Befehlszeile verwendet wird.

$ export GOOGLE_APPLICATION_CREDENTIALS=/path_to_credential/credential_json
$ export CONFIG=/path_to_config/config_json
$ export PIPE_NAME=/path_to_pipe/name_of_pipe
$ export TIMEOUT=3600
$ ./streaming_client_main --alsologtostderr --endpoint "dns:///alpha-videointelligence.googleapis.com" \
      --video_path=$PIPE_NAME --use_pipe=true --config=$CONFIG --timeout=$TIMEOUT

$GOOGLE_APPLICATION_CREDENTIALS gibt den Dateipfad der JSON-Datei an, die den Dienstkontoschlüssel enthält.

Eine Beispielkonfigurationsdatei finden Sie unter $CONFIG auf github.

Achten Sie darauf, in der Befehlszeile den richtigen Timeout-Flag festzulegen. Wenn Sie eine Stunde Video streamen müssen, sollte das Zeitlimit mindestens 3.600 Sekunden betragen.

Schritt 3: GStreamer-Pipeline ausführen

GStreamer unterstützt mehrere Live-Streaming-Protokolle, unter anderem:

  • HTTP Live Streaming (HLS)

  • Real-Time Streaming Protocol (RTSP)

  • Real-Time Protocol (RTP)

  • Real-Time Messaging Protocol (RTMP)

  • WebRTC

  • Streaming von einer Webcam

Die Video Intelligence-API nutzt die Pipeline von GStreamer, um diese Live-Streaming-Protokolle in einen decodierbaren Videostream umzuwandeln, und schreibt den Stream in die Named Pipe, die in Schritt 1 erstellt wurde.

Die folgenden Beispiele zeigen, wie die Livestreaming-Bibliothek mit HLS-, RTSP- und RTMP-Protokollen verwendet wird.

HTTP Live Streaming (HLS)

$ export PIPE_NAME=/path_to_pipe/name_of_pipe
$ export HLS_SOURCE=http://abc.def/playlist.m3u8
$ gst-launch-1.0 -v souphttpsrc location=$HLS_SOURCE ! hlsdemux ! filesink location=$PIPE_NAME

Real-Time Streaming Protocol (RTSP)

$ export PIPE_NAME=/path_to_pipe/name_of_pipe
$ export RTSP_SOURCE=rtsp://ip_addr:port/stream
$ gst-launch-1.0 -v rtspsrc location=$RTSP_SOURCE ! rtpjitterbuffer ! rtph264depay \
      ! h264parse ! flvmux ! filesink location=$PIPE_NAME

Real-Time Message Protocol (RTMP)

$ export PIPE_NAME=/path_to_pipe/name_of_pipe
$ export RTMP_SOURCE=rtmp://host/app/stream
$ gst-launch-1.0 -v rtmpsrc location=$RTMP_SOURCE ! flvdemux ! flvmux ! filesink location=$PIPE_NAME

Anweisungen erstellen

Das Beispielbinärprogramm wird mit Bazel erstellt. Außerdem steht ein Docker-Beispiel zur Verfügung, das alle konfigurierten Build-Abhängigkeiten umfasst. Sie finden die kompilierte streaming_client_main-Binärdatei im Verzeichnis $BIN_DIR des Docker-Images.

Weitere Informationen zur Verwendung von Docker finden Sie unter Docker und Kubernetes verwenden.

Ablaufsteuerung

Der Video Intelligence Streaming API-Server verfügt über eine eigene Ablaufsteuerung. In den folgenden beiden Fällen werden StreamingAnnotateVideoRequest-Anfragen abgelehnt und gRPC-Streamingverbindungen sofort beendet:

  • Der Aufnahmeclient für den Traffic des E-Mail-Anbieters sendet zu häufig Anfragen an die Google-Server.

  • Der Aufnahmeclient von AIStreamer sendet zu viele Daten an Google-Server (über 20 MB pro Sekunde).

Visualisierer

Der in AIStreamer bereitgestellte Visualisierungscode sollte nur als Codebeispiel betrachtet werden. Die Visualisierung ist möglicherweise nicht mit der lokalen Umgebung des Nutzers kompatibel. Für die Verwendung von AIStreamer sollten Nutzer nicht den Clientcode verwenden, um Annotationsergebnisse zu visualisieren.