L'API Video Intelligence Streaming est compatible avec les protocoles standards de diffusion en direct comme RTSP, RTMP et HLS. La AIStreamer le pipeline d'ingestion de données se comporte comme un proxy de flux de données, à une connexion gRPC de streaming bidirectionnel.
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.