پخش زنده در Google Cloud با CDN رسانه و Live Streaming API

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 راه اندازی خواهیم کرد.

چیزی که خواهی ساخت

در این آزمایشگاه ما محیط را بر اساس معماری زیر تنظیم خواهیم کرد:

de33cb3e75d52549.png

ما اجزای زیر را تنظیم می کنیم و وظایف زیر را به عنوان بخشی از آزمایشگاه انجام می دهیم:

  • یک سطل 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 در نوار ابزار بالا سمت راست کلیک کنید:

55efc1aaa7a4d3ad.png

تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

7ffe5cbb04455448.png

این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 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

مراحل بعدی

  1. اگر نسخه SDK 408.0.0 یا بالاتر است، به بخش بعدی بروید.
  2. اگر نسخه SDK کمتر از 408.0.0 است، دستور فهرست شده در زیر را برای به روز رسانی SDK اجرا کنید.
sudo apt-get update && sudo apt-get install google-cloud-sdk

5. پیش نیازها

قبل از شروع به پیکربندی منابع GCP، باید موارد زیر را انجام دهیم:

  1. تنظیم متغیرهای محیطی
  2. 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 را ایجاد کنید

در این بخش موارد زیر را انجام خواهیم داد:

  1. یک سطل Cloud Storage ایجاد کنید
  2. سطل را در دسترس عموم قرار دهید

بعداً در آزمایشگاه، از این سطل برای ذخیره فایل‌های ویدیویی رمزگذاری شده استفاده خواهیم کرد. این سطل همچنین به عنوان منبع ذخیره سازی برای سرویس 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 به شرح زیر طراحی شده اند:

96b5d26aedeb89a6.png

ما سطل 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. کانال پخش زنده را راه اندازی کنید

اکنون که کانال پخش زنده خود را ایجاد کردیم، بیایید کانال را شروع کنیم. در این بخش موارد زیر را انجام خواهیم داد:

  1. کانال پخش زنده را راه اندازی کنید
  2. وضعیت کانال را بررسی کنید، باید مطمئن شویم که 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 را مستقر خواهیم کرد. ما منابع زیر را ایجاد خواهیم کرد:

  1. Edge Cache Origin
  2. سرویس کش لبه

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. سیگنال ورودی را تولید کنید

اکنون که همه سرویس‌های مورد نیاز را پیکربندی کرده‌ایم، اجازه دهید سیگنال ورودی پخش زنده را تولید کنیم. در این بخش موارد زیر را انجام خواهیم داد:

  1. FFmpeg، یک نرم افزار منبع باز رایگان را نصب کنید
  2. یک سیگنال زنده آزمایشی به ورودی/کانال ارسال کنید

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 باز می شود.

b3c7b0be6276c194.png

بقیه آزمایشگاه را در پنجره 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 با سطل GCS live-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 در دسترس است.

2a2d19abe728d222.png

Player را روی لپ تاپ خود نصب کنید و آن را راه اندازی کنید. ما از نسخه MacOSX پخش کننده برای چند مرحله بعدی استفاده خواهیم کرد.

برای پخش یک ویدیو، به "فایل" / "شبکه باز" بروید:

f85565301f7c68dc.png

تنظیمش کنید با:

  • 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 ارائه می‌شود:

28fc359b49d44ec2.png

در صورت تمایل می توانید از هر پخش کننده 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» ببینید. روی آن کلیک کنید و معیارها را مشاهده خواهید کرد:

d0821d84a88a928d.png

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)")