Meet Media API: شروع سریع مشتری مرجع C++

این صفحه نحوه تنظیم و اجرای یک نمونه با استفاده از پیاده سازی مشتری مرجع C++ را توضیح می دهد. برای آشنایی با کلاینت TypeScript به جای آن، به شروع سریع مشتری مرجع TypeScript مراجعه کنید.

پیش نیازها

برای اجرای این شروع سریع، به پیش نیازهای زیر نیاز دارید:

کلاینت C++ را بسازید

  1. پیاده سازی C++ با Bazel ساخته شده است. با این حال، کتابخانه C++ WebRTC ( libwebrtc ) یک ساخت Bazel ندارد، بنابراین ابتدا باید با دنبال کردن دستورالعمل‌های WebRTC Docs ، آن کتابخانه را بسازید.

    موارد زیر یک نسخه مختصر از آنچه در اسناد 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 با ساخت های ما کار می کند. این ممکن است در آینده تغییر کند. این مجموعه از دستورات اکنون کار می کند، اما در صورت تغییر ابزار اصلی باید به پیوند ارائه شده رجوع شود. اگر در حال ساخت نسخه غیر 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 برای تولید توکن ها استفاده کنید. هنگام استفاده از زمین بازی، مطمئن شوید که:

  • از شناسه مشتری و اعتبارنامه های مخفی پروژه ابری خود استفاده کنید.
  • دامنه های صحیح را درخواست کنید.
  • به یک حساب Google وارد شوید و دسترسی را بپذیرید.

پس از تکمیل، روی دکمه Exchange authorization code for tokens کلیک کنید و رمز دسترسی ایجاد شده را کپی کنید.

یک جلسه را شروع کنید

با استفاده از همان حساب کاربری که برای تولید نشانه OAuth استفاده کردید ، جلسه ای را شروع کنید . کد جلسه را کپی کنید اکنون آماده اجرای نمونه ها هستید.

نمونه برنامه ها

مخزن GitHub نمونه هایی را برای دریافت فراداده رسانه و شرکت کنندگان از یک جلسه ارائه می دهد.

این نمونه ها داده ها را برای مدت زمان مشخصی جمع آوری می کنند (پیش فرض 3 ثانیه است) و داده های جمع آوری شده را در فایل ها می نویسند.

فایل های صوتی با فرمت PCM16 هستند. فایل های ویدئویی با فرمت YUV420p هستند. این فایل ها را می توان با استفاده از کتابخانه ای مانند FFmpeg پخش کرد.

از آنجایی که وضوح ویدیو ممکن است در طول جلسه تغییر کند، نمونه‌ها وضوح تصویر را در نام فایل‌های ویدیویی شامل می‌شوند.

فایل‌های فراداده شرکت‌کننده، فایل‌های متنی قابل خواندن توسط انسان خواهند بود.

نمونه رسانه تک کاربر

نمونه رسانه تک کاربر یک برنامه اساسی است که بر جمع آوری صدا و تصویر تمرکز دارد. نمونه مشخص نمی کند که کدام شرکت کننده داده های صوتی و تصویری را ایجاد کرده است. بنابراین، استفاده از این نمونه در جلسه ای با بیش از یک شرکت کننده ممکن است منجر به خرابی خروجی شود.

برای اجرای نمونه رسانه تک کاربر، اجرا کنید:

لینوکس
$ 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 برای پخش فایل های خروجی در لینوکس و مک استفاده کنید

FFmpeg می تواند برای پخش فایل های صوتی و تصویری ایجاد شده استفاده شود. دستورات مثال:

# 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 API مشخص کنید. به طور پیش فرض https://meet.googleapis.com/v2alpha/ .
،

این صفحه نحوه تنظیم و اجرای یک نمونه با استفاده از پیاده سازی مشتری مرجع C++ را توضیح می دهد. برای آشنایی با کلاینت TypeScript به جای آن، به شروع سریع مشتری مرجع TypeScript مراجعه کنید.

پیش نیازها

برای اجرای این شروع سریع، به پیش نیازهای زیر نیاز دارید:

کلاینت C++ را بسازید

  1. پیاده سازی C++ با Bazel ساخته شده است. با این حال، کتابخانه C++ WebRTC ( libwebrtc ) یک ساخت Bazel ندارد، بنابراین ابتدا باید با دنبال کردن دستورالعمل‌های WebRTC Docs ، آن کتابخانه را بسازید.

    موارد زیر یک نسخه مختصر از آنچه در اسناد 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 با ساخت های ما کار می کند. این ممکن است در آینده تغییر کند. این مجموعه از دستورات اکنون کار می کند، اما در صورت تغییر ابزار اصلی باید به پیوند ارائه شده رجوع شود. اگر در حال ساخت نسخه غیر 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 برای تولید توکن ها استفاده کنید. هنگام استفاده از زمین بازی، مطمئن شوید که:

  • از شناسه مشتری و اعتبارنامه های مخفی پروژه ابری خود استفاده کنید.
  • دامنه های صحیح را درخواست کنید.
  • به یک حساب Google وارد شوید و دسترسی را بپذیرید.

پس از تکمیل، روی دکمه Exchange authorization code for tokens کلیک کنید و رمز دسترسی ایجاد شده را کپی کنید.

یک جلسه را شروع کنید

با استفاده از همان حساب کاربری که برای تولید نشانه OAuth استفاده کردید ، جلسه ای را شروع کنید . کد جلسه را کپی کنید اکنون آماده اجرای نمونه ها هستید.

نمونه برنامه ها

مخزن GitHub نمونه هایی را برای دریافت فراداده رسانه و شرکت کنندگان از یک جلسه ارائه می دهد.

این نمونه ها داده ها را برای مدت زمان مشخصی جمع آوری می کنند (پیش فرض 3 ثانیه است) و داده های جمع آوری شده را در فایل ها می نویسند.

فایل های صوتی با فرمت PCM16 هستند. فایل های ویدئویی با فرمت YUV420p هستند. این فایل ها را می توان با استفاده از کتابخانه ای مانند FFmpeg پخش کرد.

از آنجایی که وضوح ویدیو ممکن است در طول جلسه تغییر کند، نمونه‌ها وضوح تصویر را در نام فایل‌های ویدیویی شامل می‌شوند.

فایل‌های فراداده شرکت‌کننده، فایل‌های متنی قابل خواندن توسط انسان خواهند بود.

نمونه رسانه تک کاربر

نمونه رسانه تک کاربر یک برنامه اساسی است که بر جمع آوری صدا و تصویر تمرکز دارد. نمونه مشخص نمی کند که کدام شرکت کننده داده های صوتی و تصویری را ایجاد کرده است. بنابراین، استفاده از این نمونه در جلسه ای با بیش از یک شرکت کننده ممکن است منجر به خرابی خروجی شود.

برای اجرای نمونه رسانه تک کاربر، اجرا کنید:

لینوکس
$ 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 برای پخش فایل های خروجی در لینوکس و مک استفاده کنید

FFmpeg می تواند برای پخش فایل های صوتی و تصویری ایجاد شده استفاده شود. دستورات مثال:

# 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 API مشخص کنید. به طور پیش فرض https://meet.googleapis.com/v2alpha/ .