本頁面說明如何使用 C++ 參考用戶端實作設定及執行範例。如要瞭解 TypeScript 用戶端,請參閱 TypeScript 參考用戶端快速入門。
必要條件
如要執行本快速入門導覽課程,請先完成下列必要條件:
- 您已複製 GitHub 存放區。
- Bazel 7.4.1。
- 已啟用 Google Meet REST API 的 Google Cloud 專案。
- Google Workspace 帳戶。
啟用 Meet REST API
使用 Google API 前,請先在 Google Cloud 專案中啟用這些 API。您可以在單一 Google Cloud 專案中啟用一或多個 API。Google Cloud 控制台
在 Google Cloud 控制台中啟用 Meet REST API。
確認您要在正確的 Cloud 專案中啟用 Meet REST API,然後按一下「下一步」。
確認要啟用 Meet REST API,然後按一下「啟用」。
gcloud CLI
如有必要,請將目前的 Cloud 專案設為您建立的專案:
gcloud config set project PROJECT_ID
將 PROJECT_ID 替換為您建立的 Cloud 專案的專案 ID。
啟用 Meet REST API:
gcloud services enable meet.googleapis.com
建構 C++ 用戶端
C++ 實作項目是使用 Bazel 建構。不過,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 變種版本,可能需要進行不同的必要設定。建構 libwebrtc 後,請更新
WORKSPACE
檔案,指向webrtc-checkout
目錄。更新該檔案頂端的webrtc_path
路徑:webrtc_path = "/usr/local/myuser/webrtc-checkout/"
使用 Bazel 建構 C++ 用戶端:
$ bazel build //cpp/...
注意:請使用 Bazel 7.4.1。如果安裝了較新版本的 Bazel,可以使用
bazel-7.4.1 build/run/test ...
執行
(選用) 執行測試:
$ 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 的網址。預設值為 https://meet.googleapis.com/v2alpha/ 。 |