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

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

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

כדי להריץ את המדריך למתחילים הזה, צריך את התנאים המוקדמים הבאים:

פיתוח הלקוח ב-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
    

    הערה: בגלל עדכונים של toolchain ו-abseil, השמירה b00c469cad3f8c926fcf81ded90b90b6e1e62b9c היא הגרסה האחרונה שידועה כעובדת עם ה-builds שלנו. יכול להיות שהמצב הזה ישתנה בעתיד. קבוצת הפקודות הזו פועלת כרגע, אבל צריך לעיין בקישור שסופק במקרה שהכלים הבסיסיים ישתנו. אם אתם מפתחים גרסה של Debian או Ubuntu Linux שאינה x64, יכול להיות שההגדרות של התנאים המוקדמים יהיו שונות.

  2. אחרי ה-build של 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/.