本页介绍了如何使用 C++ 参考客户端实现设置和运行示例。如需了解 TypeScript 客户端,请参阅 TypeScript 参考客户端快速入门。
前提条件
如需运行本快速入门,您需要满足以下前提条件:
- 您已克隆 GitHub 代码库。
- Bazel 7.4.1。
- 已启用 Google Meet REST API 的 Google Cloud 项目。
- Google Workspace 账号。 - 注意:请务必使用媒体 API 示例的 dpp 版本,因为目前存在不兼容问题,我们正在积极解决这些问题 
启用 Meet REST API
在使用 Google API 之前,您需要在 Google Cloud 项目中将其开启。 您可以在单个 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 build,因此您必须先按照 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是与我们的 build 搭配使用的最新已知版本。这种情况可能会在将来发生变化。这组命令目前可以正常运行,但如果底层工具发生变化,您应参考提供的链接。如果您要构建非 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 生成令牌。使用 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/。 |