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 führt Konvertierungen von Live-Streaming-Protokollen in bidirektionale gestreamte gRPC-Verbindungen durch.
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.