Media CDN और Live Streaming API की मदद से, Google Cloud पर लाइव स्ट्रीमिंग

1. परिचय

कॉन्टेंट डिलीवरी नेटवर्क (सीडीएन) से उपयोगकर्ताओं की परफ़ॉर्मेंस बेहतर होती है. इसके लिए, उपयोगकर्ताओं के अक्सर इस्तेमाल किए जाने वाले कॉन्टेंट को कैश मेमोरी में सेव किया जाता है. साथ ही, असली उपयोगकर्ताओं के नज़दीक मौजूद कॉन्टेंट को कैश मेमोरी में सेव किया जाता है, क्लाइंट के साथ कनेक्शन को खत्म किया जाता है, ऑरिजिन से कनेक्शन फिर से इस्तेमाल किया जाता है, और आधुनिक नेटवर्किंग प्रोटोकॉल और कस्टमाइज़ेशन के ज़रिए ऐसा किया जाता है. इसका मतलब है कि उपयोगकर्ताओं और हमारे ग्राहकों के लिए, इंतज़ार का समय कम होना, विश्वसनीयता कम होना, और लागत में कमी आती है. इससे बिक्री और वेब अनुभव में सुधार होता है. साथ ही, उपयोगकर्ता अनुभव भी बेहतर होता है. आज-कल बहुत कम आधुनिक साइटें और वीडियो स्ट्रीमिंग प्लैटफ़ॉर्म, सीडीएन के बिना काम करते हैं.

आप इन चीज़ों के बारे में जानेंगे

यह लैब हमें मीडिया सीडीएन (सीडीएन) + Cloud Media Live Streaming API (लाइव वीडियो ट्रांसकोडिंग) + Cloud Storage (वीडियो के लिए स्टोरेज) + वीडियो प्लेयर (VLC, Google Shaka Player वगैरह - HLS + MPEG-DASH रेडी प्लेयर) की मदद से, लाइव स्ट्रीमिंग वर्कफ़्लो एनवायरमेंट को लागू करने के चरणों के बारे में बताएगा.

हम Live Streaming API कॉम्पोनेंट - इनपुट, चैनल - को सेट अप करेंगे. इसके बाद, FFmpeg की मदद से इनपुट/चैनल में लाइव फ़ीड शुरू करेंगे (FFmpeg से लाइव टेस्ट सिग्नल जनरेट किया जा सकता है). Live Streaming API, लाइव फ़ीड को ट्रांसकोड करेगा. ट्रांसकोड किया गया वीडियो मेनिफ़ेस्ट और सेगमेंट, Cloud Storage बकेट में सेव किए जाएंगे. इसके बाद, हम ऑरिजिन के तौर पर लाइव वीडियो Cloud Storage बकेट के साथ मीडिया सीडीएन सेट अप करेंगे. आखिर में, VLC प्लेयर का इस्तेमाल, मीडिया सीडीएन के ज़रिए कैश मेमोरी में सेव किए गए लाइव कॉन्टेंट को चलाने के लिए किया जाएगा. हम मीडिया सीडीएन की गतिविधि को विज़ुअलाइज़ करने के लिए, क्लाउड मॉनिटरिंग डैशबोर्ड भी सेट अप करेंगे.

आपको क्या बनाना होगा

इस लैब में, हम इन आर्किटेक्चर के आधार पर एनवायरमेंट को सेटअप करेंगे:

de33cb3e75d52549.png

हम लैब के हिस्से के तौर पर, इन कॉम्पोनेंट को सेटअप करेंगे और ये काम करेंगे:

  • लाइव ट्रांसकोड किए गए वीडियो सेव करने के लिए Google Cloud Storage (GCS) बकेट बनाएं
  • वीडियो को कई फ़ॉर्मैट में ट्रांसकोड करने के लिए, Live Streaming API को कॉन्फ़िगर करें: HLS + MPEG DASH, SD और HD
  • लाइव स्ट्रीमिंग कॉम्पोनेंट सेट अप करना: इनपुट/चैनल
  • लाइव स्ट्रीम चैनल शुरू करें
  • मीडिया सीडीएन को GCS बकेट के साथ ऑरिजिन के तौर पर सेटअप करें
  • लाइव चैनल पर फ़ीड करने के लिए, FFmpeg सेट अप करें
  • वीडियो प्लेयर की मदद से, ट्रांसकोड किए गए लाइव फ़ीड को स्ट्रीम करें
  • मीडिया सीडीएन गतिविधि, जैसे कि इंतज़ार का समय, कैश मेमोरी हिट, कैश मेमोरी में सेव न होना वगैरह को मॉनिटर करने के लिए, क्लाउड मॉनिटरिंग डैशबोर्ड सेटअप करें

ध्यान दें: इस लैब के लिए, हम यह मानते हैं कि उपयोगकर्ताओं के पास Google Cloud Console का ऐक्सेस है और उनके पास पहले से ही एक प्रोजेक्ट सेट अप है. हम यह भी मानते हैं कि उपयोगकर्ता किसी नए माहौल से शुरुआत करते हैं और उनके पास इस डेमो के लिए कुछ भी सेट अप नहीं है.

कॉन्फ़िगरेशन से जुड़ी सभी कार्रवाइयां, Cloud Shell में कमांड लाइन के ज़रिए की जाएंगी. हम कंसोल में कमांड लाइन के ज़रिए कॉन्फ़िगर किए गए कॉम्पोनेंट की हमेशा जांच कर सकते हैं. हमें पूरी लैब में Google Cloud Console के पॉइंटर दिखेंगे.

2. शुरू करने से पहले

मीडिया सीडीएन ऐक्सेस प्रतिबंधित है. मीडिया सीडीएन का ऐक्सेस पाने के लिए, खाता मैनेज करने वाली अपनी टीम से संपर्क करें. वे आपकी ओर से ऐक्सेस का अनुरोध कर सकते हैं. अगर आप Google का हिस्सा हैं और आपको मीडिया सीडीएन के साथ लाइव स्ट्रीमिंग की जांच करनी है, तो मीडिया सीडीएन के ऐक्सेस का अनुरोध करने के लिए, मीडिया सीडीएन के पीएम से संपर्क करें.

3. सेटअप और ज़रूरी शर्तें

Cloud Shell शुरू करना

Google Cloud को आपके लैपटॉप से, कहीं से भी ऑपरेट किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जा रहा है. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

Google Cloud Console में जाकर, सबसे ऊपर दाईं ओर मौजूद टूलबार पर क्लाउड शेल आइकॉन पर क्लिक करें:

55efc1aaa7a4d3ad.png

प्रावधान करने और एनवायरमेंट से कनेक्ट होने में कुछ ही समय लगेगा. उसके पूरा हो जाने पर, आपको कुछ ऐसा दिखाई देगा:

7ffe5cbb04455448.png

इस वर्चुअल मशीन में ऐसे सभी डेवलपमेंट टूल मौजूद हैं जिनकी आपको ज़रूरत पड़ेगी. यह पांच जीबी की स्थायी होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud पर चलता है. यह नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रक्रिया को बेहतर बनाता है. इस कोडलैब (कोड बनाना सीखना) में आपका सारा काम ब्राउज़र में किया जा सकता है. आपको कुछ भी इंस्टॉल करने की ज़रूरत नहीं है.

4. Google Cloud SDK का वर्शन

जवाब लिखते समय, 408.0.0 Google Cloud SDK का नया वर्शन है. इस लैब में मौजूद सभी निर्देशों की जांच, Google Cloud SDK के सबसे नए वर्शन पर की गई है. आगे बढ़ने से पहले, कृपया पक्का करें कि Cloud Shell में, SDK टूल के सबसे नए वर्शन का इस्तेमाल किया जा रहा हो.

SDK टूल के वर्शन की जांच करना

SDK टूल के वर्शन की जांच करने के लिए, हम gcloud version कमांड का इस्तेमाल करेंगे.

निर्देश

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. ज़रूरी Service API चालू करें

1. एनवायरमेंट वैरिएबल सेटअप करें

इस पूरे लैब में, हम कुछ वैरिएबल के साथ gcloud और curl कमांड चलाएंगे. हमें नीचे दिए गए एनवायरमेंट वैरिएबल कॉन्फ़िगर करने होंगे.

  • प्रोजेक्ट आईडी
  • प्रोजेक्ट नंबर
  • उपयोगकर्ता का नाम
  • क्षेत्र
  • इनपुट आईडी
  • चैनल आईडी

प्रोजेक्ट आईडी और उपयोगकर्ता का नाम

ये एनवायरमेंट वैरिएबल, आम तौर पर Cloudshell में पहले से कॉन्फ़िगर किए जाते हैं. हम पुष्टि करने के लिए, env निर्देश का इस्तेमाल करेंगे.

निर्देश

env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME'

आउटपुट का उदाहरण

DEVSHELL_PROJECT_ID=<YOUR_PROJECT_ID>
LOGNAME=<YOUR_USERNAME>

env_variables फ़ाइल बनाएं

env_variables.txt फ़ाइल बनाने के लिए, cat कमांड का इस्तेमाल करें. नीचे दिए गए निर्देश से, उपयोगकर्ता की होम डायरेक्ट्री में 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
  • लाइव स्ट्रीम एपीआई
  • मीडिया CDN Edge कैश एपीआई

Network Services API चालू करना

Network Services API को चालू करने के लिए, यह कमांड चलाएं:

निर्देश

gcloud services enable networkservices.googleapis.com

सर्टिफ़िकेट मैनेजर एपीआई चालू करें

सर्टिफ़िकेट मैनेजर API (एपीआई) को चालू करने के लिए, नीचे दिया गया निर्देश चलाएं:

निर्देश

gcloud services enable certificatemanager.googleapis.com

Live Stream API चालू करना

Live Stream API को चालू करने के लिए, यह निर्देश चलाएं:

निर्देश

gcloud services enable livestream.googleapis.com

Media CDN Edge कैश एपीआई चालू करें

Media CDN Edge cache API को चालू करने के लिए, यह कमांड चलाएं:

निर्देश

gcloud services enable edgecache.googleapis.com

पुष्टि करना कि एपीआई चालू हैं

चालू किए गए सभी एपीआई की सूची बनाने के लिए, gcloud services list कमांड चलाएं. हमें आउटपुट में चार एपीआई दिखेंगे.

निर्देश

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 बकेट बनाना

इस सेक्शन में हम ये काम करेंगे:

  1. Cloud Storage बकेट बनाना
  2. बकेट को सार्वजनिक रूप से ऐक्सेस करने लायक बनाएं

लैब में आगे चलकर, हम ट्रांसकोड की गई वीडियो फ़ाइलों को सेव करने के लिए इस बकेट का इस्तेमाल करेंगे. यह बकेट, मीडिया सीडीएन सेवा के लिए ऑरिजिन स्टोरेज के तौर पर भी काम करेगी.

1. बकेट बनाना

हम बकेट बनाने के लिए, gsutil mb कमांड का इस्तेमाल करेंगे:

निर्देश

gsutil mb gs://live-streaming-storage-$LOGNAME

2. बकेट को सार्वजनिक रूप से ऐक्सेस करने लायक बनाएं

फ़ाइलों को सार्वजनिक तौर पर उपलब्ध कराने के लिए, हम gsutil iam कमांड का इस्तेमाल करेंगे:

निर्देश

gsutil iam ch allUsers:objectViewer gs://live-streaming-storage-$LOGNAME

7. Live Streaming API को सेट अप करना

Live Streaming API चेन के कॉम्पोनेंट इस तरह बनाए गए हैं:

96b5d26aedeb89a6.png

हमने पिछले सेक्शन में, Cloud Storage बकेट live-streaming-storage-$LOGNAME बनाया है. अगले दो सेक्शन में, हम इन संसाधनों का कॉन्टेंट बनाएंगे:

  • लाइव स्ट्रीमिंग इनपुट: इनपुट एंडपॉइंट एक एंडपॉइंट है, जिस पर आपका एन्कोडर आपकी इनपुट स्ट्रीम भेजता है. अपनी स्ट्रीम के कॉन्फ़िगरेशन, जैसे कि इनपुट रिज़ॉल्यूशन, इनपुट टाइप, और वीडियो को काटने के लिए, इनपुट एंडपॉइंट का इस्तेमाल किया जा सकता है.
  • लाइव स्ट्रीमिंग चैनल: चैनल एक ऐसा संसाधन है जिसमें इनपुट एंडपॉइंट से इनपुट स्ट्रीम का डेटा डाला जाता है. यह इनपुट स्ट्रीम को कई रेंडरिंग में ट्रांसकोड करता है और आउटपुट लाइव स्ट्रीम को तय जगह पर खास फ़ॉर्मैट में पब्लिश करता है. एक ही चैनल में, प्राइमरी और बैकअप इनपुट स्ट्रीम शामिल की जा सकती हैं.

हम बाद में लैब में इन संसाधनों को बनाएंगे:

  • एन्कोडर: एन्कोडर एक प्रोग्राम है, जिसका इस्तेमाल इनपुट स्ट्रीम भेजने के लिए किया जाता है. इस लैब में, हम FFmpeg का इस्तेमाल करेंगे.

8. इनपुट एंडपॉइंट बनाएं और कॉन्फ़िगर करें

input.json फ़ाइल बनाना

हम लाइव स्ट्रीम सिग्नल टाइप की जानकारी देने के लिए, एक input.json फ़ाइल बनाएंगे. इस लैब में, हम आरटीएमपी लाइव सिग्नल का इस्तेमाल कर रहे हैं.

निर्देश

cat > input.json << EOF
{
  "type": "RTMP_PUSH"
}
EOF

इनपुट एंडपॉइंट बनाना

इस लैब के मेल खाने तक, Live Stream API के लिए कोई gcloud सहायता उपलब्ध नहीं है. एपीआई कॉल करने के लिए, हम curl कमांड का इस्तेमाल करेंगे.

निर्देश

curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @input.json \
"https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/inputs?inputId=$INPUT_ID"

आउटपुट का उदाहरण

{
  "name": "projects/PROJECT_NUMBER/locations/us-west2/operations/operation-1661405972853-5e70a38d6f27f-79100d00-310671b4",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": "2022-08-25T05:39:32.884030164Z",
    "target": "projects/PROJECT_NUMBER/locations/us-west2/inputs/lab-live-input",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

इस आउटपुट में काफ़ी काम की जानकारी है, लेकिन इस समय हमें दो फ़ील्ड पर फ़ोकस करना है:

  • ऑपरेशन आईडी: आउटपुट से, ऑपरेशन आईडी को कॉपी करें और नोट करें. नीचे, आउटपुट के उदाहरण में दिया गया ऑपरेशन आईडी दिया गया है. आपको यह जानकारी, "name" से शुरू होने वाली आउटपुट लाइन पर मिलेगी. "operation-1661405972853-5e70a38d6f27f-79100d00-310671b4"
  • स्थिति: हमें स्थिति को "done": false से "done": true में बदलने तक इंतज़ार करना होगा

स्टेटस देखें

आगे बढ़ने से पहले, हमें यह जांच करनी होगी कि इनपुट एंडपॉइंट बन गया है और तैयार है.

नीचे दिए गए निर्देश में, <OPERATION> को उस कार्रवाई के आईडी से बदलें जो हमने अभी-अभी दिया है. इस उदाहरण में, यह "operation-1661405972853-5e70a38d6f27f-79100d00-310671b4" है.

निर्देश

export OPERATION_ID_1=<OPERATION>

निर्देश

curl -X GET \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
"https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/operations/$OPERATION_ID_1"

आउटपुट का उदाहरण

{
  "name": "projects/PROJECT_NUMBER/locations/us-west2/operations/operation-1661408816982-5e70ae25cea49-617844f0-8fdcb4a1",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": "2022-08-25T06:26:57.001530499Z",
    "endTime": "2022-08-25T06:26:57.043623522Z",
    "target": "projects/PROJECT_NUMBER/locations/us-west2/inputs/lab-live-input",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.Input",
    "name": "projects/PROJECT_ID/locations/us-west2/inputs/lab-live-input",
    "createTime": "2022-08-25T06:26:56.997623672Z",
    "updateTime": "2022-08-25T06:26:56.997623672Z",
    "type": "RTMP_PUSH",
    "uri": "rtmp://34.94.97.220/live/4b7846a1-4a67-44ed-bfd0-d98281b6464a",
    "tier": "HD"
  }
}

निर्देश को तब तक फिर से चलाएं, जब तक कि आपको "done:true" न दिखे कि इनपुट एंडपॉइंट बन गया है और वह तैयार है.

यूआरआई सेव करें

हम बाद में, लैब में पिछले आउटपुट से URI का इस्तेमाल करेंगे. फ़िलहाल, URI के लिए एनवायरमेंट वैरिएबल सेट किया जा सकता है.

निर्देश

export URI=<uri>

<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. बनाएं और लाइव स्ट्रीमिंग चैनल को कॉन्फ़िगर करना

आइए, पिछले सेक्शन में अभी बनाए गए इनपुट एंडपॉइंट से जुड़ा, लाइव स्ट्रीमिंग चैनल बनाते हैं. यहां दिए गए उदाहरण में, एचएलएस से लाइव स्ट्रीम करने वाला चैनल बनाया गया है. इस लाइव स्ट्रीम में एक ही हाई-डेफ़िनिशन (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 - CDN इन्फ़्रास्ट्रक्चर को डिप्लॉय करेंगे. हम इन संसाधनों का इस्तेमाल करेंगे:

  1. Edge कैश ऑरिजिन
  2. Edge कैश सेवा

1. Edge कैश ऑरिजिन बनाएं

एज कैश ऑरिजिन, कॉन्टेंट की जगह के बारे में बताता है. जैसे, Cloud Storage बकेट, तीसरे पक्ष के स्टोरेज की जगह या लोड बैलेंसर. सीडीएन के हिसाब से, ऑरिजिन (या ऑरिजिन सर्वर) वह जगह होती है जहां आपको उस कॉन्टेंट का सोर्स उपलब्ध कराना है जिसे हम उपलब्ध कराना चाहते हैं - जैसे कि सभी सीएसएस, JavaScript, एचटीएमएल, इमेज वगैरह. इस लैब के लिए, हम एक ऑरिजिन बनाएंगे, जो लैब की शुरुआत में बनाए गए Cloud Storage बकेट को मैप करता है. हम एज कैश ऑरिजिन को cme-origin कहेंगे. सीडीएन का ऑरिजिन, वह जगह है जहां सारा सोर्स कॉन्टेंट, किनारे वाले कैश सर्वर पर डिस्ट्रिब्यूट किए जाने से पहले सेव किया जाता है.

ऑरिजिन बनाने के लिए, हम gcloud edge-cache origins create कमांड का इस्तेमाल करेंगे. इस निर्देश को पूरा होने में कुछ मिनट लगेंगे.

निर्देश

gcloud edge-cache origins create cme-origin \
--origin-address="gs://live-streaming-storage-$LOGNAME"

आउटपुट का उदाहरण

Create request issued for: cme-origin
Waiting for operation [projects/my-project/locations/global/operations/operation-1612121774168-5ba3759af1919-
3fdcd7b1-99f59223] to complete...done
Created origin cme-origin

2. Edge कैश सेवा बनाएं

अब हमने Edge कैश ऑरिजिन सेट अप कर लिया है, तो हम खुद एज कैश सेवा बना सकते हैं.

cme-demo.yaml फ़ाइल बनाएं

Edge कैश सेवा का कॉन्फ़िगरेशन, 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 कैश सेवा के सभी कॉन्फ़िगरेशन डिफ़ॉल्ट पर ही छोड़ देंगे. ऊपर दी गई फ़ाइल में तीन फ़ील्ड वैल्यू हैं, जिन्हें उपयोगकर्ता अपडेट कर सकते हैं:

  • name: मीडिया सीडीएन इंस्टेंस का नाम - यहां: cme-demo
  • hosts: उन डोमेन नामों की सूची जिनका समाधान इस Media CDN सेवा के ज़रिए किया जाएगा - यहां: demo.cme.com. हम इस डेमो के दौरान इसका इस्तेमाल करेंगे. हम मीडिया सीडीएन इंस्टेंस के आईपी पते का इस्तेमाल करेंगे.
  • Origin: यह एज कैश ऑरिजिन है, जिसे हमने अभी-अभी पिछले चरण में बनाया है. इसे cme-origin पर सेट करें - यह मीडिया सीडीएन ऑरिजिन का नाम है.

YAML फ़ाइल में इस्तेमाल किए जा सकने वाले अलग-अलग वैरिएबल के बारे में ज़्यादा जानने के लिए, Edge कैश सेवा की कॉन्फ़िगरेशन गाइड देखें.

Edge कैश सेवा बनाएं

हम एज कैश ऑरिजिन cme-origin पर, एज कैश मेमोरी सेवा बनाएंगे, जिसका नाम cme-demo है. यह सेवा, होस्ट 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'

Edge कैश सर्विस के इंस्टेंस के ipv4Addresses को नोट करें और कॉपी करें - यहां 34.104.36.157. हम इसका इस्तेमाल cme-demo.yaml फ़ाइल को अपडेट करने के लिए करेंगे और बाद में, ट्रांसकोड किए गए वीडियो को स्ट्रीम करने में इस्तेमाल करेंगे.

Edge कैश सेवा को अपडेट करें

फ़िलहाल, एज कैश सर्विस के कॉन्फ़िगरेशन को अपडेट करना सही रहेगा, ताकि बाद में वीडियो को स्ट्रीम करने के लिए सेवा के आईपी का इस्तेमाल किया जा सके. Edge कैश सेवा की YAML फ़ाइल से, हम उन सभी होस्ट के नाम/आईपी की सूची बना सकते हैं जिनसे Edge कैश सेवा अनुरोध स्वीकार करेगी. इस समय हमने सिर्फ़ demo.cme.com को होस्ट के तौर पर बताया था. इस डोमेन के नाम का रिज़ॉल्यूशन देने के लिए, डीएनएस ज़ोन को क्लाउड पर कॉन्फ़िगर किया जाता है. हालांकि, 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

कमांड के आउटपुट की जांच करें और पुष्टि करें कि आईपी, होस्ट की सूची में दिखता है.

इस समय Edge कैश सेवा इंस्टेंस, "demo.cme.com" या आईपी पते से होस्ट के तौर पर अनुरोधों को स्वीकार करेगा.

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 टर्मिनल में, उस यूआरआई एनवायरमेंट वैरिएबल का इस्तेमाल करके यह कमांड चलाएं जिसे हमने "इनपुट एंडपॉइंट बनाएं और कॉन्फ़िगर करें" में बनाया था सेक्शन में जाएं.

निर्देश

ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \
  -acodec aac -vcodec h264 -f flv $URI

आपको FFmpeg टेस्ट लाइव सिग्नल भेजते हुए दिखना चाहिए. यह निर्देश, प्रॉम्प्ट नहीं दिखाएगा. सिग्नल तब तक जनरेट होगा, जब तक इसे रोका नहीं जाएगा. लैब के बचे हुए हिस्से के लिए, आपको एक नई Cloud Shell विंडो खोलनी होगी.

13. नया क्लाउड शेल खोलें

इस समय लैब को जारी रखने के लिए, आपको एक नई क्लाउड शेल विंडो खोलनी होगी, क्योंकि FFmpeg हमेशा के लिए तब तक चलता रहेगा, जब तक आप <CTRL+C> आदेश को रोकना है और इस तरह लाइव सिग्नल जनरेशन को बंद करना है..

"+" पर क्लिक करें साइन इन करें. इससे एक और Cloud Shell विंडो खुल जाएगी.

b3c7b0be6276c194.png

बची हुई लैब को नई क्लाउड शेल विंडो में चलाएं.

एनवायरमेंट वैरिएबल सेटअप करें

यह एक नया CloudShell है, इसलिए हमें एनवायरमेंट वैरिएबल को फिर से सेट करना होगा. हम एनवायरमेंट वैरिएबल को सेट करने के लिए, source कमांड का इस्तेमाल करेंगे.

निर्देश

source ~/env_variables.txt

पुष्टि करना कि वैरिएबल सेट हो गए हैं

आइए, इस बात की पुष्टि करते हैं कि सभी ज़रूरी एनवायरमेंट वैरिएबल सेट हो गए हैं. हमें आउटपुट में कुल 6 एनवायरमेंट वैरिएबल दिखते हैं.

निर्देश

env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME|PROJECT_NUMBER|LOCATION|INPUT_ID|CHANNEL_ID'

आउटपुट का उदाहरण

LOCATION=us-west2
DEVSHELL_PROJECT_ID=<YOUR_PROJECT_ID>
LOGNAME=<YOUR_USERNAME>
PROJECT_NUMBER=<YOUR_PROJECT_NUMBER>
INPUT_ID=lab-live-input
CHANNEL_ID=lab-live-channel

14. पुष्टि करना कि लाइव सिग्नल को ट्रांसकोड किया जा रहा है

इस चैनल के बारे में बताने के लिए, हम curl का इस्तेमाल करेंगे. हमें आउटपुट में देखना चाहिए कि StreamingState "AWAITING_INPUT" से बदलकर "STREAMING" हो गया है

निर्देश

curl -s -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels/$CHANNEL_ID" | grep "streamingState"

JSON फ़ाइल के आउटपुट रिस्पॉन्स में, आपको "streamingState": "STREAMING" दिखना चाहिए - इससे पता चलता है कि चैनल स्ट्रीम हो रहा है और लाइव सिग्नल को ट्रांसकोड किया जा रहा है.

उस बकेट के कॉन्टेंट की भी पुष्टि करें जहां हमें एक मेनिफ़ेस्ट फ़ाइल और कई TS वीडियो सेगमेंट दिखेंगे. लैब की शुरुआत में बनाए गए बकेट के कॉन्टेंट की सूची बनाने के लिए, Cloud Shell में यह कमांड चलाएं. इसका इस्तेमाल ट्रांसकोड किए गए लाइव सिग्नल मेनिफ़ेस्ट और TS वीडियो सेगमेंट के आउटपुट के लिए Live Streaming API में किया जाता है:

निर्देश

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 के ज़रिए बकेट में ट्रांसकोड किया जाता है
  • मीडिया सीडीएन: मीडिया सीडीएन के ऑरिजिन के तौर पर, लाइव स्ट्रीमिंग स्टोरेज बकेट के साथ कॉन्फ़िगर किया गया मीडिया सीडीएन.

अगले सेक्शन में, हम Edge कैश सेवा की पुष्टि करेंगे. इसके बाद, हम Media CDN सकेंगे और किसी आईपी पते का इस्तेमाल करके ट्रांसकोड किया गया वीडियो स्ट्रीम करेंगे.

15. पुष्टि करें कि Edge cache Service इंस्टेंस काम कर रहा हो

इस सेक्शन में, हम पुष्टि करेंगे कि Edge कैश सर्विस का इंस्टेंस उम्मीद के मुताबिक काम कर रहा है. ऐसा करने के लिए, हम एज कैश सर्विस सेवा के आईपी पते का इस्तेमाल करके, एज कैश सर्विस के इंस्टेंस से किसी फ़ाइल को ऐक्सेस करने की कोशिश करेंगे. जब किसी ऑब्जेक्ट को पहली बार ऐक्सेस किया जाता है, तो उसे अभी तक कैश मेमोरी में सेव नहीं किया जाता है. हमें कैश मेमोरी में मौजूद MISS की जानकारी देखनी चाहिए. पहले अनुरोध में, ऑब्जेक्ट को ऑरिजिन से पढ़ा जाता है और किनारे पर कैश मेमोरी में सेव किया जाता है. एक ही फ़ाइल को ऐक्सेस करने की नीचे दी गई सभी कोशिशों से कैश HIT दिखेगा, क्योंकि अब ऑब्जेक्ट को किनारे पर कैश मेमोरी में सेव किया जाता है. चलिए, इस व्यवहार की पुष्टि करते हैं:

Edge कैश ऑरिजिन में सेव की गई, ट्रांसकोड की गई वीडियो मेनिफ़ेस्ट फ़ाइल ऐक्सेस करने के लिए, Cloud Shell में यह curl कमांड चलाएं:

निर्देश

curl -svo /dev/null --resolve demo.cme.com:80:<Replace_With_Edge_Cache_IP> \
"http://demo.cme.com/main.m3u8"

उस रिज़ॉल्व पर ध्यान दें जहां हम Edge कैश सेवा के इंस्टेंस के आईपी पते का इस्तेमाल करके, इसके नाम का इस्तेमाल करते हैं. इसका इस्तेमाल करें कि demo.cme.com:<IP> का इस्तेमाल वहां करें जहां आईपी, उस Edge कैश सर्विस के इंस्टेंस का आईपी है जिसे हमने अभी-अभी बनाया है.

आउटपुट में 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 फ़ाइल के लिए, कई अनुरोध करेंगे. अगर सब कुछ सही तरीके से कॉन्फ़िगर किया गया है, तो मीडिया सीडीएन को अपनी कैश मेमोरी से कॉन्टेंट दिखाना शुरू कर देना चाहिए. नीचे दिए गए निर्देश से 10 कर्ल अनुरोध किए जाएंगे और सिर्फ़ x-cache-status हेडर प्रिंट किया जाएगा.

निर्देश

for i in {1..10};do curl -Is --resolve demo.cme.com:80:<Replace_With_Edge_Cache_IP> "http://demo.cme.com/main.m3u8" | grep x-cache-status;done

आउटपुट कैश मेमोरी hit और miss का मिला-जुला रूप होना चाहिए. अगर आपको आउटपुट में कैश मेमोरी हिट दिखती है, तो इसका मतलब है कि Media CDN उम्मीद के मुताबिक काम कर रहा है.

आउटपुट का उदाहरण

x-cache-status: den;miss
x-cache-status: den;hit
x-cache-status: den;hit
x-cache-status: den;hit
x-cache-status: den;hit
x-cache-status: den;hit
x-cache-status: den;hit
x-cache-status: den;hit
x-cache-status: den;hit
x-cache-status: den;hit

कैश मेमोरी में सेव किए गए हिट पर ध्यान दें, क्योंकि अब ऑब्जेक्ट को किनारे पर कैश मेमोरी में सेव किया जाता है. Cloud Medie Edge की सेवा उम्मीद के मुताबिक काम कर रही है.

16. वीएलसी की मदद से, ट्रांसकोड किया गया लाइव सिग्नल वीडियो स्ट्रीम करें

यह वह हिस्सा है जहां हम बिंदुओं को जोड़ते हैं और उन सभी चरणों को लिंक करते हैं जिन पर हम अब तक काम कर रहे हैं:

  • हमने live-streaming-storage-$LOGNAME नाम का एक बकेट बनाया है. इसे लाइव स्ट्रीमिंग एपीआई की मदद से, एचएलएस कॉन्टेंट में ट्रांसकोड किए गए लाइव सिग्नल से मिलता है.
  • हमने Live Streaming API सेट अप किया.
  • हमने FFmpeg के साथ RTMP लाइव सिग्नल की शुरुआत की थी जो Live Streaming API इनपुट/चैनल को फ़ीड करता था.
  • हमने पुष्टि की है कि चैनल को लाइव सिग्नल भेजा गया था. साथ ही, हमने यह पुष्टि की है कि चैनल streaming मोड में है.
  • हमने पुष्टि की है कि इसके बाद मिली ट्रांसकोड की गई फ़ाइलें (मेनिफ़ेस्ट + टीएस सेगमेंट) जनरेट की गई हैं और बकेट live-streaming-storage-$LOGNAME में सेव की गई हैं.
  • cme-origin नाम का एज कैश ऑरिजिन, जिसे ऑरिजिन के तौर पर GCS बकेट live-streaming-storage-$LOGNAME के साथ सेट अप किया गया है.
  • cme-demo नाम का एज कैश इंस्टेंस, cme-origin को ऑरिजिन के तौर पर सेट अप किया गया था.
  • हमने Edge कैश सेवा के इंस्टेंस के काम करने के तरीके (कैश मिस, कैश हिट) की पुष्टि कर ली है.

हम उस पड़ाव पर हैं जहां मीडिया सीडीएन कैश के ज़रिए ट्रांसकोड किए गए लाइव सिग्नल को स्ट्रीम करने के लिए, वीडियो प्लेयर का इस्तेमाल किया जा सकता है. ऐसा करने के लिए, हम VLC प्लेयर का इस्तेमाल करेंगे. VLC प्लेयर, एक ओपन सोर्स क्रॉस-प्लैटफ़ॉर्म मल्टीमीडिया प्लेयर और फ़्रेमवर्क है. यह बिना किसी शुल्क के उपलब्ध है और इसमें ज़्यादातर मल्टीमीडिया फ़ाइलें चलती हैं. यह DASH और HLS जैसे अडैप्टिव मीडिया फ़ॉर्मैट पर वीडियो बनाता है. यह अडैप्टिव स्ट्रीमिंग के सिद्धांत का इस्तेमाल करता है - आपके इंटरनेट कनेक्शन की क्वालिटी और उपलब्ध बैंडविथ के हिसाब से, प्लेयर चलाए गए वीडियो की क्वालिटी के हिसाब से खुद को ढाल लेता है. ट्रांसकोडिंग के काम में हमने अभी डिफ़ॉल्ट प्रीसेट का इस्तेमाल किया और "सिर्फ़" दो क्वालिटी जनरेट की: एसडी और एचडी. जैसे ही हम प्लेयर में वीडियो चलाना शुरू करेंगे, वैसे ही वह एसडी फ़ॉर्मैट में चलने लगेगा. अगर आपका इंटरनेट कनेक्शन अच्छा है, तो तुरंत एचडी फ़ॉर्मैट में स्विच हो जाएगा.

हम एचएलएस (बड़े पैमाने पर काम करने वाले Apple वीडियो फ़ॉर्मैट) में ट्रांसकोड किया गया लाइव सिग्नल स्ट्रीम करेंगे. संबंधित फ़ाइल को main.m3u8 कहा जाता है - जो एचएलएस मेनिफ़ेस्ट है. मेनिफ़ेस्ट, TS वीडियो सेगमेंट के बारे में बताता है.

VLC प्लेयर का इस्तेमाल करने के लिए, https://www.videolan.org/vlc/ पर जाएं और अपने लैपटॉप ऑपरेटिंग सिस्टम के लिए प्लेयर का वर्शन डाउनलोड करें - VLC, Windows, MacOSX, Linux, Android, और iOS के लिए उपलब्ध है.

2a2d19abe728d222.png

अपने लैपटॉप पर Player इंस्टॉल करें और उसे लॉन्च करें. हम अगले कुछ चरणों के लिए प्लेयर के MacOSX वर्शन का उपयोग करेंगे.

वीडियो चलाने के लिए, "फ़ाइल" पर जाएं / "ओपन नेटवर्क":

f85565301f7c68dc.png

इसे इससे सेट अप करें:

  • यूआरएल: http://&lt;Replace_With_Edge_Cache_IP&gt;/main.m3u8. यह उस वीडियो का यूआरएल है जिसे हम स्ट्रीम करना चाहते हैं. सूचना:
  • मीडिया सीडीएन इंस्टेंस का आईपी: 34.105.35.246. उस क्लाउड मीडिया सेवा के आईपी से बदलें जिसे आपने डिप्लॉय किया है.
  • मेनिफ़ेस्ट वीडियो फ़ाइल का पाथ: "/". ट्रांसकोड की गई लाइव सिग्नल फ़ाइलों को सेव करने के लिए, हमने live-streaming-storage-$LOGNAME बकेट में इसी पाथ का इस्तेमाल किया था. पाथ यहां का रूट पाथ है: "/".
  • मेनिफ़ेस्ट वीडियो फ़ाइल का नाम: HLS मेनिफ़ेस्ट फ़ाइल, main.m3u8.

और "खोलें" पर क्लिक करें. इसके बाद, आपको ट्रांसकोड किया गया लाइव वीडियो दिखना शुरू हो जाएगा. यह वीडियो नीचे दिए गए स्क्रीनशॉट की तरह दिखेगा. स्क्रीन पर दिख रहा काउंटर एक-एक करके चलेगा. साथ ही, आपको लगातार बीप की आवाज़ सुनाई देगी.

यह एक बुनियादी आरटीएमपी टेस्ट लाइव सिग्नल है, जिसे FFmpeg से जनरेट किया जाता है. इसे Live Streaming API से HLS में ट्रांसकोड किया जाता है और इसे Media CDN कैश के ज़रिए दिखाया जाता है:

28fc359b49d44ec2.png

इसके अलावा, किसी भी अन्य HLS और MPEG डैश प्लेयर का इस्तेमाल किया जा सकता है. यहां कुछ ऐसे तरीके बताए गए हैं जिन पर गौर किया जा सकता है:

  • Quicktime Player - Mac पर डिफ़ॉल्ट रूप से इंस्टॉल होता है. इसे ठीक करने के लिए: http://34.104.36.157/main.m3u8 पर नेटवर्क कनेक्शन खोलें. आईपी पते को Edge कैश सर्विस के किसी इंस्टेंस से बदलें.

17. मीडिया सीडीएन मॉनिटर करना

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

क्लाउड मॉनिटरिंग के लिए डैशबोर्ड बनाएं:

gcloud monitoring dashboards create --config-from-file media-edge-20210208-dashboard.yaml

इसे सेट अप होने में कुछ मिनट लग सकते हैं. Google Cloud Console पर जाएं और तीन बार > पर क्लिक करें कार्रवाइयां > निगरानी की जा रही है > डैशबोर्ड. आपको "मीडिया एज मेट्रिक्स" नाम का एक डैशबोर्ड दिखेगा. उस पर क्लिक करें और आपको मेट्रिक दिखेंगी:

d0821d84a88a928d.png

18. लैब एनवायरमेंट को साफ़ करें

लैब पूरा करने पर बधाई. इस सेक्शन में, हम पूरी लैब में बनाए गए सभी संसाधनों को मिटा देंगे.

FFmpeg सिग्नल बंद करें:

Cloud Shell टर्मिनल पर, <CTRL+C> को हिट करें, जिसमें FFmpeg चल रहा है.

लाइव स्ट्रीमिंग चैनल को बंद करने के लिए:

निर्देश

curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels/$CHANNEL_ID:stop"

लाइव स्ट्रीमिंग चैनल को मिटाने के लिए:

निर्देश

curl -X DELETE -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels/$CHANNEL_ID"

लाइव स्ट्रीमिंग इनपुट एंडपॉइंट को मिटाना:

निर्देश

curl -X DELETE \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
"https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/inputs/$INPUT_ID"

GCS बकेट मिटाएं:

निर्देश

gsutil rm -r gs://live-streaming-storage-$LOGNAME

एज कैश सर्विस इंस्टेंस मिटाएं:

निर्देश

gcloud edge-cache services delete cme-demo

"Y" डालकर मिटाने की पुष्टि करें पूछे जाने पर

एज कैश ऑरिजिन को मिटाएं:

निर्देश

gcloud edge-cache origins delete cme-origin

"Y" डालकर मिटाने की पुष्टि करें पूछे जाने पर

कस्टम डैशबोर्ड मिटाना

निर्देश

gcloud monitoring dashboards delete $(gcloud monitoring dashboards list --filter="displayName:Media Edge Metrics" --format="value(name)")