این صفحه نحوه راهاندازی و اجرای یک نمونه با استفاده از پیادهسازی کلاینت مرجع C++ را توضیح میدهد. برای کسب اطلاعات بیشتر در مورد کلاینت TypeScript، به راهنمای سریع کلاینت مرجع TypeScript مراجعه کنید.
پیشنیازها
برای اجرای این کوئیکاستارت، به پیشنیازهای زیر نیاز دارید:
- شما مخزن گیتهاب را کلون کردهاید.
- بازل ۷.۴.۱ .
- یک پروژه Google Cloud با رابط برنامهنویسی کاربردی REST گوگل میت (Google Meet REST API) فعال.
یک حساب کاربری گوگل ورک اسپیس.
توجه : لطفاً حتماً از نسخه dpp نمونههای api meida استفاده کنید، زیرا در حال حاضر مشکلات ناسازگاری وجود دارد که ما به طور فعال در حال حل آنها هستیم.
فعال کردن Meet REST API
قبل از استفاده از APIهای گوگل، باید آنها را در یک پروژه گوگل کلود فعال کنید. میتوانید یک یا چند API را در یک پروژه گوگل کلود فعال کنید.کنسول گوگل کلود
در کنسول Google Cloud، رابط برنامهنویسی Meet REST را فعال کنید.
تأیید کنید که Meet REST API را در پروژه Cloud صحیح فعال میکنید، سپس روی Next کلیک کنید.
تأیید کنید که Meet REST API را فعال میکنید، سپس روی فعال کردن کلیک کنید.
رابط خط فرمان جیکلاود
در صورت لزوم، پروژه Cloud فعلی را روی پروژهای که ایجاد کردهاید تنظیم کنید:
gcloud config set project PROJECT_IDبه جای PROJECT_ID ، شناسه پروژه ابری که ایجاد کردهاید را قرار دهید.
فعال کردن Meet REST API:
gcloud services enable meet.googleapis.com
ساخت کلاینت C++
پیادهسازی 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توجه : Commit
b00c469cad3f8c926fcf81ded90b90b6e1e62b9cآخرین نسخه شناخته شدهای است که به دلیل بهروزرسانیهای toolchain و abseil با نسخههای ما کار میکند. این ممکن است در آینده تغییر کند. این مجموعه دستورات در حال حاضر کار میکند، اما در صورت تغییر ابزارهای اساسی، باید به لینک ارائه شده مراجعه کنید. اگر در حال ساخت نسخهای غیر از 64 بیتی Debian یا Ubuntu Linux هستید، تنظیمات پیشنیاز شما ممکن است متفاوت باشد.پس از ساخت libwebrtc ، فایل
WORKSPACEخود را بهروزرسانی کنید تا به دایرکتوریwebrtc-checkoutشما اشاره کند. مسیرwebrtc_pathرا که در بالای آن فایل قرار دارد، بهروزرسانی کنید:webrtc_path = "/usr/local/myuser/webrtc-checkout/"از Bazel برای ساخت کلاینت C++ استفاده کنید:
$ bazel build //cpp/...
توجه : شما باید از Bazel نسخه ۷.۴.۱ استفاده کنید. اگر نسخههای جدیدتر Bazel را نصب کردهاید، میتوانید آن را با استفاده از
bazel-7.4.1 build/run/test ...اجرا کنید.
در صورت تمایل، تستها را اجرا کنید:
$ bazel test //cpp/...
تولید توکنهای OAuth
برای اتصال به Meet Media API، برنامه شما باید از OAuth برای تولید توکنهای دسترسی استفاده کند. برای کسب اطلاعات بیشتر در مورد دسترسی به APIهای گوگل با OAuth، به بخش «استفاده از OAuth 2.0 برای دسترسی به APIهای گوگل» مراجعه کنید.
شما میتوانید از OAuth 2.0 Playground برای تولید توکنها استفاده کنید. هنگام استفاده از playground، حتماً موارد زیر را رعایت کنید:
- از شناسه کلاینت و اطلاعات محرمانه پروژه ابری خود استفاده کنید.
- دامنههای صحیح را درخواست کنید.
- وارد حساب گوگل خود شوید و دسترسی را بپذیرید.
پس از تکمیل، روی دکمهی Exchange authorization code for tokens کلیک کنید و توکن دسترسی تولید شده را کپی کنید.
شروع یک جلسه
جلسه را با استفاده از همان حساب کاربری که برای تولید توکن OAuth استفاده کردهاید، شروع کنید . کد جلسه را کپی کنید. اکنون آماده اجرای نمونهها هستید.
برنامههای نمونه
مخزن گیتهاب نمونههایی برای دریافت رسانه و فرادادههای شرکتکنندگان از یک جلسه ارائه میدهد.
این نمونهها دادهها را برای مدت زمان مشخصی (پیشفرض ۳ ثانیه است) جمعآوری میکنند و دادههای جمعآوریشده را در فایلها مینویسند.
فایلهای صوتی با فرمت 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 را مشخص کنید. پیشفرض آن https://meet.googleapis.com/v2alpha/ است. |
مباحث مرتبط
این صفحه نحوه راهاندازی و اجرای یک نمونه با استفاده از پیادهسازی کلاینت مرجع C++ را توضیح میدهد. برای کسب اطلاعات بیشتر در مورد کلاینت TypeScript، به راهنمای سریع کلاینت مرجع TypeScript مراجعه کنید.
پیشنیازها
برای اجرای این کوئیکاستارت، به پیشنیازهای زیر نیاز دارید:
- شما مخزن گیتهاب را کلون کردهاید.
- بازل ۷.۴.۱ .
- یک پروژه Google Cloud با رابط برنامهنویسی کاربردی REST گوگل میت (Google Meet REST API) فعال.
یک حساب کاربری گوگل ورک اسپیس.
توجه : لطفاً حتماً از نسخه dpp نمونههای api meida استفاده کنید، زیرا در حال حاضر مشکلات ناسازگاری وجود دارد که ما به طور فعال در حال حل آنها هستیم.
فعال کردن Meet REST API
قبل از استفاده از APIهای گوگل، باید آنها را در یک پروژه گوگل کلود فعال کنید. میتوانید یک یا چند API را در یک پروژه گوگل کلود فعال کنید.کنسول گوگل کلود
در کنسول Google Cloud، رابط برنامهنویسی Meet REST را فعال کنید.
تأیید کنید که Meet REST API را در پروژه Cloud صحیح فعال میکنید، سپس روی Next کلیک کنید.
تأیید کنید که Meet REST API را فعال میکنید، سپس روی فعال کردن کلیک کنید.
رابط خط فرمان جیکلاود
در صورت لزوم، پروژه Cloud فعلی را روی پروژهای که ایجاد کردهاید تنظیم کنید:
gcloud config set project PROJECT_IDبه جای PROJECT_ID ، شناسه پروژه ابری که ایجاد کردهاید را قرار دهید.
فعال کردن Meet REST API:
gcloud services enable meet.googleapis.com
ساخت کلاینت C++
پیادهسازی 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توجه : Commit
b00c469cad3f8c926fcf81ded90b90b6e1e62b9cآخرین نسخه شناخته شدهای است که به دلیل بهروزرسانیهای toolchain و abseil با نسخههای ما کار میکند. این ممکن است در آینده تغییر کند. این مجموعه دستورات در حال حاضر کار میکند، اما در صورت تغییر ابزارهای اساسی، باید به لینک ارائه شده مراجعه کنید. اگر در حال ساخت نسخهای غیر از 64 بیتی Debian یا Ubuntu Linux هستید، تنظیمات پیشنیاز شما ممکن است متفاوت باشد.پس از ساخت libwebrtc ، فایل
WORKSPACEخود را بهروزرسانی کنید تا به دایرکتوریwebrtc-checkoutشما اشاره کند. مسیرwebrtc_pathرا که در بالای آن فایل قرار دارد، بهروزرسانی کنید:webrtc_path = "/usr/local/myuser/webrtc-checkout/"از Bazel برای ساخت کلاینت C++ استفاده کنید:
$ bazel build //cpp/...
توجه : شما باید از Bazel نسخه ۷.۴.۱ استفاده کنید. اگر نسخههای جدیدتر Bazel را نصب کردهاید، میتوانید آن را با استفاده از
bazel-7.4.1 build/run/test ...اجرا کنید.
در صورت تمایل، تستها را اجرا کنید:
$ bazel test //cpp/...
تولید توکنهای OAuth
برای اتصال به Meet Media API، برنامه شما باید از OAuth برای تولید توکنهای دسترسی استفاده کند. برای کسب اطلاعات بیشتر در مورد دسترسی به APIهای گوگل با OAuth، به بخش «استفاده از OAuth 2.0 برای دسترسی به APIهای گوگل» مراجعه کنید.
شما میتوانید از OAuth 2.0 Playground برای تولید توکنها استفاده کنید. هنگام استفاده از playground، حتماً موارد زیر را رعایت کنید:
- از شناسه کلاینت و اطلاعات محرمانه پروژه ابری خود استفاده کنید.
- دامنههای صحیح را درخواست کنید.
- وارد حساب گوگل خود شوید و دسترسی را بپذیرید.
پس از تکمیل، روی دکمهی Exchange authorization code for tokens کلیک کنید و توکن دسترسی تولید شده را کپی کنید.
شروع یک جلسه
جلسه را با استفاده از همان حساب کاربری که برای تولید توکن OAuth استفاده کردهاید، شروع کنید . کد جلسه را کپی کنید. اکنون آماده اجرای نمونهها هستید.
برنامههای نمونه
مخزن گیتهاب نمونههایی برای دریافت رسانه و فرادادههای شرکتکنندگان از یک جلسه ارائه میدهد.
این نمونهها دادهها را برای مدت زمان مشخصی (پیشفرض ۳ ثانیه است) جمعآوری میکنند و دادههای جمعآوریشده را در فایلها مینویسند.
فایلهای صوتی با فرمت 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 را مشخص کنید. پیشفرض آن https://meet.googleapis.com/v2alpha/ است. |