Como fazer stream de vídeos em direto

A Video Intelligence Streaming API suporta protocolos de streaming em direto padrão, como RTSP, RTMP e HLS. O pipeline de carregamento do AIStreamer comporta-se como um proxy de streaming, convertendo protocolos de streaming em direto numa ligação gRPC de streaming bidirecional.

Para suportar protocolos de streaming em direto, a Video Intelligence API usa a framework de multimédia aberta GStreamer.

Passo 1: crie um canal anónimo

É criado um canal anónimo para comunicar entre o GStreamer e o proxy de carregamento do AIStreamer. Os dois processos estão a ser executados no mesmo contentor do Docker.

  • path_to_pipe: caminho do ficheiro no seu ambiente local. Por exemplo, /user/local/Desktop/
  • name_of_pipe: nome do tubo que fornece. Por exemplo, my-football-game
$ export PIPE_NAME=/path_to_pipe/name_of_pipe
$ mkfifo $PIPE_NAME

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

Passo 2: execute o proxy de carregamento do AIStreamer

Estes exemplos de C++, disponíveis para sua utilização, incluem um binário único que suporta todas as funcionalidades. Para criar os exemplos, siga estas instruções de criação.

O exemplo seguinte mostra como usar o ficheiro binário a partir da linha 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 o caminho do ficheiro JSON que contém a chave da sua conta de serviço.

Pode encontrar um ficheiro de configuração de exemplo: $CONFIG em github.

Certifique-se de que define a flag de tempo limite correta na linha de comandos. Se precisar de fazer streaming de 1 hora de vídeo, o valor de tempo limite deve ser de, pelo menos, 3600 segundos.

Passo 3: execute o pipeline GStreamer

O GStreamer suporta vários protocolos de streaming em direto, incluindo, entre outros:

  • HTTP Live Streaming (HLS)

  • Protocolo de streaming em tempo real (RTSP)

  • Protocolo em tempo real (RTP)

  • Protocolo de mensagens em tempo real (RTMP)

  • WebRTC

  • Streaming a partir de uma câmara

A Video Intelligence API usa o pipeline GStreamer para converter a partir destes protocolos de streaming em direto para uma stream de vídeo descodificável e escreve a stream no pipe com nome criado no passo 1.

Os exemplos seguintes demonstram como usar a biblioteca de streaming em direto com os protocolos 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

Protocolo de streaming em tempo 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 mensagens em tempo 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

Instruções de compilação

O exemplo binário é criado com o Bazel. Também é fornecido um exemplo do Docker com todas as dependências de compilação configuradas. Pode encontrar o ficheiro binário streaming_client_main compilado no diretório $BIN_DIR da imagem do Docker.

Para mais informações sobre a utilização do Docker, consulte o artigo Usar o Docker e o Kubernetes.

Controlo do fluxo

O servidor da API Video Intelligence Streaming tem um controlo de fluxo inerente. Nos dois casos seguintes,StreamingAnnotateVideoRequest os pedidos são rejeitados e as ligações de streaming gRPC são interrompidas imediatamente:

  • O cliente de carregamento do AIStreamer está a enviar pedidos aos servidores Google com demasiada frequência.

  • O cliente de carregamento do AIStreamer está a enviar demasiados dados para os servidores da Google (mais de 20 MB por segundo).

Vídeo com recursos visuais

O código do visualizador fornecido no AIStreamer deve ser considerado apenas como um exemplo de código. O visualizador pode não ser compatível com o ambiente local do utilizador. Os utilizadores do AIStreamer não devem basear-se no código do cliente para visualizar os resultados das anotações.