paint-brush
Uso de Amazon IVS para crear un canal privado para la reproducción de transmisión en vivo autorizadapor@amazonivs
549 lecturas
549 lecturas

Uso de Amazon IVS para crear un canal privado para la reproducción de transmisión en vivo autorizada

Demasiado Largo; Para Leer

Amazon Interactive Video Service (Amazon IVS) admite canales privados. Estos canales restringirán la reproducción a los espectadores que hayan obtenido un token firmado con una clave privada y verificado con una clave pública. Veremos cómo habilitar la autorización de reproducción, crear un par de claves de reproducción, generar un token y reproducir una transmisión privada.
featured image - Uso de Amazon IVS para crear un canal privado para la reproducción de transmisión en vivo autorizada
Amazon Interactive Video Service (IVS)  HackerNoon profile picture
0-item

Hemos analizado muchas formas diferentes de crear experiencias de transmisión en vivo con Amazon Interactive Video Service (Amazon IVS) aquí en este blog, pero hasta ahora todos esos ejemplos se han centrado en canales públicos que cualquier persona puede ver sin ninguna autorización de reproducción para Verifique que el espectador tenga permiso para ver la transmisión en vivo. Muchas plataformas de contenido generado por el usuario (UGC) de transmisión en vivo no requieren ninguna autorización para ver una transmisión, pero hay casos de uso en los que queremos limitar los espectadores de nuestra transmisión a un subconjunto de nuestra audiencia. Por ejemplo, tal vez nuestros creadores de contenido quieran cobrar una suscripción por el contenido que producen. O, tal vez, existen limitaciones de licencia para el contenido de transmisión que prohíben la distribución a ciertos datos demográficos o ubicaciones geográficas. Para abordar los casos de uso en los que la plataforma debe hacer cumplir la autorización de reproducción, Amazon IVS admite canales privados. Estos canales restringirán la reproducción a los espectadores que hayan obtenido un token firmado con una clave privada y verificado con una clave pública. En esta publicación, veremos cómo habilitar la autorización de reproducción, crear un par de claves de reproducción, generar un token y reproducir una transmisión privada.

Creación de un canal privado

El primer paso en este flujo de trabajo es crear un canal privado. La creación de un canal privado es muy similar a la creación de un canal público: la única diferencia es una configuración única al crear el canal para habilitar la autorización de reproducción. Podemos habilitar la autorización de reproducción a través de la consola de Amazon IVS , a través de la CLI de AWS o a través de cualquiera de los SDK de AWS.

Comencemos por ver cómo crear un canal privado a través de Amazon IVS Console. En la lista de canales de la consola, haga clic en Crear canal .

Lista de canales de Amazon IVS

En la página Crear canal , ingrese un nombre de canal (n.º 1), seleccione Configuración personalizada (n.º 2) y active Habilitar requisito de autorización de token para la reproducción de video (n.º 3).

Habilitación de la autorización de reproducción

Si prefiere usar la CLI para crear un canal, puede agregar la opción --authorized .

 $ aws ivs create-channel --name demo-private-channel --latency-mode LOW --type STANDARD --authorized


En realidad, probablemente utilizará el SDK de AWS para crear los canales de sus usuarios. En este caso, puede consultar la documentación del SDK de AWS de su idioma favorito para determinar el argumento apropiado para establecer la reproducción authorized . Por ejemplo, aquí están los documentos para CreateChannelCommandInput para AWS SDK para JavaScript v3 que indican que podemos establecer una propiedad authorized booleana al crear un canal.

Ahora que hemos habilitado la autorización de reproducción, si transmitiéramos al canal e intentáramos ver la reproducción en vivo sin generar y pasar un token de reproducción, recibiríamos un error de reproducción. Este es un ejemplo de reproducción con el SDK de reproductor de Amazon IVS donde hemos agregado un oyente ERROR para capturar los errores de reproducción.

 const streamUrl = '[private channel Playback Url]'; const ivsPlayer = IVSPlayer.create(); ivsPlayer.attachHTMLVideoElement(document.getElementById('video-player')); ivsPlayer.load(streamUrl); ivsPlayer.play(); ivsPlayer.addEventListener(IVSPlayer.PlayerEventType.ERROR, (err) => { console.log(err); });


Ejecutar esto en un navegador cuando se apunta a un canal privado dará como resultado el siguiente error registrado en la consola.

 { "type": "ErrorAuthorization", "code": 7, "source": "MasterPlaylist", "message": "invalid_playback_auth_token" }


Esto confirma que nuestro canal es realmente privado y requiere que se genere un token y se transmita junto con la URL de reproducción para autorizar la reproducción.

Creación de una tecla de reproducción

Antes de que podamos generar un token de reproducción, necesitaremos crear un par de claves pública/privada y cargarlo en la consola de Amazon IVS. Este par de claves se usará para generar un token JWT que se firma con la clave privada y se verifica con la clave pública para autorizar la reproducción.

Para administrar las teclas de reproducción con Amazon IVS Console, seleccione Teclas de reproducción en la barra lateral de navegación izquierda.

Navegación de la consola con el enlace de las teclas de reproducción resaltado

Podemos crear una clave con la consola o manualmente con OpenSSL sin conexión en nuestra máquina local. Para crear un par de claves directamente en la consola. Para ello pulsa en Crear clave de reproducción .

Crear enlace de clave de reproducción

Asigne un nombre a la clave y haga clic en Crear .

Crear cuadro de diálogo clave de reproducción

La clave pública de este par se guarda en su cuenta de AWS y se utilizará para verificar cualquier solicitud de reproducción que contenga un token firmado con la clave privada. Cuando se utiliza la consola de Amazon IVS para generar un par de claves, la clave privada se descarga inmediatamente en su máquina y no se guarda en la consola ni está disponible para su posterior descarga .

Creación de un par de claves sin conexión

Si prefiere crear su propio par de claves, puede hacerlo sin conexión y luego importar la clave pública a la consola de Amazon IVS. Este es un ejemplo de cómo crear un par de claves con OpenSSL.

 $ openssl ecparam -name secp384r1 -genkey -noout -out demo-private-channel-private-key-1.pem $ openssl ec -in demo-private-channel-private-key-1.pem -pubout -out demo-private-channel-public-key-1.pem


Para importar la clave pública, haga clic en Importar en la página de lista de claves de reproducción .

Botón Importar clave

Asigne un nombre a la clave importada y busque el archivo de clave pública (o pegue el contenido del archivo de clave pública ).

Cuadro de diálogo Importar clave

Esto también se puede hacer a través de la CLI de AWS:

 $ aws ivs \ import-playback-key-pair \ --name demo-private-channel-playback-key-1 \ --public-key-material "`cat /path/to/your/public-key.pem`"


O a través del SDK de AWS ( documentos para el ejemplo de JavaScript).

Reproducción de canales privados

Ahora que hemos creado un canal privado y un par de claves de reproducción, estamos listos para generar tokens de autorización de reproducción firmados. En su aplicación, su lógica comercial dictará a qué usuarios se les debe otorgar un token de autorización. Como se mencionó anteriormente, tal vez la lógica de su aplicación primero verifique que el usuario sea un suscriptor válido del canal al consultar una base de datos. O, en el caso de las restricciones geográficas, tal vez deba buscar la dirección IP del espectador para asegurarse de que esté asociado con una región que pueda ver la transmisión. La implementación exacta variará, pero una vez que determine si el espectador está realmente autorizado para ver la transmisión, puede continuar con el método de generación de tokens que se describe a continuación.

Advertencia: la generación de tokens diferirá según el idioma que esté utilizando en el backend. Consulte la guía del usuario para obtener detalles sobre los requisitos.

Para generar un token con Node.js, podemos usar la biblioteca jsonwebtoken ( docs ). Esta biblioteca simplificará el proceso y nos permitirá firmar nuestra carga útil con el algoritmo de firma SHA-384 según lo exige Amazon IVS. Nuestra carga útil debe contener el ARN del canal , un access-control-origin para limitar la reproducción a un dominio específico (o * para todos los dominios) y una marca de tiempo de vencimiento del token. Para firmar la carga útil, la formatearemos como se muestra a continuación y usaremos la clave privada que creamos e importamos anteriormente.

Nota: el token se usa para iniciar la reproducción en un canal privado, por lo que el período de vencimiento solo se aplica al tiempo entre la generación del token y el inicio de la reproducción. No se relaciona con la cantidad de tiempo que el usuario puede reproducir una secuencia determinada. Una vez que se autoriza la reproducción, puede continuar hasta que el usuario desconecte o vuelva a cargar la página web.

Esta es una forma de generar un token en el backend (mediante un microservicio o una aplicación sin servidor) mediante Node.js.

 import jwt from "jsonwebtoken"; const getToken = () => { const privateChannelArn = process.env.DEMO_PRIVATE_CHANNEL_ARN; // private channel ARN const privateChannelPrivateKey = process.env.DEMO_PRIVATE_CHANNEL_PRIVATE_KEY; // playback private key const payload = { "aws:channel-arn": privateChannelArn, "aws:access-control-allow-origin": "*", "exp": Date.now() + (60 * 1000), // expires in 1 minute }; const token = jwt.sign(payload, privateChannelPrivateKey, { algorithm: 'ES384' }); return token; }


En nuestra interfaz, podemos recuperar el token del backend y agregarlo a la URL de reproducción del canal privado. En el siguiente ejemplo, he truncado la URL de reproducción ( streamUrl ) por razones de brevedad.

 const streamUrl = `https://[truncated].m3u8?token=${token}` const ivsPlayer = IVSPlayer.create(); ivsPlayer.attachHTMLVideoElement(document.getElementById('video-player')); ivsPlayer.load(streamUrl); ivsPlayer.play();


Resumen

En esta publicación, aprendimos cómo crear canales privados, crear e importar pares de claves de reproducción y generar un token JWT para la autorización de reproducción. Para obtener más información sobre los canales privados, consulte la guía del usuario .