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

Na tej stronie znajdziesz informacje o konfigurowaniu i uruchamianiu przykładu za pomocą referencyjnej implementacji klienta w C++. Aby dowiedzieć się więcej o kliencie referencyjnym TypeScript, przeczytaj artykuł Wprowadzenie do klienta referencyjnego TypeScript.

Wymagania wstępne

Aby wykonać ten samouczek, musisz spełnić te wymagania wstępne:

Kompilowanie klienta w 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ę, wykonując instrukcje podane w dokumentacji WebRTC.

    Poniżej znajduje się skrócona wersja informacji zawartych w 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 naszych kompilacjami ze względu na aktualizacje narzędzia do tworzenia łańcucha narzędzi i abseil. W przyszłości może się to zmienić. Ten zestaw poleceń działa obecnie, ale w razie zmiany narzędzi należy przejść do podanego linku. Jeśli kompilujesz wersję dla systemu Debian lub Ubuntu Linux innej niż x64, wymagania wstępne mogą być inne.

  2. Po skompilowaniu 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. Użyj Bazel do skompilowania klienta C++:

    $ bazel build //cpp/...
    

Uwaga: musisz używać Bazel 7.4.1. Jeśli masz zainstalowane nowsze wersje programu Bazel, 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 nawiązać połączenie z interfejsem Meet Media API, aplikacja musi generować tokeny dostępu za pomocą OAuth. Więcej informacji o dostępie do interfejsów API Google za pomocą OAuth znajdziesz w artykule Uzyskiwanie dostępu do interfejsów API Google za pomocą protokołu OAuth 2.0.

Do generowania tokenów możesz użyć Playground OAuth 2.0. Podczas korzystania z Playground:

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

Gdy to zrobisz, 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ć próbki.

Przykładowe aplikacje

Repozytorium GitHub zawiera próbki metadanych multimediów i uczestników spotkania.

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

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

Ponieważ rozdzielczość wideo może się zmieniać w trakcie spotkania, próbki zawierają rozdzielczość w nazwach plików wideo.

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

Przykład multimediów dla pojedynczego użytkownika

Przykład multimediów dla jednego użytkownika to prosta aplikacja, która skupia się na zbieraniu dźwięku i obrazu. Przykład nie określa, który uczestnik stworzył dane audio i wideo. Dlatego użycie tego szablonu na spotkaniu z większą liczbą uczestników może spowodować uszkodzenie danych wyjściowych.

Aby uruchomić przykład multimediów dla pojedynczego użytkownika, uruchom:

Linux

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

Domyślnie do folderu /tmp/test_output_audio.pcm zapisywany jest jeden plik audio.

Ponieważ strumienie wideo mogą zmieniać rozdzielczość podczas spotkania, może zostać utworzonych kilka plików wideo. Nazwy plików wideo będą zawierać rosnący licznik oraz rozdzielczość pliku. Jeśli np. rozdzielczość strumienia wideo zmieni się z 320 x 180 na 240 x 135, a potem znów na 320 x 180, zostaną utworzone 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) Odtwarzanie plików wyjściowych za pomocą FFmpeg w systemach Linux i Mac

FFmpeg umożliwia odtwarzanie 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 próbek 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 chcesz zbierać multimedia. Domyślna wartość to 30s.
--join_timeout TIMEOUT Określ, jak długo aplikacja ma czekać na dołączenie do konferencji. Domyślna wartość to 2m.
--meet_api_url URL Podaj adres URL interfejsu Meet Media API. Domyślna wartość to https://meet.googleapis.com/v2alpha/.