Come riprodurre in streaming i video dal vivo

L'API Video Intelligence Streaming supporta protocolli standard per il live streaming come RTSP, RTMP e HLS. La pipeline di importazione di AIStreamer si comporta come un proxy per i flussi di dati, passando dai protocolli di live streaming a una connessione gRPC per lo streaming bidirezionale.

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

Passaggio 1: crea una pipeline denominata

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

  • path_to_pipe: percorso file nel tuo ambiente locale. Ad esempio, /user/local/Desktop/
  • name_of_pipe: nome della barra verticale che specifichi. 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 di AIStreamer

Questi esempi di C++, disponibili per il tuo utilizzo, includono un singolo programma binario che supporta tutte le funzionalità. Per creare gli esempi, segui queste istruzioni per la build.

L'esempio seguente mostra come utilizzare il programma 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 video di 1 ora, il valore di timeout deve essere di almeno 3600 secondi.

Passaggio 3: esegui la pipeline GStreamer

GStreamer supporta diversi protocolli di live streaming inclusi, a titolo esemplificativo:

  • Live streaming HTTP (HLS)

  • RTSP (Real-Time Streaming Protocol)

  • Real-Time Protocol (RTP)

  • RTMP (Real-Time Messaging Protocol)

  • WebRTC

  • Streaming da webcam

L'API Video Intelligence utilizza la pipeline GStreamer per convertire questi protocolli di live streaming in uno stream video decodificabile e lo scrive nella pipeline denominata creata nel passaggio 1.

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

Live streaming HTTP (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

RTSP (Real-Time Streaming Protocol)

$ 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

RTMP (Real-Time Message Protocol)

$ 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 per la creazione

L'esempio binario è stato creato utilizzando Bazel. Viene fornito anche un esempio di Docker in cui sono configurate tutte le dipendenze di build. Puoi trovare il programma binario streaming_client_main compilato nella directory $BIN_DIR dell'immagine Docker.

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

Controllo del flusso

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

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

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

Visualizzatore

Il codice del visualizzatore fornito in AIStreamer deve essere considerato solo come 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 dell'annotazione.