Diffuser des vidéos en direct

Elle est compatible avec les protocoles standards de diffusion en direct, tels que RTSP, RTMP et HLS. Le pipeline d'ingestion AIStreamer se comporte comme un proxy de streaming, et convertit les protocoles de streaming en direct en connexion gRPC bidirectionnelle en flux continu.

Pour assurer sa compatibilité avec les protocoles de diffusion en direct, Video Intelligence utilise le framework de média ouvert GStreamer.

Étape 1 : Créer un pipeline nommé

Un pipeline nommé est créé pour établir la communication entre GStreamer et le proxy d'ingestion AIStreamer. Les deux processus s'exécutent dans le même conteneur Docker.

  • path_to_pipe : chemin d'accès du fichier dans votre environnement local. Par exemple, /user/local/Desktop/
  • name_of_pipe : nom du pipeline que vous fournissez. Par exemple, my-football-game.
$ export PIPE_NAME=/path_to_pipe/name_of_pipe
$ mkfifo $PIPE_NAME

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

Étape 2 : Exécuter le proxy d'ingestion AIStreamer

Vous pouvez utiliser ces exemples C++, qui incluent un seul fichier binaire compatible avec toutes les fonctionnalités. Pour créer des exemples, suivez ces instructions de création.

L'exemple suivant montre comment utiliser le fichier binaire depuis la ligne de commande.

$ 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 spécifie le chemin d'accès au fichier JSON contenant la clé de votre compte de service.

Vous trouverez un exemple de fichier de configuration $CONFIG sur github.

Assurez-vous de définir le bon indicateur de délai avant expiration dans la ligne de commande. Si vous devez diffuser une heure de vidéo, la valeur du délai avant expiration doit être d'au moins 3 600 secondes.

Étape 3 : Exécuter le pipeline GStreamer

GStreamer est compatible avec plusieurs protocoles de diffusion en direct, y compris, mais sans s'y limiter, les suivants :

  • Diffusion HTTP en direct (HLS)

  • Protocole de diffusion en temps réel (RTSP)

  • Protocole en temps réel (RTP)

  • Protocole de messagerie en temps réel (RTMP)

  • WebRTC

  • Streaming depuis une webcam

L'API Video Intelligence utilise le pipeline GStreamer pour convertir ces protocoles de diffusion en direct en un flux vidéo décodable, et écrit le flux dans le pipeline nommé créé à l'étape 1.

Les exemples suivants montrent comment utiliser la bibliothèque de diffusion en direct à l'aide des protocoles HLS, RTSP et RTMP.

Diffusion HTTP en direct (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

Protocole de diffusion en temps réel (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

Protocole de messagerie en temps réel (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

Instructions de création

L'exemple de fichier binaire est créé à l'aide de Bazel. Un exemple Docker est également fourni. Il contient toutes les dépendances des versions configurées. Vous trouverez le fichier binaire streaming_client_main compilé dans le répertoire $BIN_DIR de l'image Docker.

Pour en savoir plus sur le fonctionnement de Docker, consultez la page Utiliser Docker et Kubernetes.

Contrôle de flux

Le serveur d'API Video Intelligence Streaming dispose d'un contrôle de flux inhérent. Dans les deux cas suivants, les requêtes StreamingAnnotateVideoRequest sont refusées et les connexions gRPC en streaming sont immédiatement interrompues:

  • Le client d'ingestion AIStreamer envoie trop fréquemment des requêtes aux serveurs Google.

  • Le client d'ingestion AIStreamer envoie trop de données aux serveurs Google (plus de 20 Mo par seconde).

Visualiseur

Le code du visualiseur fourni dans AIStreamer ne doit être considéré que comme un exemple de code. Il se peut que le visualiseur ne soit pas compatible avec l'environnement local de l'utilisateur. Les utilisateurs d'AIStreamer ne doivent pas s'appuyer sur le code client pour visualiser les résultats d'annotation.