Meet Media API: دليل البدء السريع لبرنامج مرجعي لإصدار C++

توضّح هذه الصفحة كيفية إعداد نموذج وتشغيله باستخدام تنفيذ العميل المرجعي بلغة C++‎. للاطّلاع على معلومات حول برنامج TypeScript، يُرجى الرجوع إلى دليل البدء السريع لبرنامج TypeScript المرجعي.

المتطلبات الأساسية

لتنفيذ هذا التشغيل السريع، يجب استيفاء المتطلبات الأساسية التالية:

تفعيل واجهة برمجة تطبيقات REST في Meet

قبل استخدام واجهات Google APIs، عليك تفعيلها في مشروع على Google Cloud. يمكنك تفعيل واجهة برمجة تطبيق واحدة أو أكثر في مشروع واحد على Google Cloud.

Google Cloud Console

  1. في Google Cloud Console، فعِّل واجهة برمجة تطبيقات Meet REST.

    تفعيل واجهات برمجة التطبيقات

  2. تأكَّد من أنّك بصدد تفعيل واجهة Meet REST API في مشروع Cloud الصحيح، ثم انقر على التالي.

  3. تأكَّد من تفعيل واجهة برمجة تطبيقات REST في Meet، ثم انقر على تفعيل.

gcloud CLI

  1. إذا لزم الأمر، اضبط مشروع Cloud الحالي على المشروع الذي أنشأته:

    gcloud config set project PROJECT_ID

    استبدِل PROJECT_ID بمعرّف المشروع لمشروع Cloud الذي أنشأته.

  2. فعِّل واجهة برمجة تطبيقات REST في Meet باتّباع الخطوات التالية:

    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 هو أحدث إصدار معروف يعمل مع إصداراتنا بسبب تحديثات مجموعة الأدوات وAbseil. وقد يتغيّر ذلك في المستقبل. تعمل مجموعة الأوامر هذه الآن، ولكن يجب الرجوع إلى الرابط المقدَّم في حال حدوث أي تغييرات في الأدوات الأساسية. إذا كنت تنشئ إصدارًا من Debian أو Ubuntu Linux غير x64، قد يختلف إعداد المتطلبات الأساسية.

  2. بعد إنشاء libwebrtc، عدِّل ملف WORKSPACE للإشارة إلى الدليل webrtc-checkout. عدِّل مسار webrtc_path بالقرب من أعلى ذلك الملف:

    webrtc_path = "/usr/local/myuser/webrtc-checkout/" 
    
  3. استخدِم Bazel لإنشاء برنامج C++:

    $ bazel build //cpp/...
    

ملاحظة: يجب استخدام الإصدار 7.4.1 من Bazel. إذا كانت لديك إصدارات أحدث من Bazel مثبّتة، يمكنك تشغيلها باستخدام bazel-7.4.1 build/run/test ...

  1. يمكنك اختياريًا إجراء الاختبارات:

    $ bazel test //cpp/...
    

إنشاء رموز OAuth المميزة

لربط تطبيقك بواجهة برمجة التطبيقات Meet Media API، يجب أن يستخدم التطبيق بروتوكول OAuth لإنشاء رموز مميزة للوصول. لمزيد من المعلومات حول الوصول إلى Google APIs باستخدام OAuth، يُرجى الاطّلاع على استخدام بروتوكول OAuth 2.0 للدخول إلى Google APIs.

يمكنك استخدام مساحة بروتوكول OAuth 2.0 لإنشاء رموز مميزة. عند استخدام "مساحة المرح"، احرص على ما يلي:

  • استخدِم معرّف العميل وبيانات الاعتماد السرية من مشروعك على السحابة الإلكترونية.
  • طلب النطاقات الصحيحة
  • سجِّل الدخول إلى حساب Google واقبل منح الإذن بالوصول.

بعد الانتهاء، انقر على الزر Exchange authorization code for tokens وانسخ رمز الدخول الذي تم إنشاؤه.

بدء اجتماع

ابدأ اجتماعًا باستخدام حساب المستخدم نفسه الذي استخدمته لإنشاء رمز OAuth المميز. انسخ رمز الاجتماع. أنت الآن جاهز لتشغيل النماذج.

نماذج التطبيقات

يوفّر مستودع GitHub نماذج لتلقّي الوسائط والبيانات الوصفية للمشاركين من اجتماع.

تجمع هذه العيّنات البيانات لمدة زمنية محدّدة (القيمة التلقائية هي 3 ثوانٍ) وتكتب البيانات التي تم جمعها في ملفات.

تكون الملفات الصوتية بتنسيق 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

(اختياري) استخدام FFmpeg لتشغيل ملفات الإخراج على نظامَي التشغيل Linux وMac

يمكن استخدام 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

الخيارات

يمكنك تحديد هذه الخيارات عند تشغيل العيّنات:

Option الوصف
--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/.