Meet Media API: C++ रेफ़रंस क्लाइंट की क्विकस्टार्ट गाइड

इस पेज पर, C++ रेफ़रंस क्लाइंट के तौर पर लागू करने का इस्तेमाल करके, सैंपल को सेट अप करने और चलाने का तरीका बताया गया है. अगर आपको TypeScript क्लाइंट के बारे में जानना है, तो TypeScript रेफ़रंस क्लाइंट के लिए क्विकस्टार्ट गाइड पढ़ें.

ज़रूरी शर्तें

इस क्विकस्टार्ट को चलाने के लिए, आपको ये ज़रूरी शर्तें पूरी करनी होंगी:

Meet REST API को चालू करना

Google API का इस्तेमाल करने से पहले, आपको उन्हें Google Cloud प्रोजेक्ट में चालू करना होगा. एक ही Google Cloud प्रोजेक्ट में, एक या उससे ज़्यादा एपीआई चालू किए जा सकते हैं.

Google Cloud कंसोल

  1. Google Cloud Console में, Meet REST API को चालू करें.

    एपीआई चालू करना

  2. पुष्टि करें कि आपने सही Cloud प्रोजेक्ट में Meet REST API चालू किया है. इसके बाद, आगे बढ़ें पर क्लिक करें.

  3. पुष्टि करें कि Meet REST API चालू किया जा रहा है. इसके बाद, चालू करें पर क्लिक करें.

gcloud सीएलआई

  1. अगर ज़रूरी हो, तो मौजूदा Cloud प्रोजेक्ट को उस प्रोजेक्ट पर सेट करें जिसे आपने बनाया है:

    gcloud config set project PROJECT_ID

    PROJECT_ID की जगह, बनाए गए Cloud प्रोजेक्ट का प्रोजेक्ट आईडी डालें.

  2. Meet REST API को चालू करें:

    gcloud services enable meet.googleapis.com

C++ क्लाइंट बनाना

  1. 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 के अलावा किसी अन्य Debian या Ubuntu Linux वैरिएंट के लिए ऐप्लिकेशन बनाना है, तो हो सकता है कि आपको अलग से सेटअप करना पड़े.

  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 Playground का इस्तेमाल किया जा सकता है. प्लेग्राउंड का इस्तेमाल करते समय, इन बातों का ध्यान रखें:

  • अपने क्लाउड प्रोजेक्ट से क्लाइंट आईडी और सीक्रेट क्रेडेंशियल का इस्तेमाल करें.
  • सही स्कोप का अनुरोध करें.
  • किसी Google खाते में साइन इन करें और ऐक्सेस स्वीकार करें.

इसके बाद, Exchange authorization code for tokens बटन पर क्लिक करें और जनरेट किया गया ऐक्सेस टोकन कॉपी करें.

मीटिंग शुरू करना

उसी उपयोगकर्ता खाते का इस्तेमाल करके मीटिंग शुरू करें जिसका इस्तेमाल आपने OAuth टोकन जनरेट करने के लिए किया था. मीटिंग कोड कॉपी करें. अब सैंपल चलाए जा सकते हैं.

सैंपल ऐप्लिकेशन

GitHub रिपॉज़िटरी में, मीटिंग से मीडिया और हिस्सा लेने वाले लोगों का मेटाडेटा पाने के लिए सैंपल उपलब्ध हैं.

ये सैंपल, तय की गई समयावधि के लिए डेटा इकट्ठा करते हैं. डिफ़ॉल्ट रूप से यह समयावधि तीन सेकंड होती है. इसके बाद, इकट्ठा किए गए डेटा को फ़ाइलों में सेव कर दिया जाता है.

ऑडियो फ़ाइलें 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

(ज़रूरी नहीं) Linux और Mac पर आउटपुट फ़ाइलें चलाने के लिए FFmpeg का इस्तेमाल करना

बनाई गई ऑडियो और वीडियो फ़ाइलों को चलाने के लिए, 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 Meet Media API के लिए यूआरएल डालें. डिफ़ॉल्ट रूप से, यह https://meet.googleapis.com/v2alpha/ पर सेट होती है.