API de Meet Media: Guía de inicio rápido del cliente de referencia de C++

En esta página, se explica cómo configurar y ejecutar una muestra con la implementación de cliente de referencia de C++. Para obtener información sobre el cliente de TypeScript, consulta la Guía de inicio rápido del cliente de referencia de TypeScript.

Requisitos previos

Para ejecutar esta guía de inicio rápido, necesitas los siguientes requisitos previos:

Compila el cliente C++

  1. La implementación de C++ se compila con Bazel. Sin embargo, la biblioteca de WebRTC de C++ (libwebrtc) no tiene una compilación de Bazel que funcione, por lo que primero debes compilar esa biblioteca siguiendo las instrucciones de la documentación de WebRTC.

    A continuación, se muestra una versión abreviada de lo que se explica en los documentos de WebRTC:

    $ 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
    

    Nota: El commit b00c469cad3f8c926fcf81ded90b90b6e1e62b9c es la versión más reciente que funciona con nuestras compilaciones debido a las actualizaciones de la cadena de herramientas y abseil. Esto podría cambiar en el futuro. Este conjunto de comandos funciona ahora, pero se debe consultar el vínculo proporcionado en caso de que cambien las herramientas subyacentes. Si compilas para una variante de Debian o Ubuntu Linux que no sea x64, es posible que la configuración de los requisitos previos sea diferente.

  2. Después de compilar libwebrtc, actualiza el archivo WORKSPACE para que apunte al directorio webrtc-checkout. Actualiza la ruta de acceso webrtc_path cerca de la parte superior de ese archivo:

    webrtc_path = "/usr/local/myuser/webrtc-checkout/" 
    
  3. Usa Bazel para compilar el cliente C++:

    $ bazel build //cpp/...
    

Nota: Debes usar Bazel 7.4.1. Si tienes versiones más recientes de Bazel instaladas, puedes ejecutarlo con bazel-7.4.1 build/run/test ....

  1. De manera opcional, ejecuta las siguientes pruebas:

    $ bazel test //cpp/...
    

Genera tokens de OAuth

Para conectarse a la API de Meet Media, tu app debe usar OAuth para generar tokens de acceso. Para obtener más información sobre cómo acceder a las APIs de Google con OAuth, consulta Usa OAuth 2.0 para acceder a las APIs de Google.

Puedes usar OAuth 2.0 Playground para generar tokens. Cuando uses la zona de pruebas, asegúrate de lo siguiente:

  • Usa el ID de cliente y las credenciales secretas de tu proyecto de Cloud.
  • Solicita los permisos correctos.
  • Accede a una Cuenta de Google y acepta el acceso.

Cuando termines, haz clic en el botón Exchange authorization code for tokens y copia el token de acceso generado.

Cómo iniciar una reunión

Inicia una reunión con la misma cuenta de usuario que usaste para generar el token de OAuth. Copia el código de la reunión. Ya puedes ejecutar los samples.

Apps de ejemplo

El repositorio de GitHub ofrece muestras para recibir metadatos de participantes y contenido multimedia de una reunión.

Estos samples recopilan datos durante un período especificado (el valor predeterminado es de 3 segundos) y escriben los datos recopilados en archivos.

Los archivos de audio están en formato PCM16. Los archivos de video están en formato YUV420p. Estos archivos se pueden reproducir con una biblioteca como FFmpeg.

Debido a que las resoluciones de video pueden cambiar durante una reunión, los samples incluyen la resolución en los nombres de los archivos de video.

Los archivos de metadatos de los participantes serán archivos de texto legibles por humanos.

Ejemplo de contenido multimedia de un solo usuario

La muestra de contenido multimedia para un solo usuario es una app básica que se enfoca en recopilar audio y video. La muestra no determina qué participante creó los datos de audio y video. Por lo tanto, usar esta muestra en una reunión con más de un participante podría generar un resultado dañado.

Para ejecutar la muestra de contenido multimedia de un solo usuario, ejecuta lo siguiente:

Linux

$ bazel run cpp/samples:single_user_media_sample -- \
    --meeting_space_id MEETING_SPACE_ID \
    --oauth_token OAUTH_TOKEN

De forma predeterminada, se guarda un solo archivo de audio en /tmp/test_output_audio.pcm.

Debido a que las transmisiones de video pueden cambiar de resolución durante una reunión, es posible que se creen varios archivos de video. Los nombres de los archivos de video incluirán un contador incremental y la resolución de ese archivo. Por ejemplo, si la resolución de la transmisión de video cambia de 320 x 180 a 240 x 135 y, luego, vuelve a 320 x 180, se crearán los siguientes archivos de video:

  • /tmp/test_output_video_0_320x180.pcm
  • /tmp/test_output_video_1_240x135.pcm
  • /tmp/test_output_video_2_320x180.pcm

Usa FFmpeg para reproducir archivos de salida en Linux y Mac (opcional)

FFmpeg se puede usar para reproducir archivos de audio y video creados. Comandos de ejemplo:

Linux y 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

Opciones

Puedes especificar estas opciones cuando ejecutas los ejemplos:

Opción Descripción
--output_file_prefix PREFIX Especifica el prefijo para los archivos de salida. La configuración predeterminada es /tmp_test_output_.
--collection_duration DURATION Especifica durante cuánto tiempo se recopilará el contenido multimedia. La configuración predeterminada es 30s.
--join_timeout TIMEOUT Especifica cuánto tiempo esperar para que la app se una a la conferencia. La configuración predeterminada es 2m.
--meet_api_url URL Especifica la URL de la API de Meet Media. La configuración predeterminada es https://meet.googleapis.com/v2alpha/.