A API de streaming do Video Intelligence oferece suporte a protocolos padrão de transmissão ao vivo, como RTSP, RTMP e HLS. O pipeline de processamento do AIStreamer se comporta como um proxy de streaming, convertendo protocolos de transmissão ao vivo em conexão gRPC de streaming bidirecional.
Para oferecer suporte a protocolos de transmissão ao vivo, o Video Intelligence usa o framework de mídia aberta do GStreamer.
Etapa 1: criar um pipe nomeado
Um pipe nomeado é criado para se comunicar entre o proxy de processamento do GStreamer do AIStreamer. Os dois processos são executados no mesmo contêiner do Docker.
- path_to_pipe: caminho do arquivo no ambiente local. Por exemplo, /user/local/Desktop/
- name_of_pipe: nome da barra vertical fornecido. Por exemplo,
my-football-game
$ export PIPE_NAME=/path_to_pipe/name_of_pipe $ mkfifo $PIPE_NAME
Exemplo: /user/local/Desktop/my-football-game
Etapa 2: executar o proxy de processamento do AIStreamer
Esses exemplos de C++, disponíveis para seu uso, incluem um único binário compatível com todos os recursos. Para criar os exemplos, siga estas instruções de compilação.
O exemplo a seguir mostra como usar o binário na linha de 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
especifica o caminho do arquivo JSON que contém a chave da conta de serviço.
É possível encontrar um exemplo de arquivo de configuração $CONFIG
em github.
Certifique-se de definir a sinalização de tempo limite correto na linha de comando. Se você precisar fazer o streaming de uma hora de vídeo, o valor do tempo limite deve ser de pelo menos 3.600 segundos.
Etapa 3: executar o pipeline do GStreamer
O GStreamer é compatível com vários protocolos de transmissão ao vivo, incluindo entre outros:
HTTP Live Streaming (HLS)
Real-time Streaming Protocol (RTSP)
Real-time Protocol (RTP)
Real-time Messaging Protocol (RTMP)
WebRTC
Streaming pela webcam
A API Video Intelligence usa o pipeline GStreamer para converter esses protocolos de transmissão ao vivo em um stream de vídeo decodificável e grava o stream no pipe nomeado criado na Etapa 1.
Os exemplos a seguir demonstram como usar a biblioteca de transmissão ao vivo usando 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
Real-time Streaming Protocol (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
Real-time Message Protocol (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
Criar instruções
O exemplo binário é criado com o Bazel. Também é fornecido um exemplo do Docker que tenha todas as dependências de criação configuradas. Você pode encontrar o binário streaming_client_main
compilado no diretório $BIN_DIR
da imagem do Docker.
Para mais informações sobre o uso do Docker, consulte Como usar o Docker e o Kubernetes.
Controle de fluxo
O servidor da API de streaming do Video Intelligence conta com controle de fluxo.
Nos dois casos a seguir, as solicitações StreamingAnnotateVideoRequest
são rejeitadas e as conexões de streaming do gRPC são interrompidas imediatamente:
O cliente de processamento do AIStreamer está enviando solicitações aos servidores do Google com muita frequência.
O cliente de processamento do AIStreamer está enviando muitos dados aos servidores do Google (além de 20 Mbytes por segundo).
Visualizador
O código do visualizador fornecido no AIStreamer só deve ser considerado como um exemplo de código. O visualizador não pode ser compatível com o ambiente local do usuário. Os usuários do AIStreamer não devem confiar no código do cliente para visualizar os resultados da anotação.