paint-brush
Cómo monitorear Live Stream Viewer Analytics con Amazon IVSpor@amazonivs
452 lecturas
452 lecturas

Cómo monitorear Live Stream Viewer Analytics con Amazon IVS

Demasiado Largo; Para Leer

En esta publicación, veremos algunas formas de proporcionar información sobre los espectadores de la transmisión. Los datos del espectador también se almacenan en CloudWatch y se pueden recuperar a través del SDK. Hay un método adicional, como veremos, para obtener un recuento de los espectadores actuales de una transmisión en vivo.
featured image - Cómo monitorear Live Stream Viewer Analytics con Amazon IVS
Amazon Interactive Video Service (IVS)  HackerNoon profile picture
0-item
1-item

En mi última publicación, analizamos el monitoreo de las métricas de estado de la transmisión en vivo de Amazon Interactive Video Service (Amazon IVS) a través del SDK de Amazon CloudWatch. El monitoreo de la salud es un tema muy importante que es crucial para mantener el rendimiento de sus aplicaciones de transmisión en vivo. Otro elemento crucial es el análisis del espectador. En esta publicación, veremos algunas formas de proporcionar información sobre los espectadores de la transmisión.


Gran parte de esta publicación se verá similar a mi última publicación. Esto se debe a que los datos de los espectadores también se almacenan en CloudWatch y se pueden recuperar a través del SDK. Hay un método adicional, como veremos a continuación, para obtener un recuento de los espectadores actuales de una transmisión en vivo, que es una forma práctica de obtener un recuento que se puede mostrar en su interfaz.


Nota: Si bien esta publicación se enfoca en los espectadores del canal de transmisión en vivo, también puede recuperar métricas sobre sus salas de chat de Amazon IVS, como ConcurrentChatConnections y Messages Delivered . No cubriremos eso en esta publicación, pero puede consultar los documentos para obtener más información.

Recuperación de vistas simultáneas a través de la consola de CloudWatch

Si solo busca echar un vistazo a los datos del espectador sin recuperar los datos sin procesar, puede ver sus ConcurrentViews a través de la consola de CloudWatch. Primero, seleccione Todas las métricas , luego elija IVS .

A continuación, selecciona Por canal .

Luego seleccione la casilla de verificación en la fila que contiene ConcurrentViews para cualquiera de sus canales de Amazon IVS.

Otra forma de encontrar vistas simultáneas para una sesión de transmisión es a través de la consola de Amazon IVS. Seleccione su canal, luego elija una ID de transmisión en la página de detalles del canal.

Los detalles de una sesión de transmisión contendrán varios gráficos, uno de los cuales contiene las vistas simultáneas de la sesión.

Recuperación de vistas simultáneas a través del SDK de CloudWatch

Para integrar estos datos en su propia aplicación, puede recuperar los datos a través del SDK de CloudWatch. De manera similar a las métricas de salud, necesitará un ARN del canal, un StartTime y un EndTime para recuperar ConcurrentViews .


En lugar de elegir aleatoriamente las horas de inicio y finalización, probablemente tenga sentido obtener estas horas de forma dinámica eligiendo las horas de inicio y finalización de una sesión de transmisión en vivo. Puede recuperar una lista de sesiones de transmisión a través del SDK de Amazon IVS (como vimos en la publicación anterior ).


Recordatorio: siempre necesitará un EndTime , incluso para transmisiones que están actualmente en vivo. Para transmisiones en vivo, siempre puede usar la hora actual como EndTime cuando usa el SDK para recuperar métricas.


Para recuperar estos datos a través de AWS SDK para JavaScript (v3), deberá instalar el paquete @aws-sdk/client-cloudwatch y crear una instancia del cliente ( new CloudWatchClient() ). Después de crear la instancia del cliente, configure algunas variables para las entradas requeridas.


 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;


A continuación, cree un objeto de entrada. El objeto de entrada contendrá StartTime , EndTime y una matriz de MetricDataQueries . La matriz de consultas contendrá un solo objeto que especifica el MetricName ( ConcurrentViews ), el Namespace ( AWS/IVS ) y las Dimensions por las que filtrar (nombre del canal, en este caso).

 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 };


Ahora envíe la solicitud y registre el resultado.

 const getMetricDataRequest = new GetMetricDataCommand(getMetricDataInput); let metrics = await cloudWatchClient.send(getMetricDataRequest); console.log(metrics);


Lo que produce una salida similar a la siguiente (se eliminaron los metadatos extraños del SDK por razones de brevedad):

 { "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" } ] }


Puede filtrar, ordenar y generar estos datos para producir un formato útil para generar gráficos.

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


Lo que produce una matriz de objetos.

 [ { "timestamp": "2023-02-10T14:22:00.000Z", "concurrentviews": "10.00" }, { "timestamp": "2023-02-10T14:26:00.000Z", "concurrentviews": "3.00" }, ... ]


Puede usar estos datos con nuestra biblioteca de gráficos favorita (o un generador de gráficos en línea genérico como lo hice yo).

Generación de imágenes de gráficos con el SDK de CloudWatch

En la última publicación, analizamos la generación de la imagen directamente a través del SDK de CloudWatch. Este enfoque también se aplica a sus métricas de visualización.

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


Que devuelve un objeto con la clave MetricWidgetImage que contiene un búfer de matriz ( Uint8Array ) que contiene la imagen del gráfico.

 { "MetricWidgetImage": { "0": 137, "1": 80, "2": 78, ... } }


Para convertir este búfer de matriz en una cadena base64:

 const buffer = Buffer.from(metricImage.MetricWidgetImage); console.log(buffer.toString('base64'));


Lo que nos da:

 iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAACXBIWXMA...


Eso se puede convertir en una imagen que se ve así:

Recuperación de sesiones de visualización en vivo actuales para un canal

Como se mencionó anteriormente, puede obtener fácilmente un recuento de las sesiones de visualización actuales para la transmisión en vivo activa en un canal a través del módulo de cliente de Amazon IVS en el SDK de AWS. Para ello, utilice el método 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);


Lo que produce una salida como la siguiente.

 { "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 } }


Tenga en cuenta la propiedad viewerCount , que es un conteo en vivo de sesiones de vista para la transmisión en vivo actual.

Resumen

En esta publicación, aprendimos cómo recuperar datos de vista para nuestras transmisiones en vivo de Amazon IVS a través de los SDK de CloudWatch y Amazon IVS. Para obtener más información, consulte la documentación .

Corona