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 informazioni sul client TypeScript, consulta la guida introduttiva al client di riferimento TypeScript.

Prerequisiti

Per eseguire questa guida rapida, sono necessari i seguenti prerequisiti:

Compila il client C++

  1. L'implementazione C++ viene compilata con Bazel. Tuttavia, la libreria WebRTC C++ (libwebrtc) non ha una compilazione Bazel funzionante, quindi devi prima compilare la libreria seguendo le istruzioni riportate nella documentazione di WebRTC.

    Di seguito è riportata una versione abbreviata di quanto spiegato nella documentazione di 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 è la versione nota più recente compatibile con le nostre build a causa degli aggiornamenti di toolchain e abseil. Ciò potrebbe cambiare in futuro. Questo insieme di comandi ora funziona, ma è necessario fare riferimento al link fornito nel caso in cui gli strumenti di base cambino. Se stai eseguendo la compilazione per una variante di Debian o Ubuntu Linux non x64, la configurazione dei prerequisiti potrebbe essere diversa.

  2. Dopo aver compilato 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 compilare il client C++:

    $ bazel build //cpp/...
    

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

  1. Se vuoi, esegui i test:

    $ bazel test //cpp/...
    

Generare token OAuth

Per connettersi all'API Meet Media, l'app deve utilizzare OAuth per generare i token di accesso. Per scoprire di più su come accedere alle API di Google con OAuth, consulta l'articolo Utilizzare OAuth 2.0 per accedere alle API di Google.

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

  • Utilizza le credenziali dell'ID client e del secret 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 utilizzato per generare il token OAuth. Copia il codice riunione. Ora puoi eseguire i sample.

App di esempio

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

Questi campioni raccolgono i dati per un periodo di tempo specificato (il valore predefinito è 3 secondi) e li scrivono in 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, i sample includono la risoluzione nei nomi dei file video.

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

Esempio di media per utente singolo

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

Per eseguire il Sample di contenuti multimediali 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é gli stream 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 è passata 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 i sample:

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 il tempo di attesa per l'accesso dell'app 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/.