หน้านี้จะอธิบายวิธีตั้งค่าและเรียกใช้ตัวอย่างโดยใช้การใช้งานไคลเอ็นต์ อ้างอิง C++ หากต้องการดูข้อมูลเกี่ยวกับไคลเอ็นต์ TypeScript แทน โปรดดูเริ่มต้นใช้งานไคลเอ็นต์อ้างอิง TypeScript
ข้อกำหนดเบื้องต้น
หากต้องการเรียกใช้คู่มือเริ่มต้นฉบับย่อนี้ คุณต้องมีข้อกำหนดเบื้องต้นต่อไปนี้
- คุณได้โคลนที่เก็บ GitHub แล้ว
- Bazel 7.4.1
- โปรเจ็กต์ Google Cloud ที่เปิดใช้ REST API ของ Google Meet
- บัญชี Google Workspace
เปิดใช้ Meet REST API
ก่อนใช้ Google API คุณต้องเปิดใช้ API ในโปรเจ็กต์ Google Cloud คุณเปิด API อย่างน้อย 1 รายการในโปรเจ็กต์ Google Cloud เดียวได้คอนโซล Google Cloud
เปิดใช้ Meet REST API ในคอนโซล Google Cloud
ยืนยันว่าคุณกำลังเปิดใช้ Meet REST API ในโปรเจ็กต์ Cloud ที่ถูกต้อง จากนั้นคลิกถัดไป
ยืนยันว่าคุณกำลังเปิดใช้ Meet REST API แล้วคลิกเปิดใช้
gcloud CLI
หากจำเป็น ให้ตั้งค่าโปรเจ็กต์ Cloud ปัจจุบันเป็นโปรเจ็กต์ที่คุณสร้างขึ้นโดยทำดังนี้
gcloud config set project PROJECT_ID
แทนที่ PROJECT_ID ด้วยรหัสโปรเจ็กต์ของ โปรเจ็กต์ Cloud ที่คุณสร้าง
วิธีเปิดใช้ Meet REST API
gcloud services enable meet.googleapis.com
สร้างไคลเอ็นต์ C++
การใช้งาน C++ สร้างขึ้นด้วย Bazel อย่างไรก็ตาม ไลบรารี WebRTC ของ C++ (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
หมายเหตุ: คอมมิต
b00c469cad3f8c926fcf81ded90b90b6e1e62b9c
เป็นเวอร์ชันล่าสุดที่ทราบว่าใช้ได้กับบิลด์ของเราเนื่องจากการอัปเดต Toolchain และ Abseil ซึ่งอาจมีการเปลี่ยนแปลงในอนาคต ตอนนี้ชุดคำสั่งนี้ใช้งานได้ แต่คุณควรดูลิงก์ที่ระบุไว้ในกรณีที่เครื่องมือพื้นฐาน มีการเปลี่ยนแปลง หากคุณกำลังสร้างสำหรับ Debian หรือ Ubuntu Linux ที่ไม่ใช่ x64 การตั้งค่าข้อกำหนดเบื้องต้นอาจแตกต่างกันหลังจากสร้าง 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 เพื่อสร้าง โทเค็นเพื่อเข้าถึง ดูข้อมูลเพิ่มเติมเกี่ยวกับการเข้าถึง Google API ด้วย OAuth ได้ที่การใช้ OAuth 2.0 เพื่อเข้าถึง Google API
คุณใช้ OAuth 2.0 Playground เพื่อสร้างโทเค็นได้ เมื่อใช้ Playground โปรดทำดังนี้
- ใช้รหัสไคลเอ็นต์และข้อมูลเข้าสู่ระบบลับจากโปรเจ็กต์ระบบคลาวด์
- ขอขอบเขตที่ถูกต้อง
- ลงชื่อเข้าใช้บัญชี Google และยอมรับสิทธิ์เข้าถึง
เมื่อเสร็จแล้ว ให้คลิกปุ่ม Exchange authorization code for tokens
แล้วคัดลอกโทเค็นเพื่อการเข้าถึงที่สร้างขึ้น
เริ่มการประชุม
เริ่มการประชุมโดยใช้บัญชีผู้ใช้เดียวกันกับที่ คุณใช้สร้างโทเค็น OAuth คัดลอกรหัสการประชุม ตอนนี้คุณพร้อมที่จะ เรียกใช้ตัวอย่างแล้ว
แอปตัวอย่าง
ที่เก็บ GitHub มี ตัวอย่างสำหรับการรับสื่อและข้อมูลเมตาของผู้เข้าร่วมจากการประชุม
ตัวอย่างเหล่านี้จะรวบรวมข้อมูลเป็นระยะเวลาที่ระบุ (ค่าเริ่มต้นคือ 3 วินาที) และเขียนข้อมูลที่รวบรวมไว้ลงในไฟล์
ไฟล์เสียงอยู่ในรูปแบบ PCM16 ไฟล์วิดีโออยู่ในรูปแบบ YUV420p ไฟล์เหล่านี้ สามารถเล่นได้โดยใช้ไลบรารี เช่น FFmpeg
เนื่องจากความละเอียดของวิดีโออาจเปลี่ยนแปลงในระหว่างการประชุม ตัวอย่างจึงรวมความละเอียดไว้ในชื่อไฟล์วิดีโอ
ไฟล์ข้อมูลเมตาของผู้เข้าร่วมจะเป็นไฟล์ข้อความที่มนุษย์อ่านได้
ตัวอย่างสื่อของผู้ใช้รายเดียว
ตัวอย่างสื่อของผู้ใช้รายเดียวเป็นแอปพื้นฐานที่มุ่งเน้นการรวบรวมเสียงและวิดีโอ ตัวอย่างไม่ได้ระบุว่าผู้เข้าร่วมคนใดเป็นผู้สร้างข้อมูลเสียงและวิดีโอ ดังนั้นการใช้ตัวอย่างนี้ในการประชุมที่มีผู้เข้าร่วมมากกว่า 1 คน อาจทำให้เอาต์พุตเสียหาย
หากต้องการเรียกใช้ตัวอย่างสื่อสำหรับผู้ใช้คนเดียว ให้เรียกใช้คำสั่งต่อไปนี้
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 |
ระบุ URL สำหรับ API ของ Meet Media API ค่าเริ่มต้นคือ https://meet.googleapis.com/v2alpha/ |