Esta página explica como configurar e executar um exemplo usando a implementação de cliente de referência em C++. Para saber mais sobre o cliente TypeScript, consulte o Guia introdutório do cliente de referência do TypeScript.
Pré-requisitos
Para executar este guia de início rápido, você precisa dos seguintes pré-requisitos:
- Você clonou o repositório do GitHub.
- Bazel 7.4.1.
- Um projeto do Google Cloud.
- Uma conta do Google Workspace com o Google Meet ativado.
Criar o cliente C++
A implementação em C++ é criada com o Bazel. No entanto, a biblioteca C++ WebRTC (libwebrtc) não tem um build do Bazel funcional. Portanto, você precisa criar essa biblioteca primeiro seguindo as instruções em documentação do WebRTC.
Confira a seguir uma versão abreviada do que é explicado nos documentos do WebRTC (link em inglês):
$ cd ~ $ mkdir src $ cd src $ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git $ export PATH=~/src/depot_tools:$PATH $ mkdir webrtc-checkout $ cd webrtc-checkout $ fetch --nohooks webrtc $ cd src $ # Latest known version to work with our builds $ git checkout b00c469cad3f8c926fcf81ded90b90b6e1e62b9c $ cd .. $ gclient sync $ mv src webrtc $ cd webrtc $ ./build/install-build-deps.sh $ gn gen out/Default --args='is_debug=false use_custom_libcxx=false rtc_include_tests=false rtc_build_examples=false dcheck_always_on=true rtc_use_x11=false use_rtti=true' $ ninja -C out/Default
Observação: o commit
b00c469cad3f8c926fcf81ded90b90b6e1e62b9c
é a versão mais recente conhecida para funcionar com nossos builds devido às atualizações do toolchain e do abseil. Isso pode mudar no futuro. Esse conjunto de comandos funciona agora, mas o link fornecido precisa ser mencionado caso a ferramenta seja alterada. Se você estiver criando para uma variante do Debian ou Ubuntu Linux que não seja x64, a configuração de pré-requisito pode ser diferente.Depois de criar o libwebrtc, atualize o arquivo
WORKSPACE
para apontar para o diretóriowebrtc-checkout
. Atualize o caminhowebrtc_path
na parte de cima do arquivo:webrtc_path = "/usr/local/myuser/webrtc-checkout/"
Use o Bazel para criar o cliente C++:
$ bazel build //cpp/...
Observação: use o Bazel 7.4.1. Se você tiver versões mais recentes do Bazel instaladas, poderá executá-lo usando
bazel-7.4.1 build/run/test ...
Opcionalmente, execute os testes:
$ bazel test //cpp/...
Gerar tokens OAuth
Para se conectar à API Meet Media, seu app precisa usar o OAuth para gerar tokens de acesso. Para saber mais sobre como acessar as APIs do Google com o OAuth, consulte Como usar o OAuth 2.0 para acessar as APIs do Google.
Você pode usar o OAuth 2.0 Playground para gerar tokens. Ao usar o playground, faça o seguinte:
- Use o ID do cliente e as credenciais secretas do projeto da nuvem.
- Solicite os escopos corretos.
- Faça login em uma Conta do Google e aceite o acesso.
Quando terminar, clique no botão Exchange authorization code for tokens
e
copie o token de acesso gerado.
Iniciar uma reunião
Iniciar uma reunião usando a mesma conta de usuário que você usou para gerar o token OAuth. Copie o código da reunião. Agora você já pode executar as amostras.
Apps de exemplo
O repositório do GitHub oferece exemplos para receber metadados de mídia e participantes de uma reunião.
Essas amostras coletam dados por um período especificado (o padrão é 3 segundos) e gravam os dados coletados em arquivos.
Os arquivos de áudio estão no formato PCM16. Os arquivos de vídeo estão no formato YUV420p. Esses arquivos podem ser reproduzidos usando uma biblioteca como o FFmpeg.
Como as resoluções de vídeo podem mudar durante uma reunião, as amostras incluem a resolução nos nomes dos arquivos de vídeo.
Os arquivos de metadados do participante serão arquivos de texto legíveis por humanos.
Exemplo de mídia de usuário único
O exemplo de mídia de usuário único é um app básico que se concentra na coleta de áudio e vídeo. A amostra não determina qual participante criou os dados de áudio e vídeo. Portanto, o uso dessa amostra em uma reunião com mais de um participante pode resultar em uma saída corrompida.
Para executar a amostra de mídia de um único usuário, execute:
Linux
$ bazel run cpp/samples:single_user_media_sample -- \
--meeting_space_id MEETING_SPACE_ID \
--oauth_token OAUTH_TOKEN
Por padrão, um único arquivo de áudio é salvo em /tmp/test_output_audio.pcm
.
Como as transmissões de vídeo podem mudar de resolução durante uma reunião, vários arquivos de vídeo podem ser criados. Os nomes dos arquivos de vídeo vão incluir um contador de incremento e a resolução desse arquivo. Por exemplo, se a resolução do stream de vídeo mudar de 320 x 180 para 240 x 135 e depois voltar para 320 x 180, os seguintes arquivos de vídeo serão criados:
/tmp/test_output_video_0_320x180.pcm
/tmp/test_output_video_1_240x135.pcm
/tmp/test_output_video_2_320x180.pcm
(Opcional) Usar o FFmpeg para reproduzir arquivos de saída no Linux e Mac
O FFmpeg pode ser usado para reproduzir arquivos de áudio e vídeo criados. Exemplos de comandos:
Linux e Mac
# Audio
$ ffplay -f s16le -ar 48k -af aformat=channel_layouts=mono \
/tmp/test_output_audio.pcm
# Video
#
# `video_size` must match the resolution in the video filename (320x180 in
# this example).
$ ffplay -f rawvideo -pixel_format yuv420p -video_size 320x180 \
/tmp/test_output_video_0_320x180.yuv
Opções
É possível especificar estas opções ao executar os exemplos:
Opção | Descrição |
---|---|
--output_file_prefix PREFIX |
Especifica o prefixo para arquivos de saída. O valor padrão é /tmp_test_output_ . |
--collection_duration DURATION |
Especifique por quanto tempo a mídia será coletada. O valor padrão é 30s . |
--join_timeout TIMEOUT |
Especifique o tempo de espera para que o app participe da conferência. O valor padrão é 2m . |
--meet_api_url URL |
Especifique o URL da API Meet Media. O valor padrão é https://meet.googleapis.com/v2alpha/ . |