1. مقدمة
تعمل شبكات توصيل المحتوى (CDN) على تحسين أداء المستخدم من خلال التخزين المؤقت للمحتوى الذي يتم الوصول إليه بشكل متكرر بالقرب من المستخدمين النهائيين، وإنهاء الاتصالات بالقرب من العملاء، وإعادة استخدام الاتصالات إلى المصدر، واعتماد بروتوكولات الشبكة الحديثة والتخصيصات. وبالنسبة إلى المستخدمين (وعملائنا)، يعني هذا تقليل وقت الاستجابة وزيادة الموثوقية وتقليل التكلفة، ما يؤدي إلى تحسين المبيعات وتجربة الويب وزيادة صافية في تجربة المستخدم. يعمل عدد قليل جدًا من المواقع ومنصات بث الفيديو الحديثة بدون شبكة توصيل للمحتوى في الوقت الحالي.
ما ستتعرَّف عليه
سيرشدنا هذا الدرس إلى الخطوات اللازمة لنشر بيئة سير عمل البث المباشر باستخدام Media CDN (CDN) + Cloud Media Live Streaming API (تحويل ترميز الفيديوهات المباشرة) + Cloud Storage (تخزين الفيديوهات) + مشغّل الفيديو (VLC وGoogle Shaka Player وما إلى ذلك: مشغّل HLS + MPEG-DASH جاهز).
سنتولى إعداد مكونات واجهة برمجة التطبيقات لبث البث المباشر - الإدخال والقناة - وبدء خلاصة مباشرة إلى الإدخال/القناة باستخدام FFmpeg (يمكن أن تنشئ FFmpeg إشارة اختبار مباشر). ستحوِّل واجهة Live Streaming API ترميز الخلاصة المباشرة. سيتم تخزين بيان الفيديو والأقسام التي تم تحويل ترميزها في حزمة على Cloud Storage. بعد ذلك، سنعمل على إعداد Media CDN باستخدام حزمة Cloud Storage للفيديو المباشر كالمصدر. وأخيرًا، سيتم استخدام مشغّل VLC لتشغيل المحتوى المباشر الذي تمّ تخزينه مؤقتًا من خلال Media CDN. سنقوم أيضًا بإعداد لوحة تحكم Cloud Monitoring لعرض نشاط Media CDN.
ما الذي ستنشئه
في هذا التمرين المعملي، سنقوم بإعداد البيئة بناءً على البنية التالية:
سنقوم بإعداد المكونات التالية وننفذ المهام التالية كجزء من التمرين المعملي:
- إنشاء حزمة Google Cloud Storage (GCS) لتخزين الفيديوهات المباشرة التي تم تحويل ترميزها
- ضبط واجهة برمجة التطبيقات Live Streaming API لتحويل ترميز الفيديو إلى تنسيقات متعددة: HLS + MPEG DASH وSD وHD
- إعداد مكونات البث المباشر: الإدخال/القناة
- بدء قناة البث المباشر
- إعداد Media CDN باستخدام حزمة GCS كمصدر
- ابدأ بإعداد FFmpeg لبثّ المحتوى المباشر.
- بث الخلاصة المباشرة التي تم تحويل ترميزها باستخدام مشغّل فيديو
- إعداد لوحة بيانات Cloud Monitoring لمراقبة نشاط Media CDN (وقت الاستجابة ونتيجة ذاكرة التخزين المؤقت وذاكرة التخزين المؤقت غير المتوفّرة وما إلى ذلك)
ملاحظة: في هذا الدرس، نفترض أنّ المستخدمين لديهم إذن بالوصول إلى Google Cloud Console وأنّه سبق لهم إعداد مشروع. نفترض أيضًا أن المستخدمين يبدأون ببيئة جديدة وليس لديهم إعداد لهذا العرض التوضيحي.
سيتم تنفيذ جميع إجراءات الضبط من خلال سطر الأوامر في Cloud Shell. يمكننا دائمًا التحقق من المكونات التي تم ضبطها عبر سطر الأوامر في وحدة التحكم. وسنرى مؤشرات خلال التمرين المعملي ستشير إلى Google Cloud Console.
2. قبل البدء
تم حظر الوصول إلى Media CDN. للوصول إلى Media CDN، يُرجى التواصل مع فريق الحساب. ويمكنها إنشاء طلب وصول نيابةً عنك. إذا كنت جزءًا من Google وتريد اختبار البث المباشر باستخدام Media CDN، تواصَل مع مزوّد خدمة Media CDN لطلب الوصول إلى Media CDN.
3- الإعداد والمتطلبات
بدء Cloud Shell
مع أنّه يمكن إدارة Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس التطبيقي Google Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.
من Google Cloud Console، انقر على رمز Cloud Shell في شريط الأدوات العلوي الأيسر:
من المفترَض أن تستغرق عملية إدارة الحسابات والاتصال بالبيئة بضع لحظات فقط. عند الانتهاء، من المفترض أن يظهر لك شيء مثل هذا:
يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت وتعمل على Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. يمكنك تنفيذ جميع أعمالك في هذا الدرس التطبيقي حول الترميز من خلال متصفّح. لا تحتاج إلى تثبيت أي تطبيقات.
4. إصدار حزمة تطوير البرامج (SDK) لخدمة Google Cloud
في وقت كتابة هذه الرسالة، كان 408.0.0
هو أحدث إصدار من حزمة Google Cloud SDK. تم اختبار جميع الأوامر في هذا التمرين المعملي باستخدام أحدث إصدار من Google Cloud SDK. قبل المتابعة، يُرجى التأكّد من استخدام Cloud Shell أحدث إصدار من حزمة تطوير البرامج (SDK).
التحقّق من إصدار حزمة تطوير البرامج (SDK)
سنستخدم الأمر gcloud version
للتحقّق من إصدار حزمة تطوير البرامج (SDK).
الأمر
gcloud version | grep "Google Cloud SDK"
مثال على الناتج
Google Cloud SDK 408.0.0
الخطوات التالية
- إذا كان إصدار حزمة SDK هو
408.0.0
أو إصدار أحدث، انتقِل مباشرةً إلى القسم التالي. - إذا كان إصدار حزمة SDK أقدم من
408.0.0
، استخدِم الأمر المدرَج أدناه لتحديث حزمة SDK.
sudo apt-get update && sudo apt-get install google-cloud-sdk
5- المتطلبات الأساسية
قبل البدء في ضبط موارد GCP، نحتاج إلى إجراء ما يلي:
- إعداد متغيرات البيئة
- تفعيل واجهات برمجة تطبيقات الخدمة المطلوبة
1. إعداد متغيّرات البيئات
خلال هذا الدرس التطبيقي، سنشغِّل الأمرَين gcloud
وcurl
باستخدام بعض المتغيرات. نحن بحاجة إلى ضبط متغيرات البيئة التالية.
- رقم تعريف المشروع
- رقم المشروع
- اسم المستخدم
- المنطقة
- معرّف الإدخال
- معرّف القناة
رقم تعريف المشروع واسم المستخدم
بشكل عام، يتم ضبط متغيرات البيئة هذه مسبقًا في Cloudshell. سنستخدم الأمر env
للتحقق.
الأمر
env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME'
مثال على الناتج
DEVSHELL_PROJECT_ID=<YOUR_PROJECT_ID> LOGNAME=<YOUR_USERNAME>
إنشاء ملف env_variables
استخدِم الأمر cat
لإنشاء ملف env_variables.txt
. سينشئ الأمر أدناه الملف env_variables.txt
في الدليل الرئيسي للمستخدم.
الأوامر
cat > ~/env_variables.txt << EOF export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)") export LOCATION=us-west2 export INPUT_ID=lab-live-input export CHANNEL_ID=lab-live-channel EOF
إعداد متغيّرات البيئة
سنستخدم الأمر source
لضبط متغيرات البيئة.
الأمر
source ~/env_variables.txt
التحقّق من ضبط المتغيّرات
دعنا نتحقق من تعيين جميع متغيرات البيئة المطلوبة. من المفترض أن يظهر لنا إجمالي 6 متغيرات بيئية في الإخراج.
الأمر
env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME|PROJECT_NUMBER|LOCATION|INPUT_ID|CHANNEL_ID'
مثال على الناتج
LOCATION=us-west2 DEVSHELL_PROJECT_ID=<YOUR_PROJECT_ID> LOGNAME=<YOUR_USERNAME> PROJECT_NUMBER=<YOUR_PROJECT_NUMBER> INPUT_ID=lab-live-input CHANNEL_ID=lab-live-channel
2. تفعيل واجهات برمجة تطبيقات الخدمة المطلوبة
نحتاج إلى التأكّد من تفعيل واجهات برمجة التطبيقات التالية في مشروعنا.
- Network Services API
- واجهة برمجة تطبيقات إدارة الشهادات
- واجهة برمجة تطبيقات البث المباشر
- واجهة برمجة التطبيقات لذاكرة التخزين المؤقت لـ Media CDN Edge
تفعيل Network Services API
لتفعيل واجهة برمجة التطبيقات لخدمات الشبكة، شغِّل الأمر التالي:
الأمر
gcloud services enable networkservices.googleapis.com
تفعيل واجهة برمجة تطبيقات إدارة الشهادات
لتفعيل واجهة برمجة تطبيقات إدارة الشهادات، شغِّل الأمر التالي:
الأمر
gcloud services enable certificatemanager.googleapis.com
تفعيل واجهة برمجة تطبيقات البث المباشر
لتفعيل واجهة برمجة التطبيقات للبث المباشر، شغِّل الأمر التالي:
الأمر
gcloud services enable livestream.googleapis.com
تفعيل واجهة برمجة التطبيقات Media CDN Edge Cache API
لتفعيل واجهة برمجة التطبيقات Media CDN Edge Cache API، شغِّل الأمر التالي:
الأمر
gcloud services enable edgecache.googleapis.com
التحقّق من تفعيل واجهات برمجة التطبيقات
شغِّل الأمر gcloud services list
لعرض جميع واجهات برمجة التطبيقات المفعّلة. ومن المفترض أن تظهر لنا 4 واجهات برمجة تطبيقات في الإخراج.
الأمر
gcloud services list | grep -E 'networkservices|certificatemanager|livestream|edgecache'
مثال على الناتج
NAME: certificatemanager.googleapis.com NAME: livestream.googleapis.com NAME: networkservices.googleapis.com NAME: edgecache.googleapis.com
6- إنشاء حزمة Cloud Storage
في هذا القسم، سننفّذ ما يلي:
- إنشاء حزمة في Cloud Storage
- إتاحة الحزمة للجميع
وفي وقت لاحق من التمرين المعملي، سنستخدم هذه الحزمة لتخزين ملفات الفيديو التي تم تحويل ترميزها. ستعمل هذه الحزمة أيضًا كوحدة تخزين أصل لخدمة Media CDN.
1. إنشاء الحزمة
سنستخدم الأمر gsutil mb
لإنشاء الحزمة:
الأمر
gsutil mb gs://live-streaming-storage-$LOGNAME
2. إتاحة إمكانية الوصول للجميع إلى الحزمة
سنستخدم الأمر iam
gsutil
لإتاحة الملفات للجميع:
الأمر
gsutil iam ch allUsers:objectViewer gs://live-streaming-storage-$LOGNAME
7. إعداد بيئة Live Streaming API
يتم تصميم مكونات سلسلة واجهة برمجة التطبيقات للبث المباشر على النحو التالي:
لقد أنشأنا حزمة Cloud Storage live-streaming-storage-$LOGNAME
في القسم السابق. في القسمَين التاليَين، سننشئ الموارد التالية:
- إدخال البث المباشر: نقطة نهاية الإدخال هي نقطة نهاية يرسل إليها برنامج الترميز البث الوارد. يمكنك استخدام نقطة نهاية الإدخال لتحديد إعدادات البث، مثل درجة دقة الإدخال ونوع الإدخال واقتصاص الفيديو.
- قناة البث المباشر: القناة هي مورد يستوعب البث الوارد من خلال نقطة نهاية إدخال، ويحوّل ترميز البث المباشر إلى عروض متعددة، وينشر أحداث بث مباشر للمخرجات بتنسيقات معيّنة في المكان المحدّد. يمكنك تضمين مصدرَي بيانات إدخال أساسي واحتياطي في القناة نفسها.
سننشئ الموارد التالية لاحقًا في التمرين المعملي:
- برنامج الترميز: برنامج الترميز هو برنامج يُستخدم لإرسال أحداث بث الإدخال. سوف نستخدم في هذا التمرين المعملي برنامج FFmpeg.
8. إنشاء نقطة نهاية الإدخال وضبطها
إنشاء ملف enter.json
سننشئ ملف input.json
لتحديد نوع إشارة البث المباشر. نستخدم في هذا التمرين المعملي إشارة RTMP مباشرة.
الأمر
cat > input.json << EOF { "type": "RTMP_PUSH" } EOF
إنشاء "نقطة نهاية الإدخال"
بعد الانتهاء من كتابة هذا التمرين، لن يكون هناك دعم gcloud لواجهة برمجة تطبيقات البث المباشر. سنستخدم الأمر curl
لإجراء طلبات البيانات من واجهة برمجة التطبيقات.
الأمر
curl -X POST \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ -H "Content-Type: application/json; charset=utf-8" \ -d @input.json \ "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/inputs?inputId=$INPUT_ID"
مثال على الناتج
{ "name": "projects/PROJECT_NUMBER/locations/us-west2/operations/operation-1661405972853-5e70a38d6f27f-79100d00-310671b4", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": "2022-08-25T05:39:32.884030164Z", "target": "projects/PROJECT_NUMBER/locations/us-west2/inputs/lab-live-input", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
تحتوي النتيجة على الكثير من المعلومات المفيدة، ولكن في الوقت الحالي، نحتاج إلى التركيز على حقلين:
- معرّف العملية: من الناتج، انسخ معرّف العملية ودوِّنه. فيما يلي معرّف العملية من مثال الناتج. ويمكن العثور على ذلك في سطر الإخراج الذي يبدأ بـ
"name"
."operation-1661405972853-5e70a38d6f27f-79100d00-310671b4"
- الحالة: علينا انتظار تغيير الحالة من
"done": false
إلى"done": true
التحقّق من الحالة
قبل المتابعة، نحتاج إلى التحقّق من إنشاء نقطة نهاية الإدخال بنجاح وجاهزيتها.
في الأمر أدناه، استبدل <OPERATION>
برقم تعريف العملية التي حصلنا عليها للتو أعلاه. في هذا المثال، هي "operation-1661405972853-5e70a38d6f27f-79100d00-310671b4"
.
الأمر
export OPERATION_ID_1=<OPERATION>
الأمر
curl -X GET \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/operations/$OPERATION_ID_1"
مثال على الناتج
{ "name": "projects/PROJECT_NUMBER/locations/us-west2/operations/operation-1661408816982-5e70ae25cea49-617844f0-8fdcb4a1", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": "2022-08-25T06:26:57.001530499Z", "endTime": "2022-08-25T06:26:57.043623522Z", "target": "projects/PROJECT_NUMBER/locations/us-west2/inputs/lab-live-input", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.Input", "name": "projects/PROJECT_ID/locations/us-west2/inputs/lab-live-input", "createTime": "2022-08-25T06:26:56.997623672Z", "updateTime": "2022-08-25T06:26:56.997623672Z", "type": "RTMP_PUSH", "uri": "rtmp://34.94.97.220/live/4b7846a1-4a67-44ed-bfd0-d98281b6464a", "tier": "HD" } }
أعِد تشغيل الأمر إلى أن يظهر لك "done:true"
يشير إلى أنّه تم إنشاء نقطة نهاية الإدخال وأنّها جاهزة.
حفظ عنوان URI
سنستخدم URI
من المخرجات السابقة لاحقًا في التمرين المعملي. لنضبط متغيّر بيئة لـ URI
في الوقت الحالي.
الأمر
export URI=<uri>
استبدِل <uri>
بعنوان URI الذي ذكرته أعلاه. يمكنك، إذا شئت، استخدام طريقة GET لاسترداد عنوان URI
الأمر
curl -s -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/inputs/$INPUT_ID" | jq .uri
9. إنشاء إعداد قناة البث المباشر
لننشئ قناة البث المباشر المرتبطة بنقطة نهاية الإدخال التي أنشأناها في القسم السابق. في المثال التالي، يتم إنشاء قناة تنشئ بثًا مباشرًا بنظام HLS وتتألف من عرض واحد بدقة عالية (1280×720). سيتم ربط القناة بنقطة نهاية الإدخال وحزمة التخزين التي أنشأناها سابقًا.
إنشاء ملف channel.json
في الوحدة الطرفية في Cloud Shell، اكتب الأمر التالي لإنشاء ملف "channel.json"
:
الأمر
cat > channel.json << EOF { "inputAttachments": [ { "key": "my-input", "input": "projects/$PROJECT_NUMBER/locations/$LOCATION/inputs/$INPUT_ID" } ], "output": { "uri": "gs://live-streaming-storage-$LOGNAME" }, "elementaryStreams": [ { "key": "es_video", "videoStream": { "h264": { "profile": "high", "widthPixels": 1280, "heightPixels": 720, "bitrateBps": 3000000, "frameRate": 30 } } }, { "key": "es_audio", "audioStream": { "codec": "aac", "channelCount": 2, "bitrateBps": 160000 } } ], "muxStreams": [ { "key": "mux_video_ts", "container": "ts", "elementaryStreams": ["es_video", "es_audio"], "segmentSettings": { "segmentDuration": "2s" } } ], "manifests": [ { "fileName": "main.m3u8", "type": "HLS", "muxStreams": [ "mux_video_ts" ], "maxSegmentCount": 5 } ] } EOF
إنشاء القناة
شغِّل الأمر curl
التالي لإنشاء القناة:
الأمر
curl -X POST \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ -H "Content-Type: application/json; charset=utf-8" \ -d @channel.json \ "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels?channelId=$CHANNEL_ID"
مثال على الناتج
{ "name": "projects/PROJECT_NUMBER/locations/us-west2/operations/operation-1661405972853-5e70a38d6f27f-79100d00-310671b4", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": "2022-08-25T05:39:32.884030164Z", "target": "projects/PROJECT_NUMBER/locations/us-west2/channels/lab-live-channel", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
دوِّن معرّف العملية وانسخه. سنحتاجه في إحدى الخطوات القادمة. ويمكن العثور على ذلك في سطر الإخراج الذي يبدأ بـ "name"
.
التحقّق من الحالة
قبل المتابعة، علينا التحقّق من أنّه تم إنشاء القناة بنجاح وأنّها جاهزة.
في الأمر أدناه، استبدل <OPERATION>
برقم تعريف العملية التي حصلنا عليها للتو أعلاه. في هذا المثال، هي operation-1661405972853-5e70a38d6f27f-79100d00-310671b4
الأمر
export OPERATION_ID_2=<OPERATION>
الأمر
curl -s -X GET \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/operations/$OPERATION_ID_2"
مثال على الناتج
"name": "projects/PROJECT_NUMBER/locations/us-west2/operations/operation-1668666801461-5eda4c3f31852-a4d2229f-0efeef9e", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": "2022-11-17T06:33:21.500841488Z", "endTime": "2022-11-17T06:33:21.529311112Z", "target": "projects/PROJECT_NUMBER/locations/us-west2/channels/lab-live-channel", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.Channel", "name": "projects/PROJECT_NAME/locations/us-west2/channels/lab-live-channel", "createTime": "2022-11-17T06:33:21.497818033Z", "updateTime": "2022-11-17T06:33:21.497818033Z", "activeInput": "my-input", "output": { "uri": "gs://live-streaming-storage-LOGNAME" }, "elementaryStreams": [ { "videoStream": { "h264": { "widthPixels": 1280, "heightPixels": 720, "frameRate": 30, "bitrateBps": 3000000, "gopDuration": "2s", "vbvSizeBits": 3000000, "vbvFullnessBits": 2700000, "entropyCoder": "cabac", "profile": "high" } }, "key": "es_video" }, { "audioStream": { "codec": "aac", "bitrateBps": 160000, "channelCount": 2, "sampleRateHertz": 48000 }, "key": "es_audio" } ], "muxStreams": [ { "key": "mux_video_ts", "container": "ts", "elementaryStreams": [ "es_video", "es_audio" ], "segmentSettings": { "segmentDuration": "2s" } } ], "manifests": [ { "fileName": "main.m3u8", "type": "HLS", "muxStreams": [ "mux_video_ts" ], "maxSegmentCount": 5, "segmentKeepDuration": "60s" } ], "streamingState": "STOPPED", "inputAttachments": [ { "key": "my-input", "input": "projects/PROJECT_NUMBER/locations/us-west2/inputs/lab-live-input" } ], "logConfig": { "logSeverity": "OFF" } } }
أعِد تشغيل الأمر إلى أن يظهر لك "done:true"
يشير إلى أنّه تم إنشاء نقطة نهاية الإدخال وأنّها جاهزة.
يُرجى العِلم أنّ قيمة "streamingState"
في الوقت الحالي هي "STOPPED"
؛ سنبدأ عرض القناة في القسم التالي.
10. بدء قناة البث المباشر
الآن بعد أن أنشأنا قناة البث المباشر، فلنبدأ إنشاء القناة. في هذا القسم، سننفّذ ما يلي:
- إطلاق قناة البث المباشر
- يُرجى التحقّق من حالة القناة، لأنّنا نريد التأكّد من أنّ قيمة
streamingState
هي"AWAITING INPUT"
.
1. إطلاق القناة
في Cloud Shell، شغِّل أمر curl
التالي لبدء القناة:
الأمر
curl -X POST \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ -H "Content-Type: application/json; charset=utf-8" \ -d "" \ "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels/$CHANNEL_ID:start"
مثال على الناتج
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/operation-1661405972853-5e70a38d6f27f-79100d00-310671b4", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": "2022-08-25T05:39:32.884030164Z", "target": "projects/PROJECT_NUMBER/locations/us-west2/channels/lab-live-channel", "verb": "start", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
2. التحقق من حالة القناة
يمكنك تنفيذ الأمر curl
التالي للاطّلاع على حالة القناة:
الأمر
curl -s -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels/$CHANNEL_ID" | grep "streamingState"
مثال على الناتج
"streamingState": "AWAITING_INPUT",
إعادة تنفيذ الأمر إلى أن يظهر لك "AWAITING_INPUT
" يشير إلى أنّ القناة تعمل وأنّها جاهزة لتلقّي إشارة.
11. تهيئة Media CDN
في هذا القسم، سننشر Media CDN - البنية الأساسية لشبكة توصيل المحتوى (CDN). سننشئ الموارد التالية:
- أصل ذاكرة التخزين المؤقت على Edge
- خدمة ذاكرة التخزين المؤقت على Edge
1. إنشاء مصدر ذاكرة التخزين المؤقت على Edge
يمثّل مصدر ذاكرة التخزين المؤقت Edge أحد مواقع المحتوى، مثل حزمة Cloud Storage أو موقع تخزين تابع لجهة خارجية أو جهاز موازنة الحمل. في مصطلحات شبكة توصيل المحتوى، فإن المصدر (أو خادم المصدر) هو الموقع الذي يوجد فيه مصدر المحتوى الذي نريد توزيعه - على سبيل المثال كل CSS وJavaScript وHTML والصور وما إلى ذلك. وفي هذا التمرين، سننشئ مصدرًا يرتبط بحزمة Cloud Storage التي أنشأناها في بداية التمرين المعملي. سنطلق على مصدر ذاكرة التخزين المؤقت Edge cme-origin
. أصل شبكة توصيل المحتوى (CDN) هو المكان الذي يتم فيه تخزين كل محتوى المصدر قبل توزيعه على خوادم التخزين المؤقت على الحافة.
سنستخدم الأمر gcloud edge-cache origins create
لإنشاء المصدر. سيستغرق الأمر بضع دقائق حتى يكتمل.
الأمر
gcloud edge-cache origins create cme-origin \ --origin-address="gs://live-streaming-storage-$LOGNAME"
مثال على الناتج
Create request issued for: cme-origin Waiting for operation [projects/my-project/locations/global/operations/operation-1612121774168-5ba3759af1919- 3fdcd7b1-99f59223] to complete...done Created origin cme-origin
2. إنشاء خدمة ذاكرة التخزين المؤقت على Edge
الآن بعد أن تم إعداد Edge Cache Origin، يمكننا إنشاء خدمة Edge Cache نفسها.
إنشاء ملف cme-demo.yaml
يتم ضبط خدمة Edge Cache Service من خلال ملف YAML
. في Cloud Shell، أنشئ ملفًا محليًا باسم cme-demo.yaml
. استخدِم vi
أو nano
أو أي محرّر آخر والصق الأسطر التالية في ملف YAML:
name: cme-demo routing: hostRules: - hosts: - demo.cme.com pathMatcher: routes pathMatchers: - name: routes routeRules: - headerAction: responseHeadersToAdd: - headerName: x-cache-status headerValue: "{cdn_cache_status}" matchRules: - prefixMatch: / origin: cme-origin priority: 100 routeAction: cdnPolicy: cacheKeyPolicy: {} cacheMode: FORCE_CACHE_ALL defaultTtl: 3600s signedRequestMode: DISABLED - headerAction: responseHeadersToAdd: - headerName: x-cache-status headerValue: "{cdn_cache_status}" matchRules: - pathTemplateMatch: /**.m3u8 origin: cme-origin priority: 25 routeAction: cdnPolicy: cacheKeyPolicy: {} cacheMode: FORCE_CACHE_ALL defaultTtl: 1s signedRequestMode: DISABLED - headerAction: {} matchRules: - pathTemplateMatch: /**.ts origin: cme-origin priority: 50 routeAction: cdnPolicy: cacheKeyPolicy: {} cacheMode: FORCE_CACHE_ALL defaultTtl: 2s signedRequestMode: DISABLED
سنترك جميع الإعدادات التلقائية لإعدادات خدمة Edge Cache. في الملف أعلاه، هناك 3 قيم حقول قد يرغب المستخدمون في تعديلها:
name
: اسم مثيل Media CDN - هنا:cme-demo
hosts:
قائمة أسماء النطاقات التي ستحلها خدمة Media CDN هذه - هنا:demo.cme.com
. سنستخدم هذا خلال هذا العرض التوضيحي. سنستخدم عنوان IP لمثيل Media CDN.Origin:
هذا هو أصل Edge Cache الذي أنشأناه في الخطوة السابقة. اضبط السمة علىcme-origin
- اسم مصدر شبكة توصيل محتوى الوسائط.
لمزيد من المعلومات حول المتغيّرات المختلفة التي يمكنك استخدامها في ملف YAML، يُرجى الاطّلاع على دليل إعداد خدمة Edge Cache Service.
إنشاء خدمة Edge Cache
سننشئ خدمة Edge Cache Service بالاسم cme-demo
، على Edge Cache Origin cme-origin
، مع المضيف demo.cme.com
. لإنشاء الخدمة، شغِّل الأمر التالي في Cloud Shell:
الأمر
gcloud edge-cache services import cme-demo \ --source=cme-demo.yaml
قد يستغرق إنشاء خدمة Edge Cache بضع دقائق.
مثال على الناتج
Request issued for: [cme-demo] Waiting for operation [projects/PROJECT_ID/locations/global/operations/operation-1670476252264-5ef4a0f9f36ce-dd380af5-321be9a0] to complete...done. createTime: '2022-12-07T18:08:54.403446942Z' ipv4Addresses: - 34.104.35.152 ipv6Addresses: - '2600:1900:4110:d18::' name: projects/PROJECT_ID/locations/global/edgeCacheServices/cme-demo routing: hostRules: - hosts: - demo.cme.com - 34.104.35.152 pathMatcher: routes pathMatchers: - name: routes routeRules: - headerAction: responseHeadersToAdd: - headerName: x-cache-status headerValue: '{cdn_cache_status}' matchRules: - prefixMatch: / origin: projects/123456789/locations/global/edgeCacheOrigins/cme-origin priority: '100' routeAction: cdnPolicy: cacheKeyPolicy: {} cacheMode: FORCE_CACHE_ALL defaultTtl: 3600s signedRequestMode: DISABLED - headerAction: responseHeadersToAdd: - headerName: x-cache-status headerValue: '{cdn_cache_status}' matchRules: - pathTemplateMatch: /**.m3u8 origin: projects/123456789/locations/global/edgeCacheOrigins/cme-origin priority: '25' routeAction: cdnPolicy: cacheKeyPolicy: {} cacheMode: FORCE_CACHE_ALL defaultTtl: 1s signedRequestMode: DISABLED - headerAction: {} matchRules: - pathTemplateMatch: /**.ts origin: projects/123456789/locations/global/edgeCacheOrigins/cme-origin priority: '50' routeAction: cdnPolicy: cacheKeyPolicy: {} cacheMode: FORCE_CACHE_ALL defaultTtl: 2s signedRequestMode: DISABLED updateTime: '2022-12-08T05:11:31.598744308Z'
لاحظ وانسخ ipv4Addresses
لمثيل خدمة Edge Cache Service - هنا 34.104.36.157
. سنستخدمه لتعديل ملف cme-demo.yaml
وفي وقت لاحق لبث الفيديو الذي تم تحويل ترميزه.
تحديث خدمة Edge Cache
في هذه المرحلة، ننصحك بتعديل إعدادات Edge Cache Service لتتمكّن من استخدام عنوان IP الخاص بالخدمة لبثّ الفيديو لاحقًا. يتيح لنا ملف YAML لخدمة Edge Cache Service سرد جميع أسماء المضيفين/عناوين IP التي ستقبل خدمة Edge Cache الطلبات منها. في هذه المرحلة، نحدد فقط demo.cme.com
كمضيف. لتوفير تحليل الاسم لهذا النطاق، يمكنك ضبط السحابة الإلكترونية لمنطقة نظام أسماء النطاقات. مع ذلك، قد يكون الحل الأسهل هو إضافة عنوان IP إلى قائمة المضيفين في ملف yaml
. قم بتحرير ملف YAML مرة أخرى وقم بتحريره ليبدو كما هو موضح أدناه:
name: cme-demo routing: hostRules: - hosts: - demo.cme.com - IPADDRESS pathMatcher: routes pathMatchers: - name: routes routeRules: - headerAction: responseHeadersToAdd: - headerName: x-cache-status headerValue: "{cdn_cache_status}" matchRules: - prefixMatch: / origin: cme-origin priority: 100 routeAction: cdnPolicy: cacheKeyPolicy: {} cacheMode: FORCE_CACHE_ALL defaultTtl: 3600s signedRequestMode: DISABLED - headerAction: responseHeadersToAdd: - headerName: x-cache-status headerValue: "{cdn_cache_status}" matchRules: - pathTemplateMatch: /**.m3u8 origin: cme-origin priority: 25 routeAction: cdnPolicy: cacheKeyPolicy: {} cacheMode: FORCE_CACHE_ALL defaultTtl: 1s signedRequestMode: DISABLED - headerAction: {} matchRules: - pathTemplateMatch: /**.ts origin: cme-origin priority: 50 routeAction: cdnPolicy: cacheKeyPolicy: {} cacheMode: FORCE_CACHE_ALL defaultTtl: 2s signedRequestMode: DISABLED
لتعكس التغييرات نحتاج فقط إلى إعادة استيراد ملف YAML. في الوحدة الطرفية في Cloud Shell، نفِّذ الأمر التالي:
الأمر
gcloud edge-cache services import cme-demo \ --source=cme-demo.yaml
راجع مخرجات الأمر وتحقق من ظهور عنوان IP في قائمة المضيفين.
في هذه المرحلة، سيقبل مثيل خدمة Edge Cache الطلبات من خلال "demo.cme.com"
أو عنوان IP كمضيف.
12. إنشاء إشارة إدخال
الآن بعد الانتهاء من ضبط جميع الخدمات المطلوبة، لننتقل الآن إلى إنشاء إشارة إدخال البث المباشر. في هذا القسم، سننفّذ ما يلي:
- تثبيت FFmpeg، وهو برنامج مجاني مفتوح المصدر
- أرسِل إشارة بث مباشر تجريبية إلى جهاز الإدخال/القناة.
1. تثبيت FFmpeg
برنامج FFmpeg هو مشروع برمجيات مجانية ومفتوحة المصدر يتكون من مجموعة من المكتبات والبرامج للتعامل مع ملفات الفيديو والصوت وغيرها من ملفات الوسائط المتعددة. في الوحدة الطرفية في Cloud Shell، استخدم الأمر التالي لتثبيت FFmpeg:
الأمر
sudo apt install ffmpeg -y
عند الانتهاء من التثبيت، دعنا نتحقق من تثبيت برنامج FFmpeg بشكل صحيح من خلال فحص إصداره:
الأمر
ffmpeg -version
مثال على الناتج
ffmpeg version 4.3.4-0+deb11u1 Copyright (c) 2000-2021 the FFmpeg developers built with gcc 10 (Debian 10.2.1-6) ...
تم تثبيت برنامج FFmpeg بشكل صحيح.
2. ابدأ إشارة البث المباشر إلى قناة الإدخال/القناة
بعد تثبيت أداة FFmpeg، سيتم إرسال بث تجريبي إلى نقطة نهاية الإدخال لإنشاء البث المباشر.
في الوحدة الطرفية في Cloud Shell، شغِّل الأمر التالي باستخدام متغير بيئة عنوان URI الذي أنشأناه في قسم "إنشاء نقطة نهاية الإدخال وضبطها" .
الأمر
ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \ -acodec aac -vcodec h264 -f flv $URI
من المفترض أن ترى FFmpeg وهو يرسل إشارة الاختبار المباشر. لن يُرجع الأمر الأمر. سيتم إنشاء الإشارة إلى أن توقفها. عليك فتح نافذة Cloud Shell جديدة لبقية الدرس.
13. فتح Cloud Shell جديد
في هذه المرحلة، ستحتاج إلى فتح نافذة Cloud Shell جديدة لمواصلة التمرين المعملي، حيث سيتم تشغيل FFmpeg بشكل دائم حتى يتم الضغط على <CTRL+C>. بفرض إيقافها وبالتالي إيقاف إنشاء الإشارات المباشرة..
انقر على الرمز "+" بجانب اسم الوحدة الطرفية الحالية في Cloud Shell. سيتم فتح نافذة Cloud Shell إضافية.
شغِّل باقي التمرين في نافذة Cloud Shell المفتوحة حديثًا.
إعداد متغيّرات البيئة
بما أنّ خدمة CloudShell جديدة، نحتاج إلى ضبط متغيّرات البيئة مرة أخرى. سنستخدم الأمر source
لضبط متغيّرات البيئة.
الأمر
source ~/env_variables.txt
التحقّق من ضبط المتغيّرات
دعنا نتحقق من تعيين جميع متغيرات البيئة المطلوبة. من المفترض أن يظهر لنا إجمالي 6 متغيرات بيئية في الإخراج.
الأمر
env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME|PROJECT_NUMBER|LOCATION|INPUT_ID|CHANNEL_ID'
مثال على الناتج
LOCATION=us-west2 DEVSHELL_PROJECT_ID=<YOUR_PROJECT_ID> LOGNAME=<YOUR_USERNAME> PROJECT_NUMBER=<YOUR_PROJECT_NUMBER> INPUT_ID=lab-live-input CHANNEL_ID=lab-live-channel
14. التحقّق من تحويل ترميز الإشارة المباشرة
سنشغّل curl
لوصف القناة. من المفترض أن يظهر في الإخراج أنّ حالة StreamingState تم تغييرها من "AWAITING_INPUT"
إلى "STREAMING"
.
الأمر
curl -s -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels/$CHANNEL_ID" | grep "streamingState"
من المفترض أن يظهر الرمز "streamingState": "STREAMING"
في استجابة ملف JSON للمخرجات، ما يشير إلى أنّ القناة يتم بثها وأنّه يتم تحويل ترميز الإشارة المباشرة.
علينا أيضًا التحقّق من محتوى الحزمة حيث من المفترض أن يظهر لنا ملف بيان والعديد من مقاطع فيديو TS. شغّل الأمر التالي في Cloud Shell لسرد محتوى الحزمة التي أنشأناها في بداية التمرين المعملي واستخدمها Live Streaming API لإخراج بيان الإشارة المباشرة التي تم تحويل ترميزها ومقاطع فيديو TS:
الأمر
gcloud storage ls --recursive gs://live-streaming-storage-$LOGNAME/**
مثال على الناتج
gs://live-streaming-storage-$LOGNAME/ gs://live-streaming-storage-$LOGNAME/main.m3u8 gs://live-streaming-storage-$LOGNAME/mux_video_ts/index-1.m3u8 gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000016.ts gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000017.ts gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000018.ts gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000019.ts gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000020.ts gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000021.ts gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000022.ts ...
من المفترض أن يظهر لك ما يلي:
- ملف بيان HLS:
main.m3u8
- مقاطع فيديو TS المقابلة: سلسلة من الملفات المرقمة
segment-000000000X.ts
في هذه المرحلة، انتهينا من ما يلي:
- واجهة برمجة تطبيقات البث المباشر: يتم إنشاء الإشارة المباشرة وتحويل ترميزها إلى حزمة عبر واجهة برمجة تطبيقات البث المباشر.
- Media CDN: تم ضبط Media CDN مع حزمة مساحة تخزين البث المباشر باعتبارها مصدر Media CDN.
في الأقسام التالية، سنتحقق من صحة خدمة Edge Cache Service ثم سنبثّ الفيديو الذي تم تحويل ترميزه باستخدام عنوان IP anycast لـ Media CDN.
15. التحقق من عمل مثيل خدمة Edge Cache
في هذا القسم، سنتحقق من عمل مثيل خدمة Edge Cache Service على النحو المتوقّع. لإجراء ذلك، سنحاول الوصول إلى ملف من مثيل خدمة Edge cache باستخدام عنوان IP الخاص بخدمة Edge Cache Service. وعند الوصول إلى كائن لأول مرة، لا يتم تخزينها مؤقتًا بعد. من المفترض أن نلاحظ ذاكرة التخزين المؤقت للسمة MISS
. بالنسبة إلى الطلب الأول، تتم قراءة الكائن من المصدر ويتم تخزينه مؤقتًا عند الحافة. ستؤدي كل المحاولات التالية للوصول إلى الملف نفسه إلى عرض ذاكرة تخزين مؤقت HIT
نظرًا لأن الكائن مخزن مؤقتًا عند الحافة. لنتحقق من هذا السلوك:
شغِّل أمر curl
التالي في Cloud Shell للوصول إلى ملف بيان الفيديو الذي تم تحويل ترميزه والمخزن في Edge Cache Origin:
الأمر
curl -svo /dev/null --resolve demo.cme.com:80:<Replace_With_Edge_Cache_IP> \ "http://demo.cme.com/main.m3u8"
لاحظ الحلّ الذي نستخدم فيه عنوان IP لمثيل خدمة Edge Cache Service لتسمية اسمه. احرِص على استخدام demo.cme.com:<IP>
حيث يكون IP هو عنوان IP لمثيل خدمة Edge Cache Service الذي أنشأناه للتو.
ابحث عن العنوان x-cache-status
في الناتج.
مثال على الناتج
Added demo.cme.com:80:34.104.35.152 to DNS cache * Hostname demo.cme.com was found in DNS cache * Trying 34.104.35.152:80... * Connected to demo.cme.com (34.104.35.152) port 80 (#0) > GET /main.m3u8 HTTP/1.1 > Host: demo.cme.com > User-Agent: curl/7.74.0 > Accept: */* > * Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < x-guploader-uploadid: ADPycdtKtflWt4Kha5YxXNNRwO-Eu6fGSPs-T-XY4HJmNMo46VJyWlD4EAk-8a6SegxjWq3o1gTPqZbpkU_sjW__HPAdDw < date: Wed, 07 Dec 2022 18:23:46 GMT < last-modified: Wed, 07 Dec 2022 18:23:45 GMT < etag: "6bff620ccca4a9849ba4e17fa7c521fb" < x-goog-generation: 1670437425805400 < x-goog-metageneration: 1 < x-goog-stored-content-encoding: identity < x-goog-stored-content-length: 193 < content-type: application/x-mpegURL < x-goog-hash: crc32c=sPO3zw== < x-goog-hash: md5=a/9iDMykqYSbpOF/p8Uh+w== < x-goog-storage-class: STANDARD < accept-ranges: bytes < content-length: 193 < server: Google-Edge-Cache < x-request-id: fd25285b-fc1a-4fd4-981a-c50ead2c85ed < x-xss-protection: 0 < x-frame-options: SAMEORIGIN < x-cache-status: den;miss < cache-control: public,max-age=3600 < { [193 bytes data] * Connection #0 to host demo.cme.com left intact
لاحِظ خطأ في ذاكرة التخزين المؤقت لأنّ العنصر لم يتم تخزينه مؤقتًا حتى الآن وتتم قراءته من المصدر.
سنقدِّم الآن طلبات متعددة لملف m3u8
، وإذا تم ضبط كل شيء بشكل صحيح، من المفترض أن تبدأ Media CDN في عرض المحتوى من ذاكرة التخزين المؤقت الخاصة به. سيجري الأمر أدناه 10 طلبات curl وسيطبع فقط عنوان x-cache-status
.
الأمر
for i in {1..10};do curl -Is --resolve demo.cme.com:80:<Replace_With_Edge_Cache_IP> "http://demo.cme.com/main.m3u8" | grep x-cache-status;done
يجب أن تكون النتيجة مزيجًا من ذاكرة التخزين المؤقت hit
وmiss
. إذا ظهرت لك نتائج ذاكرة التخزين المؤقت في الإخراج، يعني ذلك أنّ شبكة توصيل محتوى الوسائط تعمل على النحو المتوقّع.
مثال على الناتج
x-cache-status: den;miss x-cache-status: den;hit x-cache-status: den;hit x-cache-status: den;hit x-cache-status: den;hit x-cache-status: den;hit x-cache-status: den;hit x-cache-status: den;hit x-cache-status: den;hit x-cache-status: den;hit
لاحِظ نتيجة ذاكرة التخزين المؤقت لأنّ الكائن أصبح في ذاكرة التخزين المؤقت الآن عند الحافة. تعمل خدمة Cloud Medie Edge Service على النحو المتوقّع.
16. بث فيديو إشارة مباشرة تم تحويل ترميزه باستخدام VLC
هذا هو الجزء الذي نربط فيه النقاط ونربط جميع الخطوات التي كنا نعمل عليها حتى الآن:
- أنشأنا حزمة باسم
live-streaming-storage-$LOGNAME
تتلقى نتيجة الإشارة المباشرة التي تم تحويل ترميزها إلى محتوى HLS من خلال Live Streaming API. - تمّ إعداد واجهة برمجة التطبيقات Live Streaming API.
- بدأنا تشغيل إشارة مباشرة لبروتوكول RTMP مع معيار FFmpeg تعمل على إرسال خلاصات إدخال/قناة بث مباشر عبر واجهة برمجة تطبيقات البث المباشر.
- تحقّقنا من أنّه تم إرسال الإشارة المباشرة إلى القناة وتأكّدنا من أنّها في الوضع "
streaming
". - لقد تحقّقنا من أنّه تم إنشاء الملفات الناتجة التي تم تحويل ترميزها (البيان + شرائح الدعم الفني) وتخزينها في الحزمة
live-streaming-storage-$LOGNAME
. - تم إعداد مصدر ذاكرة التخزين المؤقت على Edge يُعرف باسم
cme-origin
باستخدام حزمة GCSlive-streaming-storage-$LOGNAME
كالمصدر. - تم إعداد مثيل لذاكرة التخزين المؤقت على Edge يسمى
cme-demo
معcme-origin
كأصل له. - تحققنا من السلوك (خطأ في ذاكرة التخزين المؤقت، نتيجة ذاكرة التخزين المؤقت) لمثيل خدمة Edge Cache.
أصبحنا الآن في مرحلة يمكننا من خلالها استخدام مشغّل فيديو لبث الإشارة المباشرة التي تم تحويل ترميزها عبر ذاكرة التخزين المؤقت لوسائط CDN. لتنفيذ هذا الإجراء، سنستخدم مشغّل VLC. VLC Player هو مشغّل وإطار عمل مجاني ومفتوح المصدر يعمل على عدة أنظمة أساسية لتشغيل معظم ملفات الوسائط المتعددة. ويشغِّل تنسيقات الوسائط التكيُّفية (مثل DASH وHLS). وتستند هذه الميزة إلى مبدأ البث التكيُّفي، إذ إنّها ستعدّل جودة الفيديو الذي يتمّ تشغيله وفقًا لجودة الاتصال بالشبكة ومعدّل نقل البيانات المتاح. من خلال مهمة تحويل الترميز التي أنجزناها للتو، استخدمنا الإعدادات المسبقة الافتراضية وأنشأنا صفتين "فقط": الدقة العادية والدقة العالية. عند بدء تشغيل الفيديو في المشغّل، سترى أنه يبدأ تشغيل تنسيق SD والتبديل بسرعة إلى التنسيق HD إذا كان الاتصال بالشبكة جيدًا بدرجة كافية.
سنبثّ إشارة البث المباشر التي تم تحويل ترميزها HLS (تنسيق فيديو Apple المتوافق على نطاق واسع). يُسمى الملف المقابل main.m3u8
، وهو بيان HLS. ويشير البيان إلى مقاطع فيديو TS.
لاستخدام مشغّل VLC، انتقِل إلى https://www.videolan.org/vlc/ ونزِّل نسخة من المشغّل لنظام تشغيل الكمبيوتر المحمول. ويتوفّر هذا البرنامج على أنظمة التشغيل Windows وMacOSX وLinux وAndroid وiOS.
ثبِّت "المشغّل" على الكمبيوتر المحمول وشغِّله. سنستخدم إصدار MacOSX من المشغل للخطوات القليلة التالية.
لتشغيل فيديو، انتقِل إلى "ملف" / "الشبكة المفتوحة":
يمكنك بدء عملية الإعداد باستخدام:
- عنوان URL: http://<Replace_With_Edge_Cache_IP>/main.m3u8. هذا هو عنوان URL للفيديو الذي نريد بثه. إشعار:
- عنوان IP لمثيل Media CDN:
34.105.35.246
. استبدِله بعنوان IP لخدمة Cloud Media التي نشرتها. - المسار إلى ملف فيديو البيان: "
/
". هذا هو المسار الذي استخدمناه في حزمةlive-streaming-storage-$LOGNAME
لتخزين ملفات الإشارات المباشرة التي تم تحويل ترميزها. المسار هو المسار الجذر هنا: "/". - اسم ملف فيديو البيان: ملف بيان HLS،
main.m3u8
ثم انقر على "فتح". من المفترض أن يبدأ تشغيل الفيديو المباشر الذي تم تحويل ترميزه. سيظهر الفيديو على النحو الموضّح في لقطة الشاشة أدناه. سيظهر العدّاد الظاهر على الشاشة بزيادات بمقدار 1 ومن المفترض أن تتمكّن من سماع صوت صفير مستمر.
وهي عبارة عن إشارة مباشرة اختبارية أساسية لبروتوكول RTMP تم إنشاؤها بواسطة FFmpeg، ويتم تحويل ترميزها إلى HLS من خلال Live Streaming API ويتم عرضها من خلال ذاكرة التخزين المؤقت الخاصة بـ Media CDN:
يمكنك استخدام أي مشغّل آخر لبروتوكول HLS وMPEG DASH إذا أردت ذلك. فيما يلي بعض الأشياء التي قد ترغب في وضعها في الاعتبار:
- Quicktime Player - مثبت بشكل افتراضي على أجهزة Mac. الأمر نفسه: افتح الاتصال بالشبكة على http://34.104.36.157/main.m3u8 - استبدل عنوان IP بمثيل خدمة Edge Cache Service.
17. مراقبة شبكة توصيل المحتوى (CDN) للوسائط
أنشأ فريق SME نموذج لوحة بيانات Media CDN - https://gist.github.com/elithrar/1c511d00f5cd3736fb2a3897867209c1.
لتثبيته، شغِّل الأوامر التالية في نافذة Cloud Shell:
تنزيل ملف YAML:
curl https://gist.githubusercontent.com/elithrar/1c511d00f5cd3736fb2a3897867209c1/raw/3cb70855304f29e5c06b8d63063196354db0dec3/media-edge-20210208-dashboard --output media-edge-20210208-dashboard.yaml
إنشاء لوحة بيانات Cloud Monitoring:
gcloud monitoring dashboards create --config-from-file media-edge-20210208-dashboard.yaml
قد تستغرق عملية الإعداد بضع دقائق. انتقِل إلى Google Cloud Console وانقر على الأشرطة الثلاثة > العمليات > المراقبة > لوحات المعلومات. من المفترض أن تظهر لك لوحة بيانات باسم "Media Edge Metrics (مقاييس حافة الوسائط)". انقر عليه وستظهر المقاييس التالية:
18 تنظيف بيئة البرنامج
تهانينا على إكمال التمرين المعملي. في هذا القسم، سنحذف جميع الموارد التي أنشأتها في هذا القسم.
إيقاف إشارة FFmpeg:
انقر على <CTRL+C>
في الوحدة الطرفية Cloud Shell التي يتم تشغيل FFmpeg فيها.
لإيقاف قناة البث المباشر، اتّبِع الخطوات التالية:
الأمر
curl -X POST \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ -H "Content-Type: application/json; charset=utf-8" \ -d "" \ "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels/$CHANNEL_ID:stop"
لحذف قناة البث المباشر:
الأمر
curl -X DELETE -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels/$CHANNEL_ID"
حذف نقطة نهاية إدخال البث المباشر:
الأمر
curl -X DELETE \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/inputs/$INPUT_ID"
حذف حزمة GCS:
الأمر
gsutil rm -r gs://live-streaming-storage-$LOGNAME
حذف مثيل خدمة Edge Cache:
الأمر
gcloud edge-cache services delete cme-demo
أكِّد عملية الحذف عن طريق إدخال الحرف "Y". عندما يُطلب منك ذلك
حذف مصدر ذاكرة التخزين المؤقت على Edge:
الأمر
gcloud edge-cache origins delete cme-origin
أكِّد عملية الحذف عن طريق إدخال الحرف "Y". عندما يُطلب منك ذلك
حذف لوحة البيانات المخصَّصة
الأمر
gcloud monitoring dashboards delete $(gcloud monitoring dashboards list --filter="displayName:Media Edge Metrics" --format="value(name)")