API Meet Media: guida rapida al client di riferimento C++

Questa pagina spiega come configurare ed eseguire un esempio utilizzando l'implementazione del client di riferimento C++. Per scoprire di più sul client TypeScript, consulta la guida rapida al client di riferimento TypeScript.

Prerequisiti

Per eseguire questa guida rapida, devi soddisfare i seguenti prerequisiti:

Abilitare l'API REST di Meet

Prima di utilizzare le API di Google, devi attivarle in un progetto Google Cloud. Puoi attivare una o più API in un singolo progetto Google Cloud.

Console Google Cloud

  1. Nella console Google Cloud, abilita l'API REST di Meet.

    Abilita le API

  2. Verifica di abilitare l'API REST di Meet nel progetto Cloud corretto, poi fai clic su Avanti.

  3. Verifica di abilitare l'API REST di Meet, quindi fai clic su Abilita.

Interfaccia a riga di comando gcloud

  1. Se necessario, imposta il progetto Cloud corrente su quello che hai creato:

    gcloud config set project PROJECT_ID

    Sostituisci PROJECT_ID con l'ID progetto del progetto Cloud che hai creato.

  2. Abilita l'API REST di Meet:

    gcloud services enable meet.googleapis.com

Crea il client C++

  1. L'implementazione C++ è creata con Bazel. Tuttavia, la libreria C++ WebRTC (libwebrtc) non ha una build Bazel funzionante, quindi devi prima creare questa libreria seguendo le istruzioni riportate nella documentazione di WebRTC.

    Di seguito è riportata una versione abbreviata di quanto spiegato nella documentazione 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: il commit b00c469cad3f8c926fcf81ded90b90b6e1e62b9c è l'ultima versione nota compatibile con le nostre build a causa degli aggiornamenti della toolchain e di Abseil. Ciò potrebbe cambiare in futuro. Questo insieme di comandi funziona ora, ma il link fornito deve essere consultato in caso di modifiche agli strumenti sottostanti. Se stai sviluppando per una variante Linux Debian o Ubuntu non x64, la configurazione dei prerequisiti potrebbe essere diversa.

  2. Dopo aver creato libwebrtc, aggiorna il file WORKSPACE in modo che punti alla directory webrtc-checkout. Aggiorna il percorso webrtc_path nella parte superiore del file:

    webrtc_path = "/usr/local/myuser/webrtc-checkout/" 
    
  3. Utilizza Bazel per creare il client C++:

    $ bazel build //cpp/...
    

Nota: devi utilizzare Bazel 7.4.1. Se hai installato versioni più recenti di Bazel, puoi eseguirle utilizzando bazel-7.4.1 build/run/test ...

  1. (Facoltativo) Esegui i test:

    $ bazel test //cpp/...
    

Generare token OAuth

Per connettersi all'API Meet Media, la tua app deve utilizzare OAuth per generare token di accesso. Per saperne di più sull'accesso alle API di Google con OAuth, vedi Utilizzare OAuth 2.0 per accedere alle API di Google.

Puoi utilizzare OAuth 2.0 Playground per generare token. Quando utilizzi il playground, assicurati di:

  • Utilizza l'ID client e le credenziali segrete del tuo progetto cloud.
  • Richiedi gli ambiti corretti.
  • Accedi a un Account Google e accetta l'accesso.

Al termine, fai clic sul pulsante Exchange authorization code for tokens e copia il token di accesso generato.

Avviare una riunione

Avvia una riunione utilizzando lo stesso account utente che hai utilizzato per generare il token OAuth. Copia il codice riunione. Ora puoi eseguire gli esempi.

App di esempio

Il repository GitHub offre esempi per la ricezione di contenuti multimediali e metadati dei partecipanti da una riunione.

Questi campioni raccolgono dati per un periodo di tempo specificato (il valore predefinito è 3 secondi) e scrivono i dati raccolti nei file.

I file audio sono in formato PCM16. I file video sono in formato YUV420p. Questi file possono essere riprodotti utilizzando una libreria come FFmpeg.

Poiché le risoluzioni video potrebbero cambiare durante una riunione, gli esempi includono la risoluzione nei nomi dei file video.

I file di metadati dei partecipanti saranno file di testo leggibili.

Esempio di contenuti multimediali per un singolo utente

L'esempio di app per un singolo utente è un'app di base incentrata sulla raccolta di audio e video. Il campione non determina quale partecipante ha creato i dati audio e video. Pertanto, l'utilizzo di questo campione in una riunione con più di un partecipante potrebbe comportare un output danneggiato.

Per eseguire l'esempio di media per un singolo utente, esegui:

Linux

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

Per impostazione predefinita, un singolo file audio viene salvato in /tmp/test_output_audio.pcm.

Poiché i flussi video potrebbero cambiare risoluzione durante una riunione, potrebbero essere creati più file video. I nomi dei file video includeranno un contatore incrementale e la risoluzione del file. Ad esempio, se la risoluzione dello stream video è cambiata da 320 x 180 a 240 x 135 e poi di nuovo a 320 x 180, verranno creati i seguenti file video:

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

(Facoltativo) Utilizza FFmpeg per riprodurre i file di output su Linux e Mac

FFmpeg può essere utilizzato per riprodurre i file audio e video creati. Comandi di esempio:

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

Opzioni

Puoi specificare queste opzioni quando esegui gli esempi:

Opzione Descrizione
--output_file_prefix PREFIX Specifica il prefisso per i file di output. Il valore predefinito è /tmp_test_output_.
--collection_duration DURATION Specifica per quanto tempo raccogliere i contenuti multimediali. Il valore predefinito è 30s.
--join_timeout TIMEOUT Specifica quanto tempo attendere prima che l'app partecipi alla conferenza. Il valore predefinito è 2m.
--meet_api_url URL Specifica l'URL dell'API Meet Media. Il valore predefinito è https://meet.googleapis.com/v2alpha/.