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

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

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

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

  • שיכפלתם את המאגר ב-GitHub.
  • Bazel 7.4.1.
  • פרויקט ב-Google Cloud שמופעל בו Google Meet REST API.
  • חשבון Google Workspace.

    הערה: חשוב להשתמש בגרסת dpp של דוגמאות ל-API של meida, כי יש כרגע בעיות תאימות שאנחנו פועלים לפתור.

הפעלת Meet REST API

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

מסוף 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 תקינה, ולכן צריך ליצור את הספרייה הזו קודם לפי ההוראות במסמכי 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 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/.