Meet 媒体 API:C++ 参考客户端快速入门

本页介绍了如何使用 C++ 参考客户端实现设置和运行示例。如需了解 TypeScript 客户端,请参阅 TypeScript 参考客户端快速入门

前提条件

如需运行本快速入门,您需要满足以下前提条件:

构建 C++ 客户端

  1. 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 变体进行构建,则前提条件设置可能会有所不同。

  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 ... 运行它

  1. (可选)运行测试:

    $ 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

(可选)在 Linux 和 Mac 上使用 FFmpeg 播放输出文件

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/