Istruzioni per lo streaming dei video in diretta

L'API Video Intelligence Streaming supporta protocolli di live streaming standard come RTSP, RTMP e HLS. La pipeline di importazione AIStreamer si comporta come un proxy di streaming, convertendo i protocolli di live streaming in una connessione gRPC di streaming bidirezionale.

Per supportare i protocolli di live streaming, l'API Video Intelligence utilizza il framework multimediale open source GStreamer.

Passaggio 1: crea una named pipe

Viene creata una pipe con nome per comunicare tra GStreamer e il proxy di importazione AIStreamer. I due processi vengono eseguiti all'interno dello stesso container Docker.

  • path_to_pipe: il percorso del file nell'ambiente locale. Ad esempio, /user/local/Desktop/
  • name_of_pipe: il nome della pipe che fornisci. Ad esempio, my-football-game
$ export PIPE_NAME=/path_to_pipe/name_of_pipe
$ mkfifo $PIPE_NAME

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

Passaggio 2: esegui il proxy di importazione AIStreamer

Questi esempi C++, disponibili per l'uso, includono un unico binario che supporta tutte le funzionalità. Per creare gli esempi, segui queste istruzioni di compilazione.

L'esempio seguente mostra come utilizzare il file binario dalla riga di comando.

$ 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 specifica il percorso del file JSON contenente la chiave dell'account di servizio.

Puoi trovare un file di configurazione di esempio, $CONFIG, su GitHub.

Assicurati di impostare il flag di timeout corretto nella riga di comando. Se devi trasmettere in streaming un'ora di video, il valore di timeout deve essere almeno 3600 secondi.

Passaggio 3: esegui la pipeline GStreamer

GStreamer supporta più protocolli di live streaming, tra cui, a titolo esemplificativo:

  • HTTP Live Streaming (HLS)

  • Real-time Streaming Protocol (RTSP)

  • Real-time Protocol (RTP)

  • Real-time Messaging Protocol (RTMP)

  • WebRTC

  • Streaming da webcam

L'API Video Intelligence utilizza la pipeline GStreamer per convertire questi protocolli di live streaming in un flusso video decodificabile e scrive il flusso nella named pipe creata nel passaggio 1.

Gli esempi seguenti mostrano come utilizzare la libreria di live streaming utilizzando i protocolli HLS, RTSP e RTMP.

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

Istruzioni di build

L'esempio binario è creato utilizzando Bazel. Viene fornito anche un esempio Docker con tutte le dipendenze di compilazione configurate. Puoi trovare il binario streaming_client_main compilato nella directory $BIN_DIR dell'immagine Docker.

Per ulteriori informazioni sull'utilizzo di Docker, consulta Utilizzo di Docker e Kubernetes.

Controllo del flusso

Il server API Video Intelligence Streaming ha un controllo del flusso intrinseco. Nei due casi seguenti,StreamingAnnotateVideoRequest le richieste vengono rifiutate e le connessioni di streaming gRPC vengono interrotte immediatamente:

  • Il client di importazione AIStreamer invia richieste ai server Google troppo spesso.

  • Il client di importazione AIStreamer invia troppi dati ai server di Google (oltre 20 MB al secondo).

Visualizzatore

Il codice del visualizzatore fornito in AIStreamer deve essere considerato solo come un esempio di codice. Il visualizzatore potrebbe non essere compatibile con l'ambiente locale dell'utente. Gli utenti di AIStreamer non devono fare affidamento sul codice client per visualizzare i risultati delle annotazioni.