Meet Media API: คู่มือเริ่มต้นใช้งานไคลเอ็นต์อ้างอิง C++

หน้านี้จะอธิบายวิธีตั้งค่าและเรียกใช้ตัวอย่างโดยใช้การใช้งานไคลเอ็นต์อ้างอิง C++ หากต้องการดูข้อมูลเกี่ยวกับไคลเอ็นต์ TypeScript แทน โปรดดูคู่มือเริ่มต้นใช้งานไคลเอ็นต์ข้อมูลอ้างอิง TypeScript

ข้อกำหนดเบื้องต้น

หากต้องการเรียกใช้การเริ่มต้นใช้งานอย่างรวดเร็วนี้ คุณต้องมีข้อกําหนดเบื้องต้นต่อไปนี้

สร้างไคลเอ็นต์ C++

  1. การใช้งาน 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
    

    หมายเหตุ: คอมมิต b00c469cad3f8c926fcf81ded90b90b6e1e62b9c เป็นเวอร์ชันล่าสุดที่ทราบว่าใช้ได้กับบิลด์ของเราเนื่องจากการอัปเดตชุดเครื่องมือและ Abseil ข้อมูลนี้อาจเปลี่ยนแปลงในอนาคต ชุดคําสั่งนี้ใช้งานได้แล้วในตอนนี้ แต่ควรดูลิงก์ที่ให้ไว้ในกรณีที่เครื่องมือพื้นฐานมีการเปลี่ยนแปลง หากคุณกำลังสร้างสำหรับตัวแปร Debian หรือ Ubuntu Linux ที่ไม่ใช่ x64 การตั้งค่าข้อกําหนดเบื้องต้นอาจแตกต่างออกไป

  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 เพื่อสร้างโทเค็นการเข้าถึง ดูข้อมูลเพิ่มเติมเกี่ยวกับการเข้าถึง Google API ด้วย OAuth ได้ที่การใช้ OAuth 2.0 เพื่อเข้าถึง Google API

คุณสามารถใช้ OAuth 2.0 Playground เพื่อสร้างโทเค็น เมื่อใช้ Playgroud โปรดตรวจสอบสิ่งต่อไปนี้

  • ใช้รหัสไคลเอ็นต์และข้อมูลเข้าสู่ระบบลับจากโปรเจ็กต์ระบบคลาวด์
  • ขอขอบเขตที่ถูกต้อง
  • ลงชื่อเข้าใช้บัญชี 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 ของ Meet Media API ค่าเริ่มต้นคือ https://meet.googleapis.com/v2alpha/