La API Streaming de Video Intelligence admite protocolos de emisión en directo estándar, como RTSP, RTMP y HLS. La pipeline de ingestión de AIStreamer se comporta como un proxy de streaming, que convierte los protocolos de streaming en directo en una conexión gRPC de streaming bidireccional.
Para admitir protocolos de emisión en directo, la API Video Intelligence usa el framework multimedia abierto GStreamer.
Paso 1: Crea una tubería con nombre
Se crea una tubería con nombre para comunicarse entre GStreamer y el proxy de ingestión de AIStreamer. Los dos procesos se ejecutan en el mismo contenedor Docker.
- path_to_pipe: ruta del archivo en tu entorno local. Por ejemplo, /user/local/Desktop/
- name_of_pipe: nombre de la tubería que proporciones. Por ejemplo,
my-football-game
$ export PIPE_NAME=/path_to_pipe/name_of_pipe $ mkfifo $PIPE_NAME
Ejemplo: /user/local/Desktop/my-football-game
Paso 2: Ejecuta el proxy de ingestión de AIStreamer
Estos ejemplos de C++, que puedes usar, incluyen un único archivo binario que admite todas las funciones. Para compilar los ejemplos, siga estas instrucciones de compilación.
En el siguiente ejemplo se muestra cómo usar el archivo binario desde la línea de comandos.
$ 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
especifica la ruta del archivo JSON que contiene la clave de tu cuenta de servicio.
Puedes encontrar un archivo de configuración de ejemplo ($CONFIG
) en GitHub.
Asegúrate de definir la marca de tiempo de espera correcta en la línea de comandos. Si necesitas transmitir una hora de vídeo, el valor de tiempo de espera debe ser de al menos 3600 segundos.
Paso 3: Ejecuta la canalización de GStreamer
GStreamer admite varios protocolos de streaming en directo, entre los que se incluyen los siguientes:
HTTP Live Streaming (HLS)
Protocolo de streaming en tiempo real (RTSP)
Protocolo en tiempo real (RTP)
Protocolo de mensajería en tiempo real (RTMP)
WebRTC
Emitir con una cámara web
La API Video Intelligence usa la canalización de GStreamer para convertir estos protocolos de streaming en directo en un flujo de vídeo decodificable y escribe el flujo en la canalización con nombre creada en el paso 1.
En los siguientes ejemplos se muestra cómo usar la biblioteca de emisión en directo con los protocolos HLS, RTSP y 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
Protocolo de streaming en tiempo real (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
Protocolo de mensajes en tiempo real (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
Instrucciones de compilación
El ejemplo de binario
se ha creado con Bazel. También se proporciona un ejemplo de Docker
que tiene configuradas todas las dependencias de compilación. Puedes encontrar el archivo binario streaming_client_main
compilado en el directorio $BIN_DIR
de la imagen de Docker.
Para obtener más información sobre cómo usar Docker, consulta el artículo Usar Docker y Kubernetes.
Control de flujo
El servidor de la API Video Intelligence Streaming tiene un control de flujo inherente.
En los dos casos siguientes,StreamingAnnotateVideoRequest
se rechazan las solicitudes y se detienen inmediatamente las conexiones de streaming de gRPC:
El cliente de ingestión de AIStreamer está enviando solicitudes a los servidores de Google con demasiada frecuencia.
El cliente de ingestión de AIStreamer está enviando demasiados datos a los servidores de Google (más de 20 MB por segundo).
Visualizador
El código del visualizador proporcionado en AIStreamer solo debe considerarse como un ejemplo de código. Es posible que el visualizador no sea compatible con el entorno local del usuario. Los usuarios de AIStreamer no deben usar el código de cliente para visualizar los resultados de las anotaciones.