এই পৃষ্ঠাটি ব্যাখ্যা করে যে কিভাবে C++ রেফারেন্স ক্লায়েন্ট বাস্তবায়ন ব্যবহার করে একটি নমুনা সেট আপ এবং চালাতে হয়। পরিবর্তে TypeScript ক্লায়েন্ট সম্পর্কে জানতে, TypeScript রেফারেন্স ক্লায়েন্ট quickstart দেখুন।
পূর্বশর্ত
এই কুইকস্টার্ট চালানোর জন্য, আপনার নিম্নলিখিত পূর্বশর্তগুলির প্রয়োজন:
- আপনি GitHub সংগ্রহস্থল ক্লোন করেছেন।
- ব্যাজেল 7.4.1 ।
- একটি Google ক্লাউড প্রকল্প ।
- Google Meet চালু আছে এমন একটি Google Workspace অ্যাকাউন্ট।
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
দ্রষ্টব্য : কমিট
b00c469cad3f8c926fcf81ded90b90b6e1e62b9c
টুলচেন এবং অ্যাবসিল আপডেটের কারণে আমাদের বিল্ডগুলির সাথে কাজ করার জন্য সর্বশেষ পরিচিত সংস্করণ। এটি ভবিষ্যতে পরিবর্তন হতে পারে। কমান্ডের এই সেটটি এখন কাজ করে, তবে অন্তর্নিহিত টুলিং পরিবর্তনের ক্ষেত্রে প্রদত্ত লিঙ্কটি উল্লেখ করা উচিত। আপনি যদি একটি নন-x64 ডেবিয়ান বা উবুন্টু লিনাক্স ভেরিয়েন্টের জন্য তৈরি করছেন, আপনার পূর্বশর্ত সেটআপ ভিন্ন হতে পারে।libwebrtc তৈরি করার পরে, আপনার
webrtc-checkout
ডিরেক্টরিতে নির্দেশ করতে আপনারWORKSPACE
ফাইলটি আপডেট করুন। সেই ফাইলের শীর্ষের কাছেwebrtc_path
পাথ আপডেট করুন:webrtc_path =
"/usr/local/myuser/webrtc-checkout/" C++ ক্লায়েন্ট তৈরি করতে Bazel ব্যবহার করুন:
$ bazel build //cpp/...
দ্রষ্টব্য : আপনার Bazel 7.4.1 ব্যবহার করা উচিত। আপনার যদি Bazel-এর নতুন সংস্করণ ইনস্টল করা থাকে, তাহলে আপনি
bazel-7.4.1 build/run/test ...
ঐচ্ছিকভাবে, পরীক্ষা চালান:
$ bazel test //cpp/...
OAuth টোকেন তৈরি করুন
Meet Media API-এর সাথে কানেক্ট করতে, অ্যাক্সেস টোকেন জেনারেট করতে আপনার অ্যাপকে অবশ্যই OAuth ব্যবহার করতে হবে। OAuth এর সাথে Google APIগুলি অ্যাক্সেস করার বিষয়ে আরও জানতে, Google APIগুলি অ্যাক্সেস করতে OAuth 2.0 ব্যবহার করা দেখুন৷
আপনি টোকেন তৈরি করতে OAuth 2.0 খেলার মাঠ ব্যবহার করতে পারেন। খেলার মাঠ ব্যবহার করার সময়, নিশ্চিত করুন:
- আপনার ক্লাউড প্রকল্প থেকে আপনার ক্লায়েন্ট আইডি এবং গোপন শংসাপত্র ব্যবহার করুন।
- সঠিক সুযোগের জন্য অনুরোধ করুন।
- একটি 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
(ঐচ্ছিক) Linux এবং Mac এ আউটপুট ফাইল প্লে করতে 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 | Meet Media API API-এর URL উল্লেখ করুন। ডিফল্ট https://meet.googleapis.com/v2alpha/ । |
সম্পর্কিত বিষয়
,এই পৃষ্ঠাটি ব্যাখ্যা করে যে কিভাবে C++ রেফারেন্স ক্লায়েন্ট বাস্তবায়ন ব্যবহার করে একটি নমুনা সেট আপ এবং চালাতে হয়। পরিবর্তে TypeScript ক্লায়েন্ট সম্পর্কে জানতে, TypeScript রেফারেন্স ক্লায়েন্ট quickstart দেখুন।
পূর্বশর্ত
এই কুইকস্টার্ট চালানোর জন্য, আপনার নিম্নলিখিত পূর্বশর্তগুলির প্রয়োজন:
- আপনি GitHub সংগ্রহস্থল ক্লোন করেছেন।
- ব্যাজেল 7.4.1 ।
- একটি Google ক্লাউড প্রকল্প ।
- Google Meet চালু আছে এমন একটি Google Workspace অ্যাকাউন্ট।
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
দ্রষ্টব্য : কমিট
b00c469cad3f8c926fcf81ded90b90b6e1e62b9c
টুলচেন এবং অ্যাবসিল আপডেটের কারণে আমাদের বিল্ডগুলির সাথে কাজ করার জন্য সর্বশেষ পরিচিত সংস্করণ। এটি ভবিষ্যতে পরিবর্তন হতে পারে। কমান্ডের এই সেটটি এখন কাজ করে, তবে অন্তর্নিহিত টুলিং পরিবর্তনের ক্ষেত্রে প্রদত্ত লিঙ্কটি উল্লেখ করা উচিত। আপনি যদি একটি নন-x64 ডেবিয়ান বা উবুন্টু লিনাক্স ভেরিয়েন্টের জন্য তৈরি করছেন, আপনার পূর্বশর্ত সেটআপ ভিন্ন হতে পারে।libwebrtc তৈরি করার পরে, আপনার
webrtc-checkout
ডিরেক্টরিতে নির্দেশ করতে আপনারWORKSPACE
ফাইলটি আপডেট করুন। সেই ফাইলের শীর্ষের কাছেwebrtc_path
পাথ আপডেট করুন:webrtc_path =
"/usr/local/myuser/webrtc-checkout/" C++ ক্লায়েন্ট তৈরি করতে Bazel ব্যবহার করুন:
$ bazel build //cpp/...
দ্রষ্টব্য : আপনার Bazel 7.4.1 ব্যবহার করা উচিত। আপনার যদি Bazel-এর নতুন সংস্করণ ইনস্টল করা থাকে, তাহলে আপনি
bazel-7.4.1 build/run/test ...
ঐচ্ছিকভাবে, পরীক্ষা চালান:
$ bazel test //cpp/...
OAuth টোকেন তৈরি করুন
Meet Media API-এর সাথে কানেক্ট করতে, অ্যাক্সেস টোকেন জেনারেট করতে আপনার অ্যাপকে অবশ্যই OAuth ব্যবহার করতে হবে। OAuth এর সাথে Google APIগুলি অ্যাক্সেস করার বিষয়ে আরও জানতে, Google APIগুলি অ্যাক্সেস করতে OAuth 2.0 ব্যবহার করা দেখুন৷
আপনি টোকেন তৈরি করতে OAuth 2.0 খেলার মাঠ ব্যবহার করতে পারেন। খেলার মাঠ ব্যবহার করার সময়, নিশ্চিত করুন:
- আপনার ক্লাউড প্রকল্প থেকে আপনার ক্লায়েন্ট আইডি এবং গোপন শংসাপত্র ব্যবহার করুন।
- সঠিক সুযোগের জন্য অনুরোধ করুন।
- একটি 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
(ঐচ্ছিক) Linux এবং Mac এ আউটপুট ফাইল প্লে করতে 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 | Meet Media API API-এর URL উল্লেখ করুন। ডিফল্ট https://meet.googleapis.com/v2alpha/ । |