Meet Media API: מדריך למתחילים ללקוח העזר של C++‎

בדף הזה מוסבר איך להגדיר ולהריץ דוגמה באמצעות הטמעה של לקוח הפניה ל-C++‎. אם רוצים לקבל מידע על לקוח TypeScript, אפשר לעיין במדריך לתחילת העבודה עם לקוח TypeScript.

דרישות מוקדמות

כדי להפעיל את המדריך למתחילים הזה, צריך לעמוד בדרישות המוקדמות הבאות:

הפעלת Meet REST API

לפני שמשתמשים בממשקי Google API, צריך להפעיל אותם בפרויקט ב-Google Cloud. אפשר להפעיל ממשק API אחד או יותר בפרויקט יחיד ב-Google Cloud.

מסוף Google Cloud

  1. במסוף Google Cloud, מפעילים את Meet REST API.

    הפעלת ממשקי ה-API

  2. מוודאים שמפעילים את Meet REST API בפרויקט הנכון ב-Cloud, ואז לוחצים על הבא.

  3. מוודאים שמפעילים את Meet REST API ולוחצים על הפעלה.

CLI של gcloud

  1. אם צריך, מגדירים את פרויקט Cloud הנוכחי לפרויקט שיצרתם:

    gcloud config set project PROJECT_ID

    מחליפים את PROJECT_ID במזהה הפרויקט של פרויקט Cloud שיצרתם.

  2. מפעילים את Meet REST API:

    gcloud services enable meet.googleapis.com

בניית לקוח C++

  1. ההטמעה של C++‎ מבוססת על Bazel. עם זאת, לספריית WebRTC של C++‎‏ (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
    

    הערה: גרסת ה-commit‏ 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 APIs באמצעות OAuth זמין במאמר שימוש ב-OAuth 2.0 כדי לגשת אל Google APIs.

אפשר להשתמש ב-OAuth 2.0 Playground כדי ליצור אסימונים. כשמשתמשים ב-Playground, חשוב:

  • משתמשים במזהה הלקוח ובפרטי הכניסה הסודיים מהפרויקט בענן.
  • צריך לבקש את היקפי ההרשאות הנכונים.
  • נכנסים לחשבון 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 מציינים את כתובת ה-URL של Meet Media API. ברירת המחדל היא https://meet.googleapis.com/v2alpha/.