Dans mon dernier article, nous avons examiné la surveillance des métriques de santé de la diffusion en direct d'Amazon Interactive Video Service (Amazon IVS) via le SDK Amazon CloudWatch. La surveillance de la santé est un sujet extrêmement important qui est crucial pour maintenir la performance de vos applications de diffusion en direct. Un autre élément crucial est l'analyse des spectateurs. Dans cet article, nous examinerons quelques façons de donner un aperçu des spectateurs de flux.
Une grande partie de ce message ressemblera à mon dernier message. En effet, les données des utilisateurs sont également stockées dans CloudWatch et peuvent être récupérées via le SDK. Il existe une méthode supplémentaire, comme nous le verrons ci-dessous, pour obtenir le nombre de téléspectateurs actuels d'un flux en direct, ce qui est un moyen pratique d'obtenir un nombre pouvant être affiché sur votre frontal.
Remarque : bien que cet article se concentre sur les téléspectateurs des chaînes de diffusion en direct, vous pouvez également récupérer des métriques sur vos salles de chat Amazon IVS comme
ConcurrentChatConnections
et les messagesDelivered
. Nous ne couvrirons pas cela dans cet article, mais vous pouvez consulter la documentation pour en savoir plus.
Si vous cherchez simplement à jeter un coup d'œil sur les données de l'utilisateur sans récupérer les données brutes, vous pouvez afficher vos ConcurrentViews
via la console CloudWatch. Tout d'abord, sélectionnez All metrics , puis choisissez IVS .
Ensuite, sélectionnez Par chaîne .
Cochez ensuite la case dans la ligne qui contient ConcurrentViews
pour l'un de vos canaux Amazon IVS.
Une autre façon de trouver des vues simultanées pour une session de flux consiste à utiliser la console Amazon IVS. Sélectionnez votre chaîne, puis choisissez un ID de flux sur la page des détails de la chaîne.
Les détails d'une session de flux contiendront plusieurs graphiques, dont l'un contient les vues simultanées de la session.
Pour intégrer ces données dans votre propre application, vous pouvez récupérer les données via le SDK CloudWatch. Comme pour les métriques de santé, vous aurez besoin d'un ARN
du canal, d'un StartTime
et d'un EndTime
pour récupérer ConcurrentViews
.
Au lieu de choisir au hasard les heures de début et de fin, il est probablement logique d'obtenir dynamiquement ces heures en choisissant les heures de début et de fin à partir d'une session de diffusion en direct. Vous pouvez récupérer une liste des sessions de streaming via le SDK Amazon IVS (comme nous l'avons vu dans le post précédent ).
Rappel : Vous aurez toujours besoin d'un
EndTime
, même pour les flux actuellement en direct. Pour les flux en direct, vous pouvez toujours utiliser l'heure actuelle commeEndTime
lorsque vous utilisez le SDK pour récupérer des métriques.
Pour récupérer ces données via le kit AWS SDK pour JavaScript (v3), vous devrez installer le package @aws-sdk/client-cloudwatch
et créer une instance du client ( new CloudWatchClient()
). Une fois l'instance client créée, définissez quelques variables pour les entrées requises.
const startTime = new Date('2023-02-10T14:00:00.000Z'); const endTime = new Date('2023-02-10T14:30:00.000Z'); const arn = process.env.DEMO_CHANNEL_ARN;
Ensuite, créez un objet d'entrée. L'objet d'entrée contiendra StartTime
, EndTime
et un tableau de MetricDataQueries
. Le tableau de requêtes contiendra un objet unique qui spécifie le MetricName
( ConcurrentViews
), l' Namespace
( AWS/IVS
) et les Dimensions
à filtrer (nom du canal, dans ce cas).
const getMetricDataInput = { StartTime: startTime, EndTime: endTime, MetricDataQueries: [{ Id: "concurrentviews", MetricStat: { Metric: { MetricName: "ConcurrentViews", Namespace: "AWS/IVS", Dimensions: [{ Name: "Channel", Value: arn.split("/")[1] }] }, Period: 5, Stat: "Average", } }], MaxDatapoints: 100 };
Envoyez maintenant la demande et enregistrez le résultat.
const getMetricDataRequest = new GetMetricDataCommand(getMetricDataInput); let metrics = await cloudWatchClient.send(getMetricDataRequest); console.log(metrics);
Ce qui produit une sortie qui ressemble à ce qui suit (métadonnées SDK superflues supprimées par souci de brièveté) :
{ "MetricDataResults": [ { "Id": "concurrentviews", "Label": "ConcurrentViews", "Timestamps": [ "2023-02-10T14:29:00.000Z", "2023-02-10T14:28:00.000Z", "2023-02-10T14:27:00.000Z", "2023-02-10T14:26:00.000Z", "2023-02-10T14:22:00.000Z" ], "Values": [ 3, 3, 3, 3, 10 ], "StatusCode": "PartialData" } ] }
Vous pouvez filtrer, trier et sortir ces données pour produire un format utile pour générer des graphiques.
const viewMetrics = metrics .MetricDataResults .find((metric) => metric.Id === 'concurrentviews'); const viewValues = viewMetrics.Values.reverse(); const viewData = []; viewMetrics .Timestamps .reverse() .forEach((t, i) => { viewData.push({ timestamp: t, concurrentviews: viewValues[i], }) }); console.log(JSON.stringify(viewData));
Ce qui produit un tableau d'objets.
[ { "timestamp": "2023-02-10T14:22:00.000Z", "concurrentviews": "10.00" }, { "timestamp": "2023-02-10T14:26:00.000Z", "concurrentviews": "3.00" }, ... ]
Vous pouvez utiliser ces données avec notre bibliothèque de graphiques préférée (ou un générateur de graphiques en ligne générique comme je l'ai fait).
Dans le dernier article, nous avons envisagé de générer l'image directement via le SDK CloudWatch. Cette approche s'applique également à vos métriques de vue.
const startTime = new Date('2023-02-10T14:00:00.000Z'); const endTime = new Date('2023-02-10T14:25:00.000Z'); const arn = process.env.DEMO_CHANNEL_ARN; const cloudWatchClient = new CloudWatchClient(); const getMetricWidgetImageInput = { MetricWidget: JSON.stringify({ metrics: [ [ "AWS/IVS", "ConcurrentViews", "Channel", arn.split("/")[1] ] ], start: startTime, end: endTime, period: 5, stat: "Average" }) }; const getMetricWidgetImageRequest = new GetMetricWidgetImageCommand(getMetricWidgetImageInput); const metricImage = await cloudWatchClient.send(getMetricWidgetImageRequest);
Qui renvoie un objet avec la clé MetricWidgetImage
qui contient un tampon de tableau ( Uint8Array
) contenant l'image du graphique.
{ "MetricWidgetImage": { "0": 137, "1": 80, "2": 78, ... } }
Pour convertir ce tampon de tableau en une chaîne base64 :
const buffer = Buffer.from(metricImage.MetricWidgetImage); console.log(buffer.toString('base64'));
Ce qui nous donne :
iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAACXBIWXMA...
Cela peut être converti en une image qui ressemble à ceci :
Comme mentionné ci-dessus, vous pouvez facilement obtenir un décompte des sessions d'affichage en cours pour le flux en direct actif sur un canal via le module client Amazon IVS dans le kit SDK AWS. Pour cela, utilisez la méthode GetStream
.
import { GetStreamCommand, IvsClient } from "@aws-sdk/client-ivs"; const client = new IvsClient(); const getStreamCommandInput = { channelArn: process.env.DEMO_CHANNEL_ARN, }; const getStreamRequest = new GetStreamCommand(getStreamCommandInput); const getStreamResponse = await client.send(getStreamRequest); console.log(getStreamResponse);
Ce qui produit une sortie comme celle-ci.
{ "stream": { "channelArn": "arn:aws:ivs:us-east-1:[redacted]:channel/[redacted]", "health": "HEALTHY", "playbackUrl": "https://[redacted].us-east-1.playback.live-video.net/api/video/v1/us-east-1.[redacted].channel.x4aGUUxIp5Vw.m3u8", "startTime": "2023-02-10T15:46:36.000Z", "state": "LIVE", "streamId": "st-[redacted]", "viewerCount": 5 } }
Notez la propriété viewerCount
qui est un nombre en direct de sessions de visionnage pour le flux en direct actuel.
Dans cet article, nous avons appris à récupérer des données de vue pour nos flux en direct Amazon IVS via les SDK CloudWatch et Amazon IVS. Pour en savoir plus, consultez la documentation .
Couronne