यदि आप Amazon Interactive Video Service (Amazon IVS) के साथ उपयोगकर्ता-जनित सामग्री (UGC) प्लेटफ़ॉर्म बनाने की योजना बना रहे हैं, तो आप अपने उपयोगकर्ता की लाइव स्ट्रीम के स्वास्थ्य की निगरानी के लिए किसी प्रकार के डैशबोर्ड को एकीकृत करना चाहेंगे। हमेशा की तरह, धारा स्वास्थ्य की निगरानी का एक बड़ा अवलोकन प्रदान करता है। प्रलेखन इस पोस्ट में हम थोड़ा और आगे बढ़ेंगे और कुछ उदाहरण दिखाएंगे कि कैसे स्ट्रीम सेशन को पुनः प्राप्त करें, और Amazon CloudWatch से लाइव स्ट्रीम के लिए हेल्थ मेट्रिक्स को पुनः प्राप्त करें। एक अतिरिक्त बोनस के रूप में, हम कुछ उपयोगी चार्ट बनाने पर भी ध्यान देंगे जिन्हें रीयलटाइम स्वास्थ्य निगरानी के लिए आपके यूजीसी डैशबोर्ड में जोड़ा जा सकता है। Amazon IVS स्ट्रीम हेल्थ मेट्रिक्स Amazon CloudWatch में संग्रहीत हैं। JavaScript v3 के लिए AWS SDK के साथ इन मेट्रिक्स को पुनः प्राप्त करने के लिए, हम Amazon CloudWatch क्लाइंट ( ) से विधि उपयोग कर सकते हैं। @aws-sdk/client-cloudwatch GetMetricDataCommand डॉक्स का यह विधि उम्मीद करती है कि कुछ गुण मेट्रिक्स को एक विशिष्ट समय अवधि और अमेज़ॅन आईवीएस चैनल में फ़िल्टर करेंगे जैसा कि हम नीचे देखेंगे। यह पोस्ट Amazon CloudWatch SDK के साथ स्ट्रीम हेल्थ मेट्रिक्स को पुनः प्राप्त करने पर ध्यान केंद्रित करेगी, लेकिन महत्वपूर्ण स्ट्रीम हेल्थ मेट्रिक्स को Amazon EventBridge के माध्यम से भी देखा जा सकता है ताकि जब कोई स्ट्रीम अस्वस्थ हो जाए या सेवा सीमा का उल्लंघन हो जाए तो आप कोई भी आवश्यक कार्रवाई कर सकें। अधिक जानकारी के लिए देखें। नोट: दस्तावेज़ अमेज़ॅन आईवीएस स्ट्रीम सत्र पुनर्प्राप्त करना चूँकि हमें हेल्थ मेट्रिक्स को पुनः प्राप्त करने के लिए और की आवश्यकता होती है, यह अमेज़ॅन आईवीएस क्लाइंट ( ) के माध्यम से हाल के स्ट्रीम सत्रों की सूची को पुनः प्राप्त करने के लिए समझ में आता है। ऐसा करने के लिए, हम ( ) का उपयोग कर सकते हैं और उस चैनल के लिए पास कर सकते हैं जिसमें हम रुचि रखते हैं। StartTime EndTime @aws-sdk/client-ivs ListStreamSessionsCommand डॉक्स ARN import { IvsClient, ListStreamSessionsCommand } from "@aws-sdk/client-ivs"; const ivsClient = new IvsClient(); const listStreamSessionsInput = { channelArn: process.env.DEMO_CHANNEL_ARN, maxResults: 3, // default=100 }; const listStreamSessionsRequest = new ListStreamSessionsCommand(listStreamSessionsInput); const listStreamSessionsResponse = await ivsClient.send(listStreamSessionsRequest); console.log(listStreamSessionsResponse) की प्रतिक्रिया एक वस्तु लौटाती है। उस ऑब्जेक्ट में कुंजी में सबसे हालिया सत्र द्वारा क्रमबद्ध स्ट्रीम सत्रों की एक सरणी होती है। के अभाव में सक्रिय सत्रों का संकेत मिलता है। ListStreamSessionsCommand streamSessions endTime { "$metadata": { "httpStatusCode": 200, "requestId": "[redacted]", "cfId": "[redacted]", "attempts": 1, "totalRetryDelay": 0 }, "nextToken": "AQI...[redacted]...A==", "streamSessions": [ { "endTime": undefined, "hasErrorEvent": false, "startTime": "2023-01-20T14:30:11.000Z", "streamId": "st-[redacted]" }, { "endTime": "2023-01-19T16:12:37.000Z", "hasErrorEvent": false, "startTime": "2023-01-19T16:12:29.000Z", "streamId": "st-[redacted]" }, { "endTime": "2023-01-19T16:12:25.000Z", "hasErrorEvent": false, "startTime": "2023-01-19T16:12:22.000Z", "streamId": "st-[redacted]" } ] } एकल स्ट्रीम सत्र पुनर्प्राप्त करना इस बिंदु पर, हम अपने स्ट्रीम मेट्रिक्स को पुनः प्राप्त करने के लिए इन टाइमस्टैम्प का उपयोग कर सकते हैं। लेकिन, ऑडियो और वीडियो अंतर्ग्रहण कॉन्फ़िगरेशन जैसे कुछ और विवरण प्राप्त करना उपयोगी हो सकता है। इस जानकारी को पुनः प्राप्त करने के लिए, हम ( ) का उपयोग कर सकते हैं। यह विधि और एक की अपेक्षा करती है जिसे हमने उपरोक्त परिणाम में पहले ही प्राप्त कर लिया है। GetStreamSessionCommand डॉक्स ARN streamId import { IvsClient, GetStreamSessionCommand } from "@aws-sdk/client-ivs"; import util from "node:util"; const ivsClient = new IvsClient(); const getStreamSessionInput = { channelArn: process.env.DEMO_CHANNEL_ARN, streamId: 'st-[redacted]' }; const getStreamSessionRequest = new GetStreamSessionCommand(getStreamSessionInput); const getStreamSessionResponse = await ivsClient.send(getStreamSessionRequest); console.log( util.inspect(getStreamSessionResponse, false, null, true) ); विधि सत्र के बारे में जानकारी लौटाती है (इस मामले में, एक सक्रिय लाइव स्ट्रीम)। ध्यान दें कि कोडेक, बिटरेट, फ़्रैमरेट, आदि जैसे कुछ उपयोगी आइटम शामिल हैं। ऑब्जेक्ट में वे सभी ईवेंट शामिल हैं जो इस विशेष स्ट्रीम के लिए ट्रिगर किए गए हैं। GetStreamSessionCommand ingestConfiguration truncatedEvents { "$metadata": { "httpStatusCode": 200, "requestId": "[redacted]", "cfId": "[redacted]", "attempts": 1, "totalRetryDelay": 0 }, "streamSession": { "channel": { "arn": "[redacted]", "authorized": false, "ingestEndpoint": "[redacted]", "latencyMode": "LOW", "name": "demo-channel", "playbackUrl": "[redacted]", "recordingConfigurationArn": "[redacted]", "type": "STANDARD" }, "ingestConfiguration": { "audio": { "channels": 2, "codec": "mp4a.40.2", "sampleRate": 48000, "targetBitrate": 128000 }, "video": { "avcLevel": "3.1", "avcProfile": "Baseline", "codec": "avc1.42C01F", "encoder": "", "targetBitrate": 8500000, "targetFramerate": 30, "videoHeight": 1080, "videoWidth": 1920 } }, "recordingConfiguration": { "arn": "[redacted]", "destinationConfiguration": { "s3": { "bucketName": "[redacted]" } }, "state": "ACTIVE" }, "startTime": "2023-01-20T14:30:11.000Z", "streamId": "st-[redacted]", "truncatedEvents": [ { "eventTime": "2023-01-20T14:30:19.000Z", "name": "Recording Start", "type": "IVS Recording State Change" }, { "eventTime": "2023-01-20T14:30:18.000Z", "name": "Stream Start", "type": "IVS Stream State Change" }, { "eventTime": "2023-01-20T14:30:11.000Z", "name": "Session Created", "type": "IVS Stream State Change" } ] } } AWS कंसोल के माध्यम से स्ट्रीम हेल्थ मेट्रिक्स देखना यदि आप स्ट्रीम स्वास्थ्य मीट्रिक डेटा को अपने एप्लिकेशन में एकीकृत करने की योजना बना रहे हैं, तो आप AWS SDK में से किसी एक का उपयोग कर रहे होंगे। लेकिन, यदि आप स्वास्थ्य मीट्रिक डेटा को कम बार-बार देखना चाहते हैं, तो आप उन्हें AWS कंसोल के माध्यम से देख सकते हैं। Amazon IVS से संबंधित स्वास्थ्य मेट्रिक्स देखने के लिए, का चयन करें, फिर Amazon CloudWatch कंसोल के माध्यम से चुनें। सभी मेट्रिक्स IVS हम आयाम चुनकर मीट्रिक डेटा ब्राउज़ कर सकते हैं। उदाहरण के लिए, चैनल द्वारा मीट्रिक देखने के लिए, चुनें, और वांछित समय अवधि, चैनल और मीट्रिक चुनें। चैनल द्वारा एसडीके के माध्यम से स्ट्रीम हेल्थ मेट्रिक्स को पुनः प्राप्त करना हम स्ट्रीम के प्रारंभ और समाप्ति समय के आधार पर किसी चैनल के स्वास्थ्य मीट्रिक डेटा को वापस लेने के लिए Amazon CloudWatch SDK का उपयोग करने के लिए तैयार हैं। एक ऑब्जेक्ट ( ) की अपेक्षा करता है। GetMetricDataCommand GetMetricDataCommandInput डॉक्स जैसा कि ऊपर उल्लेख किया गया है, इस ऑब्जेक्ट में और गुण हैं, साथ ही एक संपत्ति है जिसमें स्वास्थ्य मेट्रिक्स के आधार पर प्रश्नों की एक सरणी होनी चाहिए जिसे हम पुनर्प्राप्त करना चाहते हैं। Amazon IVS चैनल हेल्थ से संबंधित चार गुण हैं जिनमें हम रुचि रखते हैं: , , , और । हम के रूप में उपयोग करके और के बाद चैनल ARN के हिस्से को पकड़कर एक विशिष्ट चैनल पर फ़िल्टर करके प्रत्येक मीट्रिक के लिए एक सरणी का निर्माण करेंगे। StartTime EndTime MetricDataQueries IngestAudioBitrate IngestVideoBitrate IngestFramerate KeyframeInterval AWS/IVS Namespace / import { CloudWatchClient, GetMetricDataCommand } from "@aws-sdk/client-cloudwatch"; const cloudWatchClient = new CloudWatchClient(); const getMetrics = async (arn, startTime, endTime) => { const streamHealthMetrics = [ "IngestAudioBitrate", "IngestVideoBitrate", "IngestFramerate", "KeyframeInterval" ]; const metricDataQueries = streamHealthMetrics.map((metric) => { return { Id: metric.toLowerCase(), MetricStat: { Metric: { MetricName: metric, Namespace: "AWS/IVS", Dimensions: [{ Name: "Channel", Value: arn.split("/")[1] }] }, Period: 5, Stat: "Average", } } }); const getMetricDataInput = { StartTime: startTime, EndTime: endTime, MetricDataQueries: metricDataQueries, MaxDatapoints: 100 }; const getMetricDataRequest = new GetMetricDataCommand(getMetricDataInput); const getMetricDataResponse = await cloudWatchClient.send(getMetricDataRequest); return getMetricDataResponse; }; // get metrics for a session const metrics = await getMetrics( process.env.DEMO_CHANNEL_ARN, new Date('2023-01-20T14:30:11.000Z'), new Date('2023-01-20T14:49:15.000Z') ); कॉल करने का परिणाम निम्न आउटपुट जैसा दिखाई देगा: GetMetricDataCommand { "$metadata": { "httpStatusCode": 200, "requestId": "[redacted]", "attempts": 1, "totalRetryDelay": 0 }, "MetricDataResults": [ { "Id": "ingestaudiobitrate", "Label": "IngestAudioBitrate", "Timestamps": [ "2023-01-20T14:49:10.000Z" ], "Values": [ 31049.333057821852 ], "StatusCode": "PartialData" }, { "Id": "ingestvideobitrate", "Label": "IngestVideoBitrate", "Timestamps": [ "2023-01-20T14:49:10.000Z" ], "Values": [ 3497988.4859657455 ], "StatusCode": "PartialData" }, { "Id": "ingestframerate", "Label": "IngestFramerate", "Timestamps": [ "2023-01-20T14:49:10.000Z" ], "Values": [ 29.143738984724312 ], "StatusCode": "PartialData" }, { "Id": "keyframeinterval", "Label": "KeyframeInterval", "Timestamps": [ "2023-01-20T14:49:10.000Z" ], "Values": [ 2.007629037 ], "StatusCode": "PartialData" } ], "NextToken": "[redacted]", "Messages": [] } यह ध्यान रखना महत्वपूर्ण है कि Amazon CloudWatch मेट्रिक्स समय के साथ लुढ़क जाते हैं, इसलिए समय के साथ दानेदार रिज़ॉल्यूशन कम हो जाता है। 1 सेकंड का मेट्रिक 3 घंटे के लिए उपलब्ध है. 60 सेकंड के मेट्रिक्स 15 दिनों के लिए उपलब्ध हैं। 5-मिनट के मेट्रिक्स 63 दिनों के लिए उपलब्ध हैं। 1-घंटे की मीट्रिक 455 दिनों (15 महीने) के लिए उपलब्ध हैं। यदि हम एक ही क्वेरी को एक बड़ी समय सीमा के साथ चलाते थे (जैसा कि ऊपर बताए गए डेटा की उपलब्धता के आधार पर), हम डेटा को एक ही मीट्रिक के आधार पर फ़िल्टर और समूहित कर सकते हैं और उस परिणाम का उपयोग मूल्यों के एक अच्छे चार्ट को प्रस्तुत करने के लिए कर सकते हैं। . const videoBitrateMetrics = metrics .MetricDataResults .find((metric) => metric.Id === 'ingestvideobitrate'); const bitrateData = []; videoBitrateMetrics.Timestamps .sort((a, b) => new Date(a) > new Date(b) ? 1 : -1) .forEach((t, i) => { bitrateData.push({ timestamp: t, bitrate: videoBitrateMetrics.Values[i] / 1000, }) }); console.log(JSON.stringify(bitrateData)); यह ऑब्जेक्ट्स की एक सरणी उत्पन्न करता है जो निम्न जैसा दिखता है: [ { "timestamp": "2023-01-20T14:47:05.000Z", "bitrate": 3497.9884859657454 } ] हम अपने यूजीसी डैशबोर्ड्स के लिए कुछ अच्छे विज़ुअलाइज़ेशन बनाने के लिए इस फ़िल्टर किए गए डेटा का उपयोग कर सकते हैं। कुछ त्वरित उदाहरण: अंतर्ग्रहण वीडियो बिटरेट ऑडियो बिटरेट निगलना इंजेस्ट फ्रैमरेट: मुख्य-फ़्रेम अंतराल: Amazon CloudWatch SDK के साथ चार्ट छवियां बनाना Amazon CloudWatch SDK के माध्यम से चार्ट को सीधे जनरेट करना एक और सुपर कूल विकल्प है। विवरण के लिए देखें। यहां Amazon CloudWatch SDK के ज़रिए मेट्रिक के लिए चार्ट जनरेट करने का एक उदाहरण दिया गया है. दस्तावेज़ IngestFramerate const getMetricImage = async (arn, startDate, endDate) => { const cloudWatchClient = new CloudWatchClient(); const getMetricWidgetImageInput = { MetricWidget: JSON.stringify({ metrics: [ [ "AWS/IVS", "IngestFramerate", "Channel", arn.split("/")[1] ] ], start: startDate, end: endDate, period: 5 }) }; const getMetricWidgetImageRequest = new GetMetricWidgetImageCommand(getMetricWidgetImageInput); const getMetricWidgetImageResponse = await cloudWatchClient.send(getMetricWidgetImageRequest); return getMetricWidgetImageResponse; }; const metricImage = await getMetricImage( process.env.DEMO_CHANNEL_ARN, new Date('2023-01-20T14:30:11.000Z'), new Date('2023-01-20T14:49:15.000Z') ); को कॉल एक JSON ऑब्जेक्ट देता है जो निम्न जैसा दिखता है: GetMetricWidgetImageCommand { '$metadata': { httpStatusCode: 200, requestId: '[redacted]', extendedRequestId: undefined, cfId: undefined, attempts: 1, totalRetryDelay: 0 }, MetricWidgetImage: Uint8Array(36660) [ 137, 80, 78, ... 36560 more items ] } हम को बेस 64 स्ट्रिंग में बदल सकते हैं: Uint8Array const buffer = Buffer.from(metricImage.MetricWidgetImage); console.log(buffer.toString('base64')); जो एक बेस 64 स्ट्रिंग लौटाता है: iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPA... इसका उपयोग छवि प्रस्तुत करने के लिए किया जा सकता है: हम में अतिरिक्त मीट्रिक पास करके एक छवि में कई मीट्रिक जोड़ सकते हैं। GetMetricWidgetImageCommand सारांश इस पोस्ट में, हमने देखा कि Amazon IVS लाइव स्ट्रीम के लिए हेल्थ मेट्रिक्स कैसे प्राप्त करें और उन्हें चार्ट के रूप में प्रस्तुत करें। भविष्य की पोस्ट के लिए बने रहें जहां हम लाइव स्ट्रीम दर्शकों से संबंधित Amazon CloudWatch के माध्यम से उपलब्ध कुछ अन्य मेट्रिक्स में खुदाई करेंगे।