Meet Media API: krótkie wprowadzenie do klienta referencyjnego C++

Na tej stronie dowiesz się, jak skonfigurować i uruchomić przykład za pomocą implementacji klienta referencyjnego w C++. Aby dowiedzieć się więcej o kliencie TypeScript, zapoznaj się z przewodnikiem po kliencie referencyjnym TypeScript.

Wymagania wstępne

Aby skorzystać z tego krótkiego wprowadzenia, musisz spełnić te wymagania wstępne:

Włączanie interfejsu Meet REST API

Zanim zaczniesz korzystać z interfejsów Google API, musisz je włączyć w projekcie Google Cloud. W jednym projekcie Google Cloud możesz włączyć co najmniej 1 interfejs API.

Google Cloud Console

  1. W konsoli Google Cloud włącz interfejs Meet REST API.

    Włączanie interfejsów API

  2. Sprawdź, czy włączasz interfejs Meet REST API w odpowiednim projekcie Cloud, a następnie kliknij Dalej.

  3. Sprawdź, czy włączasz interfejs Meet REST API, a następnie kliknij Włącz.

interfejs wiersza poleceń gcloud

  1. W razie potrzeby ustaw bieżący projekt w Cloud na utworzony przez Ciebie:

    gcloud config set project PROJECT_ID

    Zastąp PROJECT_ID identyfikatorem projektu utworzonego projektu w Cloud.

  2. Włącz interfejs Meet REST API:

    gcloud services enable meet.googleapis.com

Kompilowanie klienta C++

  1. Implementacja w C++ jest tworzona za pomocą Bazel. Biblioteka WebRTC w C++ (libwebrtc) nie ma jednak działającej kompilacji Bazel, więc musisz najpierw skompilować tę bibliotekę, postępując zgodnie z instrukcjami w dokumentacji WebRTC.

    Poniżej znajduje się skrócona wersja informacji z dokumentacji 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
    

    Uwaga: commit b00c469cad3f8c926fcf81ded90b90b6e1e62b9c to najnowsza znana wersja, która działa z naszymi kompilacjami ze względu na aktualizacje łańcucha narzędzi i biblioteki Abseil. W przyszłości może się to zmienić. Ten zestaw poleceń działa teraz, ale w przypadku zmiany podstawowych narzędzi należy skorzystać z podanego linku. Jeśli tworzysz aplikację na platformę Linux Debian lub Ubuntu inną niż x64, wymagana konfiguracja może być inna.

  2. Po utworzeniu libwebrtc zaktualizuj plik WORKSPACE, aby wskazywał katalog webrtc-checkout. Zaktualizuj ścieżkę webrtc_path u góry tego pliku:

    webrtc_path = "/usr/local/myuser/webrtc-checkout/" 
    
  3. Aby skompilować klienta C++, użyj Bazela:

    $ bazel build //cpp/...
    

Uwaga: zalecamy używanie Bazela w wersji 7.4.1. Jeśli masz zainstalowane nowsze wersje Bazela, możesz go uruchomić za pomocą polecenia bazel-7.4.1 build/run/test ...

  1. Opcjonalnie przeprowadź testy:

    $ bazel test //cpp/...
    

Generowanie tokenów OAuth

Aby połączyć się z interfejsem Meet Media API, aplikacja musi używać OAuth do generowania tokenów dostępu. Więcej informacji o uzyskiwaniu dostępu do interfejsów API Google za pomocą OAuth znajdziesz w artykule Używanie protokołu OAuth 2.0 na potrzeby dostępu do interfejsów API Google.

Do generowania tokenów możesz użyć OAuth 2.0 Playground. Podczas korzystania z playgroundu pamiętaj, aby:

  • Użyj identyfikatora klienta i tajnych danych logowania z projektu w chmurze.
  • Poproś o odpowiednie zakresy.
  • Zaloguj się na konto Google i zaakceptuj dostęp.

Po zakończeniu kliknij przycisk Exchange authorization code for tokens i skopiuj wygenerowany token dostępu.

Rozpoczynanie spotkania

Rozpocznij spotkanie przy użyciu tego samego konta użytkownika, którego użyto do wygenerowania tokena OAuth. Skopiuj kod spotkania. Możesz teraz uruchomić przykłady.

Przykładowe aplikacje

Repozytorium GitHub zawiera przykłady odbierania multimediów i metadanych uczestników spotkania.

Te próbki zbierają dane przez określony czas (domyślnie 3 sekundy) i zapisują je w plikach.

Pliki audio są w formacie PCM16. Pliki wideo są w formacie YUV420p. Te pliki można odtwarzać za pomocą biblioteki takiej jak FFmpeg.

Rozdzielczość wideo może się zmieniać w trakcie spotkania, dlatego w nazwach plików wideo znajdują się przykłady rozdzielczości.

Pliki metadanych uczestników będą plikami tekstowymi czytelnymi dla człowieka.

Próbka multimediów dla pojedynczego użytkownika

Próbka multimediów jednego użytkownika to podstawowa aplikacja, która koncentruje się na zbieraniu dźwięku i obrazu. Próbka nie określa, który uczestnik utworzył dane audio i wideo. Dlatego użycie tego przykładu podczas spotkania z więcej niż 1 uczestnikiem może spowodować uszkodzenie danych wyjściowych.

Aby uruchomić przykładowy plik multimedialny dla pojedynczego użytkownika, wpisz:

Linux

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

Domyślnie pojedynczy plik audio jest zapisywany w folderze /tmp/test_output_audio.pcm.

Strumienie wideo mogą zmieniać rozdzielczość podczas spotkania, dlatego może powstać kilka plików wideo. Nazwy plików wideo będą zawierać rosnący licznik i rozdzielczość danego pliku. Jeśli na przykład rozdzielczość strumienia wideo zmieniła się z 320 x 180 na 240 x 135, a potem z powrotem na 320 x 180, utworzone zostaną te pliki wideo:

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

(Opcjonalnie) Użyj FFmpeg do odtwarzania plików wyjściowych w systemach Linux i Mac

FFmpeg można używać do odtwarzania utworzonych plików audio i wideo. Przykładowe polecenia:

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

Opcje

Podczas uruchamiania przykładów możesz określić te opcje:

Opcja Opis
--output_file_prefix PREFIX Określ prefiks plików wyjściowych. Domyślna wartość to /tmp_test_output_.
--collection_duration DURATION Określ, jak długo mają być zbierane multimedia. Domyślna wartość to 30s.
--join_timeout TIMEOUT Określ czas oczekiwania na dołączenie aplikacji do konferencji. Domyślna wartość to 2m.
--meet_api_url URL Określ adres URL interfejsu Meet Media API. Domyślna wartość to https://meet.googleapis.com/v2alpha/.