1. מבוא
רשתות להעברת תוכן (CDN) משפרות את הביצועים של המשתמשים על ידי שמירת תוכן שמתבצעת אליו גישה לעיתים קרובות במטמון, קרוב יותר למשתמשי הקצה, סגירת חיבורים קרוב יותר ללקוחות, שימוש חוזר בחיבורים למקור ואימוץ של פרוטוקולים מודרניים של רישות והתאמות אישיות. למשתמשים (וללקוחות שלנו), המשמעות היא זמן אחזור קצר יותר, אמינות גבוהה יותר ועלות מופחתת – מה שמוביל לשיפור במכירות, בחוויית השימוש באתר ובעלייה נטו בחוויית המשתמש. כיום, מעט מאוד אתרים מודרניים ופלטפורמות סטרימינג של וידאו פועלים ללא CDN.
מה תלמדו
במעבדה הזו נלמד איך לפרוס סביבת עבודה לסטרימינג בשידור חי באמצעות Media CDN (CDN) + Cloud Media Live Streaming API (המרת קידוד וידאו בשידור חי) + Cloud Storage (אחסון הסרטונים) + Video Player (VLC, Google Shaka Player וכו' – נגן וידאו מוכן ל-HLS + MPEG-DASH).
אנחנו נגדיר את רכיבי ה-API של השידור החי – Input (קלט) ו-Channel (ערוץ) – ונתחיל פיד פעיל אל ה-Input/Channel באמצעות FFmpeg (אפשר ליצור אות בדיקה בשידור חי באמצעות FFmpeg). Live Streaming API יבצע המרה של הפיד הפעיל. מניפסט הסרטון והקטעים שלו אחרי הקידוד יאוחסנו בקטגוריה של Cloud Storage. לאחר מכן נגדיר את Media CDN עם קטגוריית Cloud Storage של וידאו בשידור חי כמקור. לבסוף, נשתמש ב-VLC Player כדי להפעיל תוכן בשידור חי שנשמר במטמון באמצעות Media CDN. בנוסף, נגדיר לוח בקרה של Cloud Monitoring כדי להציג את הפעילות של Media CDN.
מה תפַתחו
בשיעור ה-Lab הזה נגדיר את הסביבה על סמך הארכיטקטורה הבאה:

במסגרת שיעור ה-Lab הזה נגדיר את הרכיבים הבאים ונבצע את המשימות הבאות:
- יצירת קטגוריה של Google Cloud Storage (GCS) לאחסון סרטוני הווידאו שמתומללים בזמן אמת
- הגדרת Live Streaming API לקידוד מחדש של הסרטון למספר פורמטים: HLS + MPEG DASH, SD ו-HD
- הגדרת רכיבי השידור החי: קלט/ערוץ
- הפעלת הערוץ של השידור החי
- הגדרה של Media CDN באמצעות קטגוריית GCS כמקור
- הגדרת FFmpeg להזנת הערוץ בשידור חי
- הפעלת הסטרימינג של הפיד הפעיל שהומר קידודו באמצעות נגן וידאו
- הגדרה של מרכז בקרה ב-Cloud Monitoring למעקב אחרי הפעילות ב-Media CDN (זמן אחזור, מציאה במטמון (cache hit), אי מציאה במטמון וכו')
הערה: לצורך ה-Lab הזה, אנחנו מניחים שלמשתמשים יש גישה ל-מסוף Google Cloud ושהם כבר הגדירו פרויקט. אנחנו גם מניחים שהמשתמשים מתחילים בסביבה חדשה ואין להם הגדרות שקשורות להדגמה הזו.
כל פעולות ההגדרה יתבצעו דרך שורת הפקודה ב-Cloud Shell. תמיד אפשר לבדוק במסוף את הרכיבים שהוגדרו באמצעות שורת הפקודה. במהלך שיעור ה-Lab, נראה רמזים שיפנו אותנו אל מסוף Google Cloud.
2. לפני שמתחילים
הגישה ל-Media CDN מוגבלת. כדי לקבל גישה ל-Media CDN, צריך לפנות לצוות ניהול החשבון. הם יכולים ליצור בקשת גישה בשמכם. אם אתם עובדים ב-Google ואתם רוצים לבדוק את התכונה 'סטרימינג בשידור חי' באמצעות Media CDN, אתם יכולים לפנות למנהל המוצר של Media CDN כדי לבקש גישה ל-Media CDN.
3. הגדרה ודרישות
מפעילים את Cloud Shell
אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-codelab הזה תשתמשו ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.
ב-מסוף 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.
Command
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, צריך לבצע את הפעולות הבאות:
- הגדרה של משתני סביבה
- הפעלת ממשקי Service API נדרשים
1. הגדרת משתני סביבה
במהלך שיעור ה-Lab הזה, נריץ פקודות gcloud ו-curl עם כמה משתנים. צריך להגדיר את משתני הסביבה הבאים.
- מזהה פרויקט
- מספר הפרויקט
- שם משתמש
- אזור
- מזהה קלט
- מזהה הערוץ
מזהה הפרויקט ושם המשתמש
משתני הסביבה האלה מוגדרים מראש בדרך כלל ב-Cloudshell. נשתמש בפקודה env כדי לאמת.
Command
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 כדי להגדיר את משתני הסביבה
Command
source ~/env_variables.txt
אימות שהמשתנים מוגדרים
צריך לוודא שכל משתני הסביבה הנדרשים מוגדרים. בפלט אמורים להופיע 6 משתני סביבה.
Command
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
- Certificate Manager API
- Livestream API
- Media CDN Edge Cache API
הפעלת Network Services API
כדי להפעיל את Network Services API, מריצים את הפקודה הבאה:
Command
gcloud services enable networkservices.googleapis.com
הפעלת Certificate Manager API
כדי להפעיל את Certificate Manager API, מריצים את הפקודה הבאה:
Command
gcloud services enable certificatemanager.googleapis.com
הפעלת Live Stream API
כדי להפעיל את Live Stream API, מריצים את הפקודה הבאה:
Command
gcloud services enable livestream.googleapis.com
הפעלת Media CDN Edge Cache API
כדי להפעיל את Media CDN Edge Cache API, מריצים את הפקודה הבאה:
Command
gcloud services enable edgecache.googleapis.com
מוודאים שממשקי ה-API מופעלים
מריצים את הפקודה gcloud services list כדי להציג רשימה של כל ממשקי ה-API המופעלים. אמורים להופיע 4 ממשקי API בפלט.
Command
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 כדי ליצור את הקטגוריה:
Command
gsutil mb gs://live-streaming-storage-$LOGNAME
2. הגדרת הקטגוריה כנגישה באופן ציבורי
נשתמש בפקודה gsutil iam כדי להפוך את הקבצים לזמינים לכולם:
Command
gsutil iam ch allUsers:objectViewer gs://live-streaming-storage-$LOGNAME
7. הגדרת הסביבה של Live Streaming API
הרכיבים בשרשרת של Live Streaming API בנויים באופן הבא:

בקטע הקודם יצרנו את הקטגוריה של Cloud Storage live-streaming-storage-$LOGNAME. בשני הקטעים הבאים ניצור את המשאבים הבאים:
- קלט לשידור חי: נקודת קצה של קלט היא נקודת קצה שאליה המקודד שולח את זרם הקלט. אפשר להשתמש בנקודת הקצה של הקלט כדי להגדיר את הסטרימינג, למשל רזולוציית הקלט, סוג הקלט וחיתוך הסרטון.
- ערוץ סטרימינג בשידור חי: ערוץ הוא משאב שמקבל את זרם הקלט דרך נקודת קצה של קלט, ממיר את הקידוד של זרם הקלט לכמה גרסאות, ומפרסם שידורים חיים של פלט בפורמטים מסוימים במיקום שצוין. אפשר לכלול בערוץ אחד גם שידור ראשי וגם שידור לגיבוי.
בהמשך שיעור ה-Lab הזה ניצור את המשאבים הבאים:
- מקודד: מקודד הוא תוכנה שמשמשת לשליחת זרמי קלט. בשיעור ה-Lab הזה נשתמש ב-FFmpeg.
8. יצירה והגדרה של נקודת הקצה של הקלט
יצירת הקובץ input.json
ניצור קובץ input.json כדי לציין את סוג האות של השידור החי. בשיעור ה-Lab הזה נשתמש באות שידור חי מסוג RTMP.
Command
cat > input.json << EOF
{
"type": "RTMP_PUSH"
}
EOF
יצירת נקודת קצה של קלט
בזמן כתיבת המעבדה הזו, אין תמיכה ב-gcloud עבור Live Stream API. נשתמש בפקודה curl כדי לבצע את הקריאות ל-API.
Command
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".
Command
export OPERATION_ID_1=<OPERATION>
Command
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 מהפלט הקודם בהמשך ה-Lab. בשלב הזה, מגדירים משתנה סביבה ל-URI.
Command
export URI=<uri>
מחליפים את <uri> במזהה המשאבים האחיד (URI) שרשמתם למעלה. אפשר גם להשתמש בשיטת אחזור נתונים כדי לאחזר את ה-URI
Command
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, שכולל עיבוד יחיד ברזולוציה גבוהה (1280x720). הערוץ ישויך לנקודת הקצה של הקלט ולקטגוריית האחסון שיצרנו קודם.
יצירת הקובץ channel.json
בטרמינל של Cloud Shell, מקלידים את הפקודה הבאה כדי ליצור קובץ "channel.json":
Command
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 כדי ליצור את הערוץ:
Command
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
Command
export OPERATION_ID_2=<OPERATION>
Command
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הפקודה הבאה כדי להפעיל את הערוץ:
Command
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 כדי לקבל את הסטטוס של הערוץ:
Command
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 Cache Service
1. יצירת המקור למטמון הקצה
המקור למטמון הקצה מייצג מיקום של תוכן, כמו קטגוריה של Cloud Storage, מיקום אחסון של צד שלישי או מאזן עומסים. במונחים של CDN, המקור (או שרת המקור) הוא המיקום שבו נמצא המקור של התוכן שאנחנו רוצים להפיץ – למשל, כל קובצי ה-CSS, JavaScript, HTML, תמונות וכו'. בסדנה הזו ניצור מקור שממופה לקטגוריה של Cloud Storage שיצרנו בתחילת הסדנה. נתקשר אל המקור למטמון הקצה cme-origin. מקור ה-CDN הוא המקום שבו כל תוכן המקור מאוחסן לפני שהוא מופץ לשרתי מטמון הקצה.
נשתמש בפקודה gcloud edge-cache origins create כדי ליצור את המקור. השלמת הפקודה תימשך כמה דקות.
Command
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 Cache
אחרי שמגדירים את המקור למטמון הקצה, אפשר ליצור את שירות Edge Cache עצמו.
יצירת קובץ cme-demo.yaml
הגדרת שירות Edge Cache מתבצעת באמצעות קובץ 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:זהו המקור למטמון הקצה שיצרנו בשלב הקודם. מגדירים את הערךcme-origin– שם נקודת המוצא של Media CDN.
מידע נוסף על המשתנים השונים שאפשר להשתמש בהם בקובץ ה-YAML זמין במדריך להגדרת Edge Cache Service.
יצירת שירות Edge Cache
ניצור שירות Edge Cache בשם cme-demo, במקור למטמון הקצה cme-origin, עם מארח demo.cme.com. כדי ליצור את השירות, מריצים את הפקודה הבאה ב-Cloud Shell:
Command
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 כדי שתוכלו להשתמש בכתובת ה-IP של השירות להזרמת הסרטון בהמשך. קובץ ה-YAML של Edge Cache Service מאפשר לנו לפרט את כל שמות המארחים או כתובות ה-IP ש-Edge Cache Service תקבל מהם בקשות. בשלב הזה ציינו רק את demo.cme.com כמארח. כדי לספק תרגום שם (name resolution) לדומיין הזה, אפשר להגדיר תחום 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, מריצים את הפקודה הבאה:
Command
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:
Command
sudo apt install ffmpeg -y
אחרי שההתקנה מסתיימת, בודקים את הגרסה של FFmpeg כדי לוודא שהיא הותקנה בצורה תקינה:
Command
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 שיצרנו בקטע 'יצירה והגדרה של נקודת הקצה של הקלט'.
Command
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 כדי להגדיר את משתני הסביבה.
Command
source ~/env_variables.txt
אימות שהמשתנים מוגדרים
צריך לוודא שכל משתני הסביבה הנדרשים מוגדרים. בפלט אמורים להופיע 6 משתני סביבה.
Command
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"
Command
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" – שמציין שהערוץ משדר סטרימינג והאות של השידור החי עובר המרה.
בנוסף, נבדוק את התוכן של ה-bucket שבו אמור להופיע קובץ מניפסט וכמה מקטעי וידאו בפורמט TS. מריצים את הפקודה הבאה ב-Cloud Shell כדי להציג את התוכן של קטגוריית האחסון שיצרנו בתחילת המעבדה, שמשמשת את Live Streaming API כדי להפיק את מניפסט האות של השידור החי שעבר המרה ואת פלחי הווידאו בפורמט TS:
Command
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: האות לשידור החי נוצר ועובר קידוד מחדש ל-bucket באמצעות Live Streaming API
- Media CDN: הגדרת Media CDN עם קטגוריית האחסון של השידור החי כמקור של Media CDN.
בקטעים הבאים נאמת את שירות Edge Cache ואז נזרים את הסרטון שעבר המרה באמצעות כתובת ה-IP של Media CDN anycast.
15. אימות של מופע Edge Cache Service
בקטע הזה נבדוק שמופע Edge Cache Service פועל כמו שצריך. לשם כך, ננסה לגשת לקובץ ממופע של Edge Cache Service באמצעות כתובת ה-IP של Edge Cache Service. בפעם הראשונה שניגשים לאובייקט, הוא עדיין לא נמצא במטמון. צריך לראות מטמון MISS. בבקשה הראשונה, האובייקט נקרא מהמקור ונשמר במטמון בקצה הרשת. כל הניסיונות הבאים לגשת לאותו קובץ יחזירו מטמון HIT כי האובייקט נמצא עכשיו במטמון בקצה הרשת. כדי לבדוק את ההתנהגות הזו:
מריצים את הפקודה curl הבאה ב-Cloud Shell כדי לגשת לקובץ המניפסט של הסרטון שעבר המרת קידוד, שמאוחסן במקור למטמון הקצה:
Command
curl -svo /dev/null --resolve demo.cme.com:80:<Replace_With_Edge_Cache_IP> \ "http://demo.cme.com/main.m3u8"
שימו לב לפעולת ה-resolve שבה אנחנו משתמשים בכתובת ה-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.
Command
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 Media Edge פועל כצפוי.
16. שידור של וידאו עם אותות חיים שעברו המרה של הקידוד באמצעות VLC
בשלב הזה נחבר את כל הנקודות ונשלב את כל השלבים שעבדנו עליהם עד עכשיו:
- יצרנו מאגר שנקרא
live-streaming-storage-$LOGNAMEשמקבל את התוצאה של אות השידור החי שעבר המרה לתוכן HLS באמצעות Live Streaming API. - הגדרנו את Live Streaming API.
- התחלנו אות RTMP בשידור חי באמצעות FFmpeg, שמוזן לקלט של Live Streaming API או לערוץ.
- בדקנו שהאות של השידור החי הועבר לערוץ ושהערוץ היה במצב
streaming. - בדקנו שקובצי הטרנסקוד שהתקבלו (מניפסט + פלחי TS) נוצרו ונשמרו בדלי
live-streaming-storage-$LOGNAME. - הוגדר המקור למטמון הקצה בשם
cme-originעם קטגוריית GCSlive-streaming-storage-$LOGNAMEכמקור. - מופע של Edge Cache בשם
cme-demoהוגדר עםcme-originכמקור. - בדקנו את ההתנהגות (אי מציאה במטמון, מציאה במטמון) של מופע Edge Cache Service.
הגענו עכשיו למצב שבו אפשר להשתמש בנגן וידאו כדי להזרים את האות של השידור החי שעבר המרה דרך מטמון Media CDN. כדי לעשות זאת, נשתמש ב-VLC Player. VLC Player הוא נגן מולטימדיה וסביבת עבודה בפלטפורמות שונות, חינמי וקוד פתוח, שמנגן את רוב קובצי המולטימדיה. הוא מפעיל פורמטים של מדיה דינמית (כמו DASH ו-HLS). הנגן משתמש בעיקרון של סטרימינג דינמי – בהתאם לאיכות החיבור לרשת ולרוחב הפס הזמין, הנגן יתאים את איכות הסרטון שמופעל. בעבודת הטרנסקודינג שביצענו הרגע, השתמשנו בהגדרות הקבועות מראש שמוגדרות כברירת מחדל ויצרנו שתי איכויות 'בלבד': SD ו-HD. כשמתחילים להפעיל את הסרטון בנגן, הוא אמור להתחיל לפעול בפורמט SD ולעבור במהירות לפורמט HD אם החיבור לרשת טוב מספיק.
אנחנו נשדר את האות בשידור חי אחרי קידוד טרנסקוד של HLS (פורמט וידאו של אפל שנתמך באופן נרחב). הקובץ המתאים נקרא main.m3u8 – זהו מניפסט HLS. קובץ המניפסט מצביע על קטעי הווידאו בפורמט TS.
כדי להשתמש ב-VLC Player, צריך להיכנס לכתובת 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 של שירות המדיה בענן שפרסתם. - הנתיב לקובץ הווידאו של המניפסט: '
/'. זהו הנתיב שבו השתמשנו בדליlive-streaming-storage-$LOGNAMEכדי לאחסן את קובצי האותות של השידור החי שעברו המרה. הנתיב הוא נתיב הבסיס כאן: '/'. - השם של קובץ המניפסט של הסרטון: קובץ המניפסט של 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. מעקב אחרי Media 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 ולוחצים על סמל 3 הקווים > Operations > מעקב > מרכז בקרה. אמור להופיע לוח בקרה בשם Media Edge Metrics (מדדים של Media Edge). לוחצים על האפשרות הזו ורואים את המדדים:

18. לפנות את סביבת ה-Lab
כל הכבוד על השלמת המעבדה. בקטע הזה נמחק את כל המשאבים שיצרנו במהלך שיעור ה-Lab.
הפסקת האות של FFmpeg:
לוחצים על <CTRL+C> בטרמינל של Cloud Shell שבו FFmpeg פועל.
כדי להפסיק את הערוץ של השידור החי:
Command
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"
מחיקת הערוץ של השידור החי:
Command
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"
מחיקת נקודת הקצה של קלט השידור החי:
Command
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:
Command
gsutil rm -r gs://live-streaming-storage-$LOGNAME
מחיקת מופע של שירות Edge Cache:
Command
gcloud edge-cache services delete cme-demo
כשמוצגת הודעה לאישור המחיקה, מקלידים Y.
מחיקת המקור למטמון הקצה:
Command
gcloud edge-cache origins delete cme-origin
כשמוצגת הודעה לאישור המחיקה, מקלידים Y.
מחיקת לוח בקרה בהתאמה אישית
Command
gcloud monitoring dashboards delete $(gcloud monitoring dashboards list --filter="displayName:Media Edge Metrics" --format="value(name)")