Meet Media API: C++ রেফারেন্স ক্লায়েন্ট কুইকস্টার্ট

এই পৃষ্ঠাটি ব্যাখ্যা করে কিভাবে C++ রেফারেন্স ক্লায়েন্ট বাস্তবায়ন ব্যবহার করে একটি নমুনা সেট আপ এবং রান করতে হয়। পরিবর্তে টাইপস্ক্রিপ্ট ক্লায়েন্ট সম্পর্কে জানতে, টাইপস্ক্রিপ্ট রেফারেন্স ক্লায়েন্ট কুইকস্টার্ট দেখুন।

পূর্বশর্ত

এই কুইকস্টার্টটি চালানোর জন্য, আপনার নিম্নলিখিত পূর্বশর্তগুলি প্রয়োজন:

  • তুমি GitHub রিপোজিটরি ক্লোন করেছো।
  • ব্যাজেল ৭.৪.১
  • Google Meet REST API সক্ষম করা একটি Google ক্লাউড প্রকল্প
  • একটি Google Workspace অ্যাকাউন্ট।

    দ্রষ্টব্য : দয়া করে meida api নমুনার dpp রিলিজ ব্যবহার করতে ভুলবেন না কারণ বর্তমানে কিছু অসঙ্গতিপূর্ণ সমস্যা রয়েছে যা আমরা সক্রিয়ভাবে সমাধানের জন্য কাজ করছি।

Meet REST API সক্ষম করুন

গুগল এপিআই ব্যবহার করার আগে, আপনাকে গুগল ক্লাউড প্রোজেক্টে সেগুলি চালু করতে হবে। আপনি একটি গুগল ক্লাউড প্রোজেক্টে এক বা একাধিক এপিআই চালু করতে পারেন।

গুগল ক্লাউড কনসোল

  1. গুগল ক্লাউড কনসোলে, Meet REST API সক্ষম করুন।

    API গুলি সক্ষম করুন

  2. নিশ্চিত করুন যে আপনি সঠিক ক্লাউড প্রজেক্টে Meet REST API সক্ষম করছেন, তারপর Next এ ক্লিক করুন।

  3. নিশ্চিত করুন যে আপনি Meet REST API সক্ষম করছেন, তারপর সক্ষম করুন এ ক্লিক করুন।

জিক্লাউড সিএলআই

  1. প্রয়োজনে, বর্তমান ক্লাউড প্রজেক্টটি আপনার তৈরি করা প্রজেক্টে সেট করুন:

    gcloud config set project PROJECT_ID

    আপনার তৈরি করা ক্লাউড প্রোজেক্টের প্রোজেক্ট আইডি দিয়ে PROJECT_ID প্রতিস্থাপন করুন।

  2. Meet REST API সক্ষম করুন:

    gcloud services enable meet.googleapis.com

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 হল সর্বশেষ পরিচিত সংস্করণ। ভবিষ্যতে এটি পরিবর্তিত হতে পারে। এই কমান্ড সেটটি এখন কাজ করে, তবে অন্তর্নিহিত টুলিং পরিবর্তন হলে প্রদত্ত লিঙ্কটি উল্লেখ করা উচিত। আপনি যদি একটি নন-x64 ডেবিয়ান বা উবুন্টু লিনাক্স ভেরিয়েন্টের জন্য তৈরি করেন, তাহলে আপনার পূর্বশর্ত সেটআপ ভিন্ন হতে পারে।

  2. libwebrtc তৈরি করার পরে, আপনার WORKSPACE ফাইলটি আপডেট করুন যাতে আপনার webrtc-checkout ডিরেক্টরিতে নির্দেশিত হয়। ফাইলের উপরের দিকে থাকা webrtc_path পাথটি আপডেট করুন:

    webrtc_path = "/usr/local/myuser/webrtc-checkout/" 
    
  3. C++ ক্লায়েন্ট তৈরি করতে Bazel ব্যবহার করুন:

    $ bazel build //cpp/...
    

দ্রষ্টব্য : আপনার Bazel 7.4.1 ব্যবহার করা উচিত। যদি আপনার Bazel এর নতুন সংস্করণ ইনস্টল করা থাকে, তাহলে আপনি bazel-7.4.1 build/run/test ...

  1. ঐচ্ছিকভাবে, পরীক্ষাগুলি চালান:

    $ 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 টোকেন তৈরি করার জন্য যে ব্যবহারকারী অ্যাকাউন্টটি ব্যবহার করেছিলেন সেই একই অ্যাকাউন্ট ব্যবহার করে একটি মিটিং শুরু করুন । মিটিং কোডটি কপি করুন। আপনি এখন নমুনা চালানোর জন্য প্রস্তুত।

নমুনা অ্যাপ

গিটহাব রিপোজিটরি একটি মিটিং থেকে মিডিয়া এবং অংশগ্রহণকারীদের মেটাডেটা গ্রহণের নমুনা অফার করে।

এই নমুনাগুলি একটি নির্দিষ্ট সময়ের জন্য তথ্য সংগ্রহ করে (ডিফল্ট ৩ সেকেন্ড) এবং সংগৃহীত তথ্য ফাইলে লিখে রাখে।

অডিও ফাইলগুলি 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 Meet Media API API-এর URL নির্দিষ্ট করুন। ডিফল্টভাবে https://meet.googleapis.com/v2alpha/ থাকে।
,

এই পৃষ্ঠাটি ব্যাখ্যা করে কিভাবে C++ রেফারেন্স ক্লায়েন্ট বাস্তবায়ন ব্যবহার করে একটি নমুনা সেট আপ এবং রান করতে হয়। পরিবর্তে টাইপস্ক্রিপ্ট ক্লায়েন্ট সম্পর্কে জানতে, টাইপস্ক্রিপ্ট রেফারেন্স ক্লায়েন্ট কুইকস্টার্ট দেখুন।

পূর্বশর্ত

এই কুইকস্টার্টটি চালানোর জন্য, আপনার নিম্নলিখিত পূর্বশর্তগুলি প্রয়োজন:

  • তুমি GitHub রিপোজিটরি ক্লোন করেছো।
  • ব্যাজেল ৭.৪.১
  • Google Meet REST API সক্ষম করা একটি Google ক্লাউড প্রকল্প
  • একটি Google Workspace অ্যাকাউন্ট।

    দ্রষ্টব্য : দয়া করে meida api নমুনার dpp রিলিজ ব্যবহার করতে ভুলবেন না কারণ বর্তমানে কিছু অসঙ্গতিপূর্ণ সমস্যা রয়েছে যা আমরা সক্রিয়ভাবে সমাধানের জন্য কাজ করছি।

Meet REST API সক্ষম করুন

গুগল এপিআই ব্যবহার করার আগে, আপনাকে গুগল ক্লাউড প্রোজেক্টে সেগুলি চালু করতে হবে। আপনি একটি গুগল ক্লাউড প্রোজেক্টে এক বা একাধিক এপিআই চালু করতে পারেন।

গুগল ক্লাউড কনসোল

  1. গুগল ক্লাউড কনসোলে, Meet REST API সক্ষম করুন।

    API গুলি সক্ষম করুন

  2. নিশ্চিত করুন যে আপনি সঠিক ক্লাউড প্রজেক্টে Meet REST API সক্ষম করছেন, তারপর Next এ ক্লিক করুন।

  3. নিশ্চিত করুন যে আপনি Meet REST API সক্ষম করছেন, তারপর সক্ষম করুন এ ক্লিক করুন।

জিক্লাউড সিএলআই

  1. প্রয়োজনে, বর্তমান ক্লাউড প্রজেক্টটি আপনার তৈরি করা প্রজেক্টে সেট করুন:

    gcloud config set project PROJECT_ID

    আপনার তৈরি করা ক্লাউড প্রোজেক্টের প্রোজেক্ট আইডি দিয়ে PROJECT_ID প্রতিস্থাপন করুন।

  2. Meet REST API সক্ষম করুন:

    gcloud services enable meet.googleapis.com

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 হল সর্বশেষ পরিচিত সংস্করণ। ভবিষ্যতে এটি পরিবর্তিত হতে পারে। এই কমান্ড সেটটি এখন কাজ করে, তবে অন্তর্নিহিত টুলিং পরিবর্তন হলে প্রদত্ত লিঙ্কটি উল্লেখ করা উচিত। আপনি যদি একটি নন-x64 ডেবিয়ান বা উবুন্টু লিনাক্স ভেরিয়েন্টের জন্য তৈরি করেন, তাহলে আপনার পূর্বশর্ত সেটআপ ভিন্ন হতে পারে।

  2. libwebrtc তৈরি করার পরে, আপনার WORKSPACE ফাইলটি আপডেট করুন যাতে আপনার webrtc-checkout ডিরেক্টরিতে নির্দেশিত হয়। ফাইলের উপরের দিকে থাকা webrtc_path পাথটি আপডেট করুন:

    webrtc_path = "/usr/local/myuser/webrtc-checkout/" 
    
  3. C++ ক্লায়েন্ট তৈরি করতে Bazel ব্যবহার করুন:

    $ bazel build //cpp/...
    

দ্রষ্টব্য : আপনার Bazel 7.4.1 ব্যবহার করা উচিত। যদি আপনার Bazel এর নতুন সংস্করণ ইনস্টল করা থাকে, তাহলে আপনি bazel-7.4.1 build/run/test ...

  1. ঐচ্ছিকভাবে, পরীক্ষাগুলি চালান:

    $ 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 টোকেন তৈরি করার জন্য যে ব্যবহারকারী অ্যাকাউন্টটি ব্যবহার করেছিলেন সেই একই অ্যাকাউন্ট ব্যবহার করে একটি মিটিং শুরু করুন । মিটিং কোডটি কপি করুন। আপনি এখন নমুনা চালানোর জন্য প্রস্তুত।

নমুনা অ্যাপ

গিটহাব রিপোজিটরি একটি মিটিং থেকে মিডিয়া এবং অংশগ্রহণকারীদের মেটাডেটা গ্রহণের নমুনা অফার করে।

এই নমুনাগুলি একটি নির্দিষ্ট সময়ের জন্য তথ্য সংগ্রহ করে (ডিফল্ট ৩ সেকেন্ড) এবং সংগৃহীত তথ্য ফাইলে লিখে রাখে।

অডিও ফাইলগুলি 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 Meet Media API API-এর URL নির্দিষ্ট করুন। ডিফল্টভাবে https://meet.googleapis.com/v2alpha/ থাকে।