1. مقدمه
شبکههای تحویل محتوا (CDN) عملکرد کاربر را با ذخیرهسازی محتوایی که اغلب به آنها دسترسی دارند، نزدیکتر به کاربران نهایی، پایان دادن به اتصالات نزدیکتر به مشتریان، استفاده مجدد از اتصالات به مبدا، و از طریق اتخاذ پروتکلهای شبکه مدرن و سفارشیسازی، بهبود میبخشند. برای کاربران (و مشتریان ما)، این به معنای تاخیر کمتر، قابلیت اطمینان بیشتر و کاهش هزینه است - که منجر به بهبود فروش، تجربه وب و افزایش خالص تجربه کاربر می شود. امروزه تعداد بسیار کمی از سایتهای مدرن و پلتفرمهای پخش ویدئو بدون CDN کار میکنند.
چیزی که یاد خواهید گرفت
این آزمایشگاه ما را از طریق مراحل استقرار یک محیط جریان کار با پخش زنده با Media CDN (CDN) + Cloud Media Live Streaming API (transcoding ویدیوی زنده) + Cloud Storage (ذخیره سازی برای فیلم ها) + پخش کننده ویدیو (VLC، Google Shaka Player) راهنمایی می کند. و غیره - پخش کننده آماده HLS + MPEG-DASH).
ما مؤلفههای Live Streaming API - ورودی، کانال - را راهاندازی میکنیم و یک فید زنده به ورودی/کانال با FFmpeg شروع میکنیم (FFmpeg میتواند یک سیگنال آزمایشی زنده تولید کند). Live Streaming API فید زنده را رمزگذاری می کند. مانیفست ویدیوی رمزگذاری شده و بخشها در یک سطل فضای ذخیرهسازی ابری ذخیره میشوند. سپس Media CDN را با سطل فضای ذخیرهسازی ابری ویدیوی زنده به عنوان مبدا راهاندازی میکنیم. در نهایت، VLC Player برای پخش محتوای زنده ذخیره شده از طریق Media CDN استفاده خواهد شد. ما همچنین یک داشبورد Cloud Monitoring را برای تجسم فعالیت Media CDN راه اندازی خواهیم کرد.
چیزی که خواهی ساخت
در این آزمایشگاه ما محیط را بر اساس معماری زیر تنظیم خواهیم کرد:
ما اجزای زیر را تنظیم می کنیم و وظایف زیر را به عنوان بخشی از آزمایشگاه انجام می دهیم:
- یک سطل Google Cloud Storage (GCS) برای ذخیره ویدیوهای رمزگذاری شده زنده ایجاد کنید
- پیکربندی Live Streaming API برای تبدیل ویدیو به چندین فرمت: HLS + MPEG DASH، SD و HD
- مولفههای پخش زنده را تنظیم کنید: ورودی/کانال
- کانال پخش زنده را راه اندازی کنید
- CDN رسانه را با سطل GCS به عنوان مبدا تنظیم کنید
- FFmpeg را برای تغذیه کانال زنده تنظیم کنید
- فید زنده رمزگذاری شده را با پخش کننده ویدیو پخش کنید
- یک داشبورد Cloud Monitoring برای نظارت بر فعالیت CDN رسانه (تأخیر، ضربه حافظه پنهان، از دست دادن حافظه پنهان و غیره) تنظیم کنید.
توجه : برای این آزمایشگاه، فرض میکنیم که کاربران به Google Cloud Console دسترسی دارند و قبلاً یک پروژه راهاندازی کردهاند. ما همچنین فرض می کنیم که کاربران با یک محیط تازه شروع می کنند و هیچ راه اندازی برای این نسخه نمایشی ندارند.
تمام اقدامات پیکربندی از طریق خط فرمان در Cloud Shell انجام خواهد شد. ما همیشه می توانیم اجزای پیکربندی شده را از طریق خط فرمان در کنسول بررسی کنیم. ما نشانگرهایی را در سراسر آزمایشگاه خواهیم دید که به کنسول ابری گوگل اشاره می کنند.
2. قبل از شروع
دسترسی CDN رسانه محدود شده است. برای دسترسی به Media CDN، با تیم حساب خود تماس بگیرید. آنها می توانند از طرف شما درخواست دسترسی ایجاد کنند. اگر عضو Google هستید و میخواهید پخش جریانی زنده را با Media CDN آزمایش کنید، برای درخواست دسترسی به Media CDN با PM برای CDN رسانه تماس بگیرید.
3. راه اندازی و الزامات
Cloud Shell را راه اندازی کنید
در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.
از Google Cloud Console ، روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:
تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:
این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را تا حد زیادی افزایش می دهد. تمام کارهای شما در این کد لبه را می توان در یک مرورگر انجام داد. شما نیازی به نصب چیزی ندارید.
4. نسخه Google Cloud SDK
در زمان نگارش، 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، باید موارد زیر را انجام دهیم:
- تنظیم متغیرهای محیطی
- API های سرویس مورد نیاز را فعال کنید
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. API های سرویس مورد نیاز را فعال کنید
ما باید مطمئن شویم که API های زیر در پروژه ما فعال هستند.
- API خدمات شبکه
- API مدیر گواهی
- Livestream API
- Media CDN Edge Cache API
Network Services API را فعال کنید
برای فعال کردن Network Services API، دستور زیر را اجرا کنید:
فرمان
gcloud services enable networkservices.googleapis.com
Certificate Manager API را فعال کنید
برای فعال کردن Certificate Manager API، دستور زیر را اجرا کنید:
فرمان
gcloud services enable certificatemanager.googleapis.com
Live Stream API را فعال کنید
برای فعال کردن Live Stream 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 Bucket را ایجاد کنید
در این بخش موارد زیر را انجام خواهیم داد:
- یک سطل Cloud Storage ایجاد کنید
- سطل را در دسترس عموم قرار دهید
بعداً در آزمایشگاه، از این سطل برای ذخیره فایلهای ویدیویی رمزگذاری شده استفاده خواهیم کرد. این سطل همچنین به عنوان منبع ذخیره سازی برای سرویس 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
اجزای زنجیره API Live Streaming به شرح زیر طراحی شده اند:
ما سطل Cloud Storage live-streaming-storage-$LOGNAME
در بخش قبل ایجاد کردیم. در دو بخش بعدی منابع زیر را ایجاد خواهیم کرد:
- ورودی جریان زنده: نقطه پایانی ورودی نقطه پایانی است که رمزگذار شما جریان ورودی شما را به آن می فرستد. میتوانید از نقطه پایانی ورودی برای تعیین پیکربندیهای جریان خود، مانند وضوح ورودی، نوع ورودی و برش ویدیو استفاده کنید.
- کانال پخش زنده: یک کانال منبعی است که جریان ورودی را از طریق یک نقطه پایانی ورودی دریافت میکند، جریان ورودی را به بازخوانیهای متعدد تبدیل میکند و جریانهای زنده خروجی را در قالبهای خاصی در مکان مشخص شده منتشر میکند. میتوانید یک جریان ورودی اصلی و پشتیبان را در یک کانال قرار دهید.
منابع زیر را بعداً در آزمایشگاه ایجاد خواهیم کرد:
- رمزگذار: رمزگذار برنامه ای است که برای ارسال جریان های ورودی استفاده می شود. در این آزمایشگاه از FFmpeg استفاده خواهیم کرد.
8. نقطه پایانی ورودی را ایجاد و پیکربندی کنید
فایل input.json را ایجاد کنید
ما یک فایل input.json
ایجاد می کنیم تا نوع سیگنال پخش زنده را مشخص کنیم. در این آزمایشگاه، ما از سیگنال زنده RTMP استفاده می کنیم.
فرمان
cat > input.json << EOF { "type": "RTMP_PUSH" } EOF
نقطه پایانی ورودی را ایجاد کنید
از زمان نگارش این آزمایشگاه، هیچ پشتیبانی از 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 }
خروجی اطلاعات مفید زیادی دارد، اما در این زمان باید روی دو زمینه تمرکز کنیم:
- شناسه عملیات: از خروجی، شناسه عملیات را کپی کرده و یادداشت کنید. در زیر شناسه عملیات از نمونه خروجی آمده است. این را می توان در خط خروجی یافت که با
"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 را ایجاد میکند که از یک بازخوانی با کیفیت بالا (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"
را ببینید که نشان می دهد نقطه پایانی ورودی ایجاد شده و آماده است.
توجه داشته باشید که "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 Cache Origin
- سرویس کش لبه
1. یک Edge Cache Origin ایجاد کنید
یک Edge Cache Origin یک مکان محتوا را نشان می دهد، مانند یک سطل ذخیره سازی ابری، یک مکان ذخیره سازی شخص ثالث، یا یک متعادل کننده بار. در اصطلاح CDN، مبدا (یا سرور مبدا) مکانی است که منبع محتوایی که میخواهیم توزیع کنیم در آن قرار دارد - به عنوان مثال تمام CSS، جاوا اسکریپت، HTML، تصاویر و غیره. برای این آزمایشگاه، ما یک مبدا ایجاد خواهیم کرد که نقشهبرداری میکند. به سطل Cloud Storage که در ابتدای آزمایشگاه ایجاد کردیم. ما Edge Cache Origin را 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 Cache Origin راه اندازی کرده ایم، می توانیم خود Edge Cache Service را ایجاد کنیم.
فایل 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:
لیستی از نامهای دامنه که توسط این سرویس CDN Media حل میشود - اینجا:demo.cme.com
. ما از این در طول این دمو استفاده خواهیم کرد. ما از آدرس IP نمونه Media CDN استفاده خواهیم کرد. -
Origin:
این همان Edge Cache Origin است که در مرحله قبل ایجاد کردیم. آن را رویcme-origin
تنظیم کنید - نام Media CDN Origin.
برای اطلاعات بیشتر در مورد متغیرهای مختلفی که میتوانید در فایل YAML استفاده کنید، به راهنمای پیکربندی Edge Cache Service مراجعه کنید.
سرویس کش Edge را ایجاد کنید
ما یک سرویس کش لبه به نام cme-demo
، در Edge Cache Origin cme-origin
، با میزبان demo.cme.com
ایجاد خواهیم کرد. برای ایجاد سرویس، دستور زیر را در Cloud Shell اجرا کنید:
فرمان
gcloud edge-cache services import cme-demo \ --source=cme-demo.yaml
ایجاد سرویس کش Edge ممکن است چند دقیقه طول بکشد.
نمونه خروجی
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 درخواست ها را می پذیرد فهرست کنیم. در این مرحله ما فقط 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 Configure the Input Endpoint" ایجاد کردیم، اجرا کنید.
فرمان
ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \ -acodec aac -vcodec h264 -f flv $URI
باید ببینید FFmpeg سیگنال زنده آزمایشی را ارسال می کند. دستور دستور را بر نمی گرداند. سیگنال تا زمانی که آن را متوقف نکنید تولید می شود. شما باید یک پنجره Cloud Shell جدید برای بقیه آزمایشگاه باز کنید.
13. New 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
اجرا می کنیم. باید در خروجی ببینیم که وضعیت پخش از "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 اجرا کنید تا محتوای سطلی را که در ابتدای آزمایشگاه ایجاد کردهایم و توسط 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 تولید و به یک سطل تبدیل می شود.
- CDN رسانه: CDN رسانه را با سطل ذخیره سازی پخش جریانی زنده به عنوان مبدا CDN رسانه پیکربندی کرد.
در بخشهای بعدی، سرویس Edge Cache را تأیید میکنیم و سپس ویدیوی رمزگذاریشده را با استفاده از آدرس IP Media CDN anycast پخش میکنیم.
15. بررسی کنید که نمونه Edge Cache Service کار می کند
در این بخش بررسی خواهیم کرد که نمونه Edge Cache Service همانطور که انتظار می رود کار می کند. برای انجام این کار، سعی می کنیم با استفاده از آدرس IP سرویس Edge Cache Service به فایلی از نمونه سرویس Edge Cache دسترسی پیدا کنیم. اولین باری که به یک شیء دسترسی پیدا می شود، هنوز کش نشده است. ما باید یک 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 است که ما ایجاد کردیم.
به دنبال هدر 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
خروجی باید ترکیبی از cache 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 را دریافت میکند. - ما API پخش زنده را راه اندازی کردیم.
- ما یک سیگنال زنده RTMP را با FFmpeg شروع کردیم که ورودی/کانال Live Streaming API را تغذیه می کند.
- ما تأیید کردیم که سیگنال زنده به کانال داده شده است و تأیید کردیم که کانال در حالت
streaming
است. - ما تأیید کردیم که فایلهای ترانکد شده (قطعات مانیفست + TS) تولید و در سطل
live-streaming-storage-$LOGNAME
ذخیره شدهاند. - یک Edge Cache Origin به نام
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 در دسترس است.
Player را روی لپ تاپ خود نصب کنید و آن را راه اندازی کنید. ما از نسخه MacOSX پخش کننده برای چند مرحله بعدی استفاده خواهیم کرد.
برای پخش یک ویدیو، به "فایل" / "شبکه باز" بروید:
تنظیمش کنید با:
- URL: http://<Replace_With_Edge_Cache_IP>/main.m3u8 . این آدرس ویدیویی است که میخواهیم پخش کنیم. توجه:
- IP نمونه CDN رسانه:
34.105.35.246
. با IP سرویس Cloud Media که مستقر کرده اید جایگزین کنید. - مسیر فایل ویدئویی مانیفست: "
/
". این مسیری است که ما در سطلlive-streaming-storage-$LOGNAME
برای ذخیره فایل های سیگنال زنده رمزگذاری شده استفاده کردیم. مسیر در اینجا مسیر اصلی است: "/". - نام فایل ویدئویی مانیفست: فایل مانیفست HLS،
main.m3u8
.
و روی "Open" کلیک کنید. باید مشاهده کنید که ویدیوی زنده رمزگذاری شده شروع به پخش می کند. ویدئو مانند تصویر زیر خواهد بود. شمارنده روی صفحه با افزایش 1 کار می کند و شما باید بتوانید یک بوق مداوم بشنوید.
این یک سیگنال زنده آزمایشی RTMP است که توسط FFmpeg تولید میشود، توسط Live Streaming API به HLS تبدیل شده و از طریق حافظه پنهان رسانه CDN ارائه میشود:
در صورت تمایل می توانید از هر پخش کننده HLS و MPEG DASH دیگری استفاده کنید. در اینجا مواردی وجود دارد که ممکن است بخواهید در نظر بگیرید:
- پخش کننده Quicktime - به طور پیش فرض در مک نصب شده است. در اینجا مشابه: یک اتصال شبکه به http://34.104.36.157/main.m3u8 باز کنید - آدرس IP را با آدرس نمونه Edge Cache Service خود جایگزین کنید.
17. نظارت بر CDN رسانه
یک الگوی داشبورد Media CDN توسط تیم SME ایجاد شد - 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 بروید و روی 3 نوار > Operations > Monitoring > Dashboards کلیک کنید. باید داشبوردی به نام «Media Edge Metrics» ببینید. روی آن کلیک کنید و معیارها را مشاهده خواهید کرد:
18. محیط آزمایشگاه را تمیز کنید
بابت تکمیل آزمایشگاه تبریک می گویم. در این بخش تمام منابعی را که در آزمایشگاه ایجاد کرده ایم حذف می کنیم.
سیگنال FFmpeg را متوقف کنید:
در ترمینال Cloud Shell که FFmpeg در آن اجرا می شود <CTRL+C>
را بزنید.
کانال پخش زنده را متوقف کنید:
فرمان
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)")