API Meet Media: guide de démarrage rapide du client de référence C++

Cette page explique comment configurer et exécuter un exemple à l'aide de l'implémentation client de référence en C++. Pour en savoir plus sur le client TypeScript, consultez le tutoriel de démarrage rapide du client de référence TypeScript.

Prérequis

Pour exécuter ce guide de démarrage rapide, vous devez disposer des conditions préalables suivantes:

Compiler le client C++

  1. L'implémentation C++ est compilée avec Bazel. Toutefois, la bibliothèque WebRTC C++ (libwebrtc) ne dispose pas d'un build Bazel fonctionnel. Vous devez donc d'abord compiler cette bibliothèque en suivant les instructions des documents WebRTC.

    Voici une version abrégée de ce qui est expliqué dans la documentation 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
    

    Remarque: Le commit b00c469cad3f8c926fcf81ded90b90b6e1e62b9c est la dernière version connue compatible avec nos builds en raison des mises à jour de la chaîne d'outils et d'Abseil. Cette situation est susceptible d'évoluer à l'avenir. Cet ensemble de commandes fonctionne actuellement, mais vous devez consulter le lien fourni au cas où les outils sous-jacents changeraient. Si vous effectuez la compilation pour une variante Linux Debian ou Ubuntu non x64, la configuration préalable peut être différente.

  2. Après avoir compilé libwebrtc, mettez à jour votre fichier WORKSPACE pour qu'il pointe vers votre répertoire webrtc-checkout. Mettez à jour le chemin d'accès webrtc_path en haut de ce fichier:

    webrtc_path = "/usr/local/myuser/webrtc-checkout/" 
    
  3. Utilisez Bazel pour compiler le client C++:

    $ bazel build //cpp/...
    

Remarque: Vous devez utiliser Bazel 7.4.1. Si vous avez installé des versions plus récentes de Bazel, vous pouvez l'exécuter à l'aide de bazel-7.4.1 build/run/test ....

  1. Vous pouvez éventuellement exécuter les tests:

    $ bazel test //cpp/...
    

Générer des jetons OAuth

Pour se connecter à l'API Meet Media, votre application doit utiliser OAuth pour générer des jetons d'accès. Pour en savoir plus sur l'accès aux API Google avec OAuth, consultez Utiliser OAuth 2.0 pour accéder aux API Google.

Vous pouvez utiliser OAuth 2.0 Playground pour générer des jetons. Lorsque vous utilisez Playground, assurez-vous de:

  • Utilisez votre ID client et vos identifiants secrets issus de votre projet cloud.
  • Demandez les niveaux d'accès appropriés.
  • Connectez-vous à un compte Google et acceptez l'accès.

Une fois l'opération terminée, cliquez sur le bouton Exchange authorization code for tokens et copiez le jeton d'accès généré.

Démarrer une réunion

Lancez une réunion avec le même compte utilisateur que celui que vous avez utilisé pour générer le jeton OAuth. Copiez le code de la réunion. Vous êtes maintenant prêt à exécuter les exemples.

Applications exemples

Le dépôt GitHub propose des exemples pour recevoir des contenus multimédias et des métadonnées sur les participants à une réunion.

Ces échantillons collectent des données pendant une durée spécifiée (par défaut, trois secondes) et écrivent les données collectées dans des fichiers.

Les fichiers audio sont au format PCM16. Les fichiers vidéo sont au format YUV420p. Vous pouvez lire ces fichiers à l'aide d'une bibliothèque telle que FFmpeg.

Étant donné que la résolution vidéo peut changer au cours d'une réunion, les échantillons incluent la résolution dans les noms de fichiers vidéo.

Les fichiers de métadonnées des participants seront des fichiers texte lisibles par l'homme.

Exemple de contenu multimédia pour un seul utilisateur

L'exemple multimédia pour un seul utilisateur est une application de base qui se concentre sur la collecte d'audio et de vidéo. L'échantillon ne détermine pas quel participant a créé les données audio et vidéo. Par conséquent, l'utilisation de cet exemple dans une réunion avec plusieurs participants peut entraîner une sortie corrompue.

Pour exécuter l'exemple multimédia pour un seul utilisateur, exécutez la commande suivante:

Linux

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

Par défaut, un seul fichier audio est enregistré dans /tmp/test_output_audio.pcm.

Étant donné que les flux vidéo peuvent changer de résolution au cours d'une réunion, plusieurs fichiers vidéo peuvent être créés. Les noms de fichiers vidéo incluront un compteur incrémentiel et la résolution de ce fichier. Par exemple, si la résolution du flux vidéo est passée de 320 x 180 à 240 x 135, puis de nouveau à 320 x 180, les fichiers vidéo suivants sont créés:

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

(Facultatif) Utiliser FFmpeg pour lire les fichiers de sortie sur Linux et Mac

FFmpeg permet de lire les fichiers audio et vidéo créés. Exemples de commandes:

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

Options

Vous pouvez spécifier les options suivantes lorsque vous exécutez les exemples:

Option Description
--output_file_prefix PREFIX Spécifiez le préfixe des fichiers de sortie. La valeur par défaut est /tmp_test_output_.
--collection_duration DURATION Spécifiez la durée de collecte des contenus multimédias. La valeur par défaut est 30s.
--join_timeout TIMEOUT Spécifiez le délai d'attente avant que l'application ne rejoigne la conférence. La valeur par défaut est 2m.
--meet_api_url URL Spécifiez l'URL de l'API Meet Media. La valeur par défaut est https://meet.googleapis.com/v2alpha/.