Meet Media API:C++ 參考用戶端快速入門

本頁面說明如何使用 C++ 參考用戶端實作設定及執行範例。如要瞭解 TypeScript 用戶端,請參閱 TypeScript 參照用戶端快速入門指南

必要條件

如要執行本快速入門導覽課程,您需要具備下列先決條件:

建構 C++ 用戶端

  1. 使用 Bazel 建構 C++ 實作項目。不過,C++ WebRTC 程式庫 (libwebrtc) 沒有可用的 Bazel 建構工具,因此您必須先按照 WebRTC 說明文件中的操作說明建構該程式庫。

    以下是 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
    

    注意:由於工具鍊和 abseil 更新,因此已知可與我們的建構作業搭配運作的最新版本為 b00c469cad3f8c926fcf81ded90b90b6e1e62b9c 提交版本。這項規定日後可能會有異動。這組指令現在可正常運作,但如果基礎工具變更,請參考提供的連結。如果您是為非 x64 的 Debian 或 Ubuntu Linux 變化版本進行建構,則必要條件設定可能會有所不同。

  2. 建構 libwebrtc 後,請更新 WORKSPACE 檔案,讓檔案指向 webrtc-checkout 目錄。更新該檔案頂端附近的 webrtc_path 路徑:

    webrtc_path = "/usr/local/myuser/webrtc-checkout/" 
    
  3. 使用 Bazel 建構 C++ 用戶端:

    $ bazel build //cpp/...
    

注意:您應使用 Bazel 7.4.1。如果您已安裝較新版本的 Bazel,可以使用 bazel-7.4.1 build/run/test ... 執行 Bazel

  1. 您可以選擇執行測試:

    $ bazel test //cpp/...
    

產生 OAuth 權杖

如要連線至 Meet Media API,您的應用程式必須使用 OAuth 產生存取權權杖。如要進一步瞭解如何使用 OAuth 存取 Google API,請參閱「使用 OAuth 2.0 存取 Google API」。

您可以使用 OAuth 2.0 Playground 產生權杖。使用遊樂場時,請務必:

  • 使用雲端專案中的用戶端 ID 和密鑰憑證。
  • 請要求正確的範圍
  • 登入 Google 帳戶並接受存取權。

完成後,請按一下 Exchange authorization code for tokens 按鈕,然後複製產生的存取權杖。

發起會議

使用產生 OAuth 權杖時所用的使用者帳戶啟動會議。複製會議代碼。您現在可以執行範例了。

範例應用程式

GitHub 存放區提供範例,可用於接收會議中的媒體和參與者中繼資料。

這些範例會收集指定時間 (預設為 3 秒) 的資料,並將收集到的資料寫入檔案。

音訊檔案格式為 PCM16。影片檔案格式為 YUV420p。您可以使用 FFmpeg 等程式庫播放這些檔案。

由於視訊解析度可能會在會議期間變更,因此樣本會在影片檔案名稱中加入解析度。

參與者中繼資料檔案必須是人類可讀的文字檔案。

單一使用者媒體範例

單一使用者媒體範例是專注於收集音訊和視訊的基本應用程式。樣本無法判斷哪位參與者建立了音訊和視訊資料。因此,在有超過一位參與者的會議中使用此範例,可能會導致輸出內容毀損。

如要執行單一使用者媒體範例,請執行:

Linux

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

根據預設,單一音訊檔案會儲存至 /tmp/test_output_audio.pcm

由於視訊串流可能會在會議期間變更解析度,因此可能會建立多個影片檔案。影片檔案名稱會包含遞增計數器和該檔案的解析度。舉例來說,如果影片串流解析度從 320x180 變更為 240x135,然後又變更為 320x180,系統就會建立下列影片檔案:

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

(選用) 使用 FFmpeg 在 Linux 和 Mac 上播放輸出檔案

FFmpeg 可用於播放已建立的音訊和影片檔案。指令範例:

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

選項

您可以在執行範例時指定下列選項:

選項 說明
--output_file_prefix PREFIX 指定輸出檔案的前置字串。預設值為 /tmp_test_output_
--collection_duration DURATION 指定媒體收集時間長度。預設值為 30s
--join_timeout TIMEOUT 指定應用程式加入會議的等候時間長度。預設值為 2m
--meet_api_url URL 指定 Meet Media API API 的網址。預設值為 https://meet.googleapis.com/v2alpha/