1. מבוא
רשתות להעברת תוכן (CDN) משפרות את ביצועי המשתמשים על ידי שמירה במטמון של תוכן שניגשים אליו לעיתים קרובות קרוב יותר למשתמשי הקצה, סיום החיבורים קרוב יותר ללקוחות, שימוש חוזר בחיבורים למקור אימוץ פרוטוקולים והתאמות אישיות של רשתות. עבור המשתמשים (והלקוחות שלנו) המשמעות היא זמן אחזור קצר יותר, אמינות גבוהה יותר ועלות נמוכה יותר. המשמעות היא שיפור במכירות, בחוויית המשתמש באינטרנט ובעלייה נטו בחוויית המשתמש. מעט מאוד אתרים ופלטפורמות מודרניות לסטרימינג של וידאו פועלים ללא CDN כיום.
מה תלמדו
בשיעור ה-Lab הזה נדריך אותנו בשלבים לפרוס סביבת עבודה של סטרימינג בשידור חי עם Media CDN (CDN) + Cloud Media Live Streaming API (המרת קידוד של וידאו בשידור חי) + Cloud Storage (אחסון של הסרטונים) + נגן וידאו (VLC, Google Shaka Player וכו' – נגן HLS + MPEG-DASH).
אנחנו נגדיר את רכיבי ה-API של סטרימינג בשידור חי – קלט, ערוץ – ונתחיל פיד בשידור חי לקלט/לערוץ עם FFmpeg (FFmpeg יכול ליצור אות בדיקה בזמן אמת). ה-Live Streaming API ימיר את הקידוד של הפיד בשידור חי. הקטעים והמניפסט של הסרטון שהומרו לקידוד יישמרו בקטגוריה של Cloud Storage. לאחר מכן נגדיר Media CDN כאשר המקור הוא קטגוריית Cloud Storage של וידאו בשידור חי. לבסוף, נגן VLC ישמש להפעלת תוכן בשידור חי שנשמר במטמון דרך Media CDN. בנוסף, נגדיר לוח בקרה של Cloud Monitoring להצגה חזותית של הפעילות של Media CDN.
מה תפַתחו
בשיעור ה-Lab הזה נגדיר את הסביבה על סמך הארכיטקטורה הבאה:
אנחנו נגדיר את הרכיבים הבאים ונבצע את המשימות הבאות כחלק משיעור ה-Lab:
- יצירת קטגוריה של Google Cloud Storage (GCS) לאחסון סרטונים פעילים שעברו המרת קידוד
- הגדרת ממשק API של סטרימינג בשידור חי כדי להמיר את קידוד הסרטון לפורמטים מרובים: HLS + MPEG DASH, SD ו-HD
- הגדרת הרכיבים של סטרימינג בשידור חי: קלט/ערוץ
- הפעלת ערוץ השידור החי
- הגדרה של Media CDN באמצעות קטגוריית GCS כמקור
- הגדרת FFmpeg כדי להזין את הערוץ בשידור חי
- שידור פיד בשידור חי שהקידוד שלו הומר באמצעות נגן וידאו
- הגדרת לוח בקרה ב-Cloud Monitoring כדי לעקוב אחרי פעילות ב-Media CDN (זמן אחזור, היט המטמון, היעדר מטמון וכו')
הערה: בשיעור ה-Lab הזה אנחנו מניחים שלמשתמשים יש גישה אל מסוף Google Cloud ושהם כבר מוגדרים בפרויקט. בנוסף, אנחנו מניחים שהמשתמשים מתחילים בסביבה חדשה ואין להם שום הגדרה עבור ההדגמה הזו.
כל פעולות ההגדרה יבוצעו דרך שורת הפקודה ב-Cloud Shell. אנחנו תמיד יכולים לבדוק את הרכיבים שהוגדרו באמצעות שורת הפקודה במסוף. במהלך שיעור ה-Lab נראה סמנים שיצביעו על מסוף Google Cloud.
2. לפני שמתחילים
הגישה ל-Media CDN מוגבלת. כדי לקבל גישה ל-Media CDN, יש לפנות לצוות החשבון. הוא יוכל ליצור בקשת גישה בשמכם. אם אתם חלק מ-Google ורוצים לבדוק סטרימינג בשידור חי באמצעות Media CDN, עליכם לפנות ל-PM של Media CDN ולבקש גישה ל-Media CDN.
3. הגדרה ודרישות
הפעלת Cloud Shell
אומנם אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה משתמשים ב-Google Cloud Shell, סביבת שורת הפקודה שפועלת ב-Cloud.
במסוף Google Cloud, לוחצים על הסמל של Cloud Shell בסרגל הכלים שבפינה השמאלית העליונה:
נדרשים רק כמה דקות כדי להקצות את הסביבה ולהתחבר אליה. בסיום התהליך, אתם אמורים לראות משהו כזה:
למכונה הווירטואלית הזו נטען כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. כל העבודה ב-Codelab הזה יכולה להתבצע בתוך דפדפן. אתה לא צריך להתקין שום דבר.
4. גרסת Google Cloud SDK
נכון למועד הכתיבה, 408.0.0
היא הגרסה העדכנית ביותר של Google Cloud SDK. כל הפקודות בשיעור ה-Lab הזה נבדקו באמצעות הגרסה האחרונה של 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, צריך לבצע את הפעולות הבאות:
- הגדרה של משתני סביבה
- הפעלת ממשקי ה-API הנדרשים של השירות
1. הגדרת משתני סביבה
בשיעור ה-Lab הזה נריץ פקודות 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. הפעלת ממשקי ה-API הנדרשים של השירות
אנחנו צריכים לוודא שממשקי ה-API הבאים מופעלים בפרויקט שלנו.
- Network Services API
- ממשק API של Certificate Manager
- API של סטרימינג בשידור חי
- ממשק API של Media CDN Edge Cache
הפעלת Network Services API
כדי להפעיל את Network Services API, מריצים את הפקודה הבאה:
פקודה
gcloud services enable networkservices.googleapis.com
הפעלת Certificate Manager API
כדי להפעיל את Certificate Manager API, מריצים את הפקודה הבאה:
פקודה
gcloud services enable certificatemanager.googleapis.com
הפעלת ממשק ה-API של סטרימינג בשידור חי
כדי להפעיל את ממשק ה-API של סטרימינג בשידור חי, מריצים את הפקודה הבאה:
פקודה
gcloud services enable livestream.googleapis.com
הפעלת Media CDN Edge Cache API
כדי להפעיל את Media CDN Edge Cache API, מריצים את הפקודה הבאה:
פקודה
gcloud services enable edgecache.googleapis.com
איך מוודאים שממשקי ה-API מופעלים
מריצים את הפקודה gcloud services list
כדי להציג את רשימת כל ממשקי ה-API שהופעלו. הפלט אמור לכלול 4 ממשקי API.
פקודה
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
- הגדרת הקטגוריה כנגישה באופן ציבורי
בהמשך שיעור ה-Lab נשתמש בקטגוריה הזו כדי לאחסן את קובצי הווידאו שהקידוד שלהם הומר. הקטגוריה הזו תשמש גם כאחסון מקור עבור שירות Media CDN.
1. יצירת הקטגוריה
נשתמש בפקודה gsutil mb
כדי ליצור את הקטגוריה:
פקודה
gsutil mb gs://live-streaming-storage-$LOGNAME
2. הגדרת הקטגוריה כגלויה לכולם
נשתמש בפקודה gsutil
iam
כדי להפוך את הקבצים לזמינים לציבור:
פקודה
gsutil iam ch allUsers:objectViewer gs://live-streaming-storage-$LOGNAME
7. הגדרת הסביבה של Live Streaming API
הרכיבים של שרשרת Live Streaming API בנויים באופן הבא:
בקטע הקודם יצרנו את הקטגוריה live-streaming-storage-$LOGNAME
של Cloud Storage. בשני הקטעים הבאים ניצור את המשאבים הבאים:
- קלט של סטרימינג בשידור חי: נקודת קצה (endpoint) של קלט היא נקודת קצה שאליה המקודד שולח את שידור הקלט. אתם יכולים להשתמש בנקודת הקצה לקלט כדי לקבוע הגדרות אישיות לשידור שלכם, כמו רזולוציית קלט, סוג קלט וחיתוך סרטון.
- ערוץ סטרימינג בשידור חי: ערוץ הוא משאב שמטמיע את זרם הקלט דרך נקודת קצה (endpoint) של קלט, ממיר את הקידוד של שידור הקלט למספר עיבודים ומפרסם שידורים חיים שהם פלט בפורמטים מסוימים במיקום שצוין. אפשר לכלול סטרימינג ראשי וסטרימינג לגיבוי באותו ערוץ.
ניצור את המשאבים הבאים בהמשך שיעור ה-Lab:
- מקודד: מקודד הוא תוכנית שמשמשת לשליחת שידורי קלט. בשיעור ה-Lab הזה נשתמש ב-FFmpeg.
8. יצירה והגדרה של נקודת הקצה לקליטת נתונים
יוצרים את הקובץinput.json
אנחנו ניצור קובץ input.json
כדי לציין את סוג האות של השידור החי. בשיעור ה-Lab הזה אנחנו משתמשים באות RTMP בזמן אמת.
פקודה
cat > input.json << EOF { "type": "RTMP_PUSH" } EOF
יוצרים את נקודת הקצה לקליטת נתונים
נכון למועד כתיבת שיעור ה-Lab הזה, אין תמיכה ב-gcloud ל-Live Stream API. נשתמש בפקודה curl
כדי לבצע את הקריאות ל-API.
פקודה
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 }
הפלט כולל מידע שימושי רב, אבל בשלב זה עלינו להתמקד בשני שדות:
- Action ID (מזהה פעולה): מעתיקים את מזהה הפעולה מהפלט ורושמים אותו. בהמשך מופיע מזהה הפעולה מדוגמת הפלט. אפשר למצוא אותו בשורת הפלט שמתחילה ב-
"name"
."operation-1661405972853-5e70a38d6f27f-79100d00-310671b4"
- סטטוס: צריך להמתין עד שהסטטוס ישתנה מ-
"done": false
ל-"done": true
בדיקת הסטטוס
לפני שנמשיך, אנחנו צריכים לבדוק שנקודת הקצה (endpoint) לקלט נוצרה בהצלחה ומוכנה.
בפקודה שלמטה, מחליפים את <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"
, שמציין שנקודת הקצה (endpoint) לקלט נוצרה ומוכנה.
שמירת ה-URI
נשתמש בפלט URI
מהפלט הקודם בהמשך שיעור ה-Lab. בשלב הזה נגדיר משתנה סביבה ל-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 שמורכב מעיבוד יחיד באיכות HD (1280x720). הערוץ ישויך לנקודת הקצה של הקלט ולקטגוריית האחסון שיצרנו קודם.
יצירת הקובץ 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"
, שמציין שנקודת הקצה (endpoint) לקלט נוצרה ומוכנה.
לתשומת ליבך, "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. הגדרת CDN של מדיה
בקטע הזה נפרוס את Media CDN – התשתית של CDN. ניצור את מקורות המידע הבאים:
- מקור המטמון של Edge
- שירות Edge במטמון
1. יצירת מקור מטמון של Edge
מקור מטמון של Edge מייצג מיקום תוכן, כמו קטגוריה של Cloud Storage, מיקום אחסון של צד שלישי או מאזן עומסים. במונחים של CDN, המקור (או שרת המקור) הוא המיקום שבו נמצא מקור התוכן שאנחנו רוצים להפיץ – למשל. כל שירותי ה-CSS, JavaScript, HTML, תמונות וכו'. בשיעור ה-Lab הזה ניצור מקור שממפה אל הקטגוריה של Cloud Storage שיצרנו בתחילת שיעור ה-Lab. נקרא מקור המטמון של 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', אנחנו יכולים ליצור את השירות עצמו.
יצירת הקובץ 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 Service. בקובץ שלמעלה יש 3 ערכים של שדות שהמשתמשים עשויים לעדכן:
name
: שם המופע של Media CDN, כאן:cme-demo
hosts:
הרשימה של שמות הדומיינים שיטופלו על ידי שירות Media CDN הזה – כאן:demo.cme.com
. נשתמש במידע הזה במהלך ההדגמה. אנחנו נשתמש בכתובת ה-IP של מכונת Media CDN.Origin:
זהו מקור המטמון של Edge שיצרנו עכשיו בשלב הקודם. מגדירים אותו ל-cme-origin
– השם של מקור ה-Media CDN.
מידע נוסף על המשתנים השונים שאפשר להשתמש בהם בקובץ ה-YAML זמין במדריך ההגדרה של Edge Cache Service.
יצירת שירות המטמון של Edge
אנחנו ניצור שירות Edge Cache בשם 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 Service עשויה להימשך מספר דקות.
דוגמה לפלט
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
בשלב הזה, כדאי לעדכן את ההגדרה של Edge Cache Service כדי שתוכלו להשתמש בכתובת ה-IP של השירות כדי לשדר את הסרטון מאוחר יותר. קובץ YAML של Edge Cache Service מאפשר לנו להציג רשימה של כל כתובות ה-IP והשמות של המארחים ש-Edge Cache Service יקבל בקשות מהן. בשלב הזה הגדרנו רק את demo.cme.com
כמארח. כדי לספק רזולוציית שמות לדומיין הזה, צריך להגדיר תחום DNS בענן. אבל פתרון קל יותר יהיה להוסיף את כתובת ה-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 Service יקבל בקשות עם "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 שיצרנו במקטע "Create and Setting the קלט Endpoint" (יצירה והגדרה של נקודת הקצה בקלט). .
פקודה
ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \ -acodec aac -vcodec h264 -f flv $URI
אתם אמורים לראות ש-FFmpeg שולח את אות הבדיקה בזמן אמת. הפקודה לא תחזיר את ההנחיה. האות ייווצר עד שתפסיקו אותו. תצטרכו לפתוח חלון חדש של Cloud Shell להמשך שיעור ה-Lab.
13. פתיחת Cloud Shell חדשה
בשלב הזה תצטרכו לפתוח חלון חדש של Cloud Shell כדי להמשיך את שיעור ה-Lab, כי FFmpeg תרוץ באופן סופי עד שתלחצו על <CTRL+C> את הפקודה כדי לעצור אותו וכך להפסיק את יצירת האות בזמן אמת.
לוחצים על הסמל '+'. ליד השם של הטרמינל הנוכחי של Cloud Shell. ייפתח חלון נוסף של Cloud Shell.
תריצו את שאר שיעור ה-Lab בחלון 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
כדי לתאר את הערוץ. בפלט אמור להופיע שינוי ה-streamState מ-"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"
בפלט של קובץ ה-JSON אמור להופיע הערך "streamingState": "STREAMING"
, שמציין שהערוץ מבצע סטרימינג והקידוד של האות החי עובר המרת קידוד.
נאמת גם את התוכן של הקטגוריה שבה אמור להופיע קובץ מניפסט ומספר קטעי וידאו של TS. מריצים את הפקודה הבאה ב-Cloud Shell כדי להציג את רשימת תוכן הקטגוריה שיצרנו בתחילת שיעור ה-Lab, שמשמשת את 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
בשלב הזה סיימנו עם הפרטים הבאים:
- Live Streaming API: האות בשידור חי נוצר וממיר את הקידוד לקטגוריה באמצעות Live Streaming API
- Media CDN: מוגדר CDN של מדיה עם קטגוריית האחסון בשידור חי כמקור Media CDN.
בקטעים הבאים, נאמת את השירות 'Edge Cache Service', ולאחר מכן נציג את הסרטון שעבר המרת קידוד באמצעות כתובת ה-IP של anycast של Media CDN.
15. איך מוודאים שהמכונה של Edge Cache Service פועלת
בקטע הזה נוודא שהמכונה של Edge Cache Service פועלת כצפוי. כדי לעשות זאת, ננסה לגשת לקובץ ממופע של Edge Cache Service באמצעות כתובת ה-IP של שירות Edge Cache Service. בפעם הראשונה שמתבצעת גישה לאובייקט, הוא עדיין לא נשמר במטמון. המערכת אמורה לשמור על מטמון MISS
. בבקשה הראשונה, האובייקט נקרא מהמקור ונשמר במטמון בקצה. כל הניסיונות הבאים לגשת לאותו קובץ יחזירו מטמון HIT
כי האובייקט נשמר עכשיו במטמון בקצה. כדי לאמת את ההתנהגות הזו:
מריצים את פקודת curl
הבאה ב-Cloud Shell כדי לגשת לקובץ מניפסט הווידאו עם המרת הקידוד, שמאוחסן במקור המטמון של Edge:
פקודה
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
. אם מופיעים היטים של מטמון בפלט, המשמעות היא ש-Media CDN פועל כצפוי.
דוגמה לפלט
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 פועל כמו שצריך.
16. שידור וידאו עם אות בשידור חי לאחר המרת קידוד באמצעות VLC
זה החלק שבו אנחנו מחברים את הנקודות ומקשרים את כל השלבים שעבדנו עליהם עד עכשיו:
- יצרנו קטגוריה בשם
live-streaming-storage-$LOGNAME
שמקבלת את התוצאה של המרת הקידוד של האות החי לתוכן HLS על ידי Live Streaming API. - אנחנו מגדירים את Live Streaming API.
- התחלנו להפעיל אות RTMP בשידור חי עם FFmpeg שמזין את הערוץ או הקלט של ממשק ה-API של סטרימינג בשידור חי.
- אימתנו שהאות בשידור חי הוזן לערוץ ואימתנו שהערוץ נמצא במצב
streaming
. - אימתנו שהקבצים עם המרת הקידוד (קטעי מניפסט + TS) נוצרו ואוחסנו בקטגוריה
live-streaming-storage-$LOGNAME
. - מקור מטמון של Edge בשם
cme-origin
הוגדר בתור המקור של הקטגוריהlive-streaming-storage-$LOGNAME
של GCS. - מכונה של Edge Cache בשם
cme-demo
הוגדרה כמקורcme-origin
. - אימתנו את ההתנהגות (החסרה במטמון, היט טעינה של מטמון) במכונה של Edge Cache Service.
אנחנו מגיעים עכשיו לנקודה שבה אנחנו יכולים להשתמש בנגן וידאו כדי לשדר את האות החי לאחר המרת הקידוד דרך המטמון של Media CDN. לשם כך נשתמש ב-VLC Player. VLC Player הוא נגן מולטימדיה ו-framework חינמי וקוד פתוח בפלטפורמות שבו ניתן להפעיל את רוב קובצי המולטימדיה. הוא מפעיל פורמטים של מדיה דינמית (כמו DASH ו-HLS). הנגן משתמש בעיקרון של סטרימינג דינמי – הנגן יכוונן את איכות הסרטון שמופעל בהתאם לאיכות החיבור לרשת ולרוחב הפס הזמין. בהמרת הקידוד שעשינו, השתמשנו בהגדרות ברירת המחדל הקבועות מראש ויצרנו שתי איכויות "בלבד": SD ו-HD. כשאנחנו מתחילים להפעיל את הסרטון בנגן, הוא אמור להתחיל לפעול בפורמט SD ולעבור במהירות לפורמט HD, אם החיבור לרשת טוב מספיק.
נשדר בשידור חי את אות ה-HLS (בפורמט וידאו של Apple שנתמך באופן נרחב) לאחר המרת קידוד. הקובץ התואם נקרא main.m3u8
– זהו המניפסט של HLS. המניפסט מפנה לקטעי הווידאו של TS.
כדי להשתמש בנגן VLC, עוברים אל https://www.videolan.org/vlc/ ומורידים גרסה של הנגן למערכת ההפעלה למחשב הנייד – 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 Service שפרסתם. - הנתיב לקובץ המניפסט של סרטון: "
/
". זה הנתיב שבו השתמשנו בקטגוריהlive-streaming-storage-$LOGNAME
כדי לאחסן את קובצי האותות החיים שהומרו לקידוד. הנתיב הוא הנתיב הבסיסי (root) כאן: "/". - השם של קובץ הווידאו של המניפסט: קובץ המניפסט של ה-HLS,
main.m3u8
.
ולוחצים על 'פתיחה'. הסרטון בשידור חי שהקידוד שלו הומר יתחיל לפעול. הסרטון ייראה כמו צילום המסך שלמטה. המונה שבמסך יפעל במרווחים של 1, ותהיה לך אפשרות לשמוע צפצוף רציף.
זהו אות פעיל לבדיקת RTMP בסיסי שנוצר על ידי FFmpeg, והקידוד שלו הומר ל-HLS על ידי Live Streaming API והוא מוצג דרך המטמון של Media CDN:
אם רוצים, אפשר להשתמש בכל נגן HLS ו-MPEG DASH אחר. כמה דברים שכדאי לחשוב עליהם:
- נגן Quicktime – מותקן כברירת מחדל במחשבי Mac. באותו אופן: פותחים חיבור לרשת אל http://34.104.36.157/main.m3u8 – מחליפים את כתובת ה-IP בכתובת של מופע Edge Cache Service.
17. מעקב אחרי CDN של מדיה
תבנית מרכז בקרה של 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 ולוחצים על סמל 3 העמודות > פעולות > מעקב > מרכזי בקרה. אמור להופיע לוח בקרה בשם Media Edge Metrics. לחיצה עליו תציג את המדדים:
18. מנקים את סביבת ה-Lab
ברכות על השלמת שיעור ה-Lab. בסעיף הזה נמחק את כל המשאבים שיצרנו בשיעור ה-Lab.
צריך להפסיק את האות של ה-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:
פקודה
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)")