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.