paint-brush
Usando o Amazon IVS para criar um canal privado para reprodução de transmissão ao vivo autorizadapor@amazonivs
544 leituras
544 leituras

Usando o Amazon IVS para criar um canal privado para reprodução de transmissão ao vivo autorizada

Muito longo; Para ler

Amazon Interactive Video Service (Amazon IVS) suporta canais privados. Esses canais restringirão a reprodução aos espectadores que obtiveram um token assinado com uma chave privada e verificado com uma chave pública. Veremos como ativar a autorização de reprodução, criar um par de chaves de reprodução, gerar um token e reproduzir um fluxo privado.
featured image - Usando o Amazon IVS para criar um canal privado para reprodução de transmissão ao vivo autorizada
Amazon Interactive Video Service (IVS)  HackerNoon profile picture
0-item

Analisamos muitas maneiras diferentes de criar experiências de transmissão ao vivo com o Amazon Interactive Video Service (Amazon IVS) aqui neste blog, mas todos esses exemplos até agora se concentraram em canais públicos que podem ser vistos por qualquer pessoa sem qualquer autorização de reprodução para verifique se o visualizador tem permissão para visualizar a transmissão ao vivo. Muitas plataformas de conteúdo gerado pelo usuário (UGC) de transmissão ao vivo não exigem nenhuma autorização para visualizar uma transmissão, mas há casos de uso em que queremos limitar nossos visualizadores de transmissão a um subconjunto de nosso público. Por exemplo, talvez nossos criadores de conteúdo desejem cobrar uma assinatura pelo conteúdo que produzem. Ou talvez haja limitações de licenciamento para o conteúdo de transmissão que proíbem a distribuição para determinados dados demográficos ou localizações geográficas. Para lidar com casos de uso em que a plataforma deve impor a autorização de reprodução, o Amazon IVS oferece suporte a canais privados. Esses canais restringirão a reprodução aos espectadores que obtiveram um token assinado com uma chave privada e verificado com uma chave pública. Nesta postagem, veremos como ativar a autorização de reprodução, criar um par de chaves de reprodução, gerar um token e reproduzir um fluxo privado.

Criando um Canal Privado

A primeira etapa neste fluxo de trabalho é criar um canal privado. A criação de um canal privado é muito semelhante à criação de um canal público - a única diferença é uma única configuração ao criar o canal para habilitar a autorização de reprodução. Podemos habilitar a autorização de reprodução por meio do Amazon IVS Console , da AWS CLI ou de qualquer um dos AWS SDKs.

Vamos começar vendo como criar um canal privado por meio do Amazon IVS Console. Na lista de canais no console, clique em Criar canal .

Lista de canais do Amazon IVS

Na página Criar canal , insira um nome de canal (nº 1), selecione Configuração personalizada (nº 2) e ative Ativar requisito de autorização de token para reprodução de vídeo (nº 3).

Ativando a autorização de reprodução

Se preferir usar a CLI para criar um canal, você pode adicionar a opção --authorized .

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


Na realidade, você provavelmente usará o SDK da AWS para criar os canais do usuário. Nesse caso, você pode consultar a documentação do AWS SDK para seu idioma favorito para determinar o argumento apropriado a ser definido para reprodução authorized . Por exemplo, aqui estão os documentos para CreateChannelCommandInput para o AWS SDK para JavaScript v3, que afirmam que podemos definir uma propriedade authorized booleana ao criar um canal.

Agora que habilitamos a autorização de reprodução, se transmitirmos para o canal e tentarmos visualizar a reprodução ao vivo sem gerar e passar um token de reprodução, receberemos um erro de reprodução. Aqui está um exemplo de reprodução usando o Amazon IVS player SDK, onde adicionamos um ouvinte ERROR para capturar erros de reprodução.

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


Executar isso em um navegador quando apontado para um canal privado resultará no seguinte erro registrado no console.

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


Isso confirma que nosso canal é realmente privado e requer que um token seja gerado e passado junto com o URL de reprodução para autorizar a reprodução.

Criando uma chave de reprodução

Antes de podermos gerar um token de reprodução, precisaremos criar um par de chaves públicas/privadas e carregá-lo no console do Amazon IVS. Esse par de chaves será usado para gerar um token JWT assinado com a chave privada e verificado com a chave pública para autorizar a reprodução.

Para gerenciar chaves de reprodução com o Amazon IVS Console, selecione teclas de reprodução na barra lateral de navegação à esquerda.

Navegação no console com o link das teclas de reprodução realçado

Podemos criar uma chave com o console ou manualmente com o OpenSSL offline em nossa máquina local. Para criar um par de chaves diretamente no console. Para isso, clique em Criar chave de reprodução .

Criar link de chave de reprodução

Dê um nome à chave e clique em Criar .

Criar caixa de diálogo de tecla de reprodução

A chave pública desse par é salva em sua conta da AWS e será usada para verificar qualquer solicitação de reprodução que contenha um token assinado com a chave privada. Ao usar o Amazon IVS Console para gerar um par de chaves, a chave privada é baixada imediatamente para sua máquina e não é salva no console ou disponível para download posterior .

Criando um par de chaves off-line

Se preferir criar seu próprio par de chaves, você pode fazer isso offline e depois importar a chave pública para o console do Amazon IVS. Aqui está um exemplo de criação de um par de chaves com 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 a chave pública, clique em Importar na página da lista de chaves de Reprodução .

Botão de chave de importação

Dê um nome à chave importada e procure o arquivo de chave pública (ou cole o conteúdo do arquivo de chave pública ).

Diálogo de chave de importação

Isso também pode ser feito por meio da AWS CLI:

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


Ou por meio do AWS SDK ( documentos para exemplo de JavaScript).

Reprodução de Canal Privado

Agora que criamos um canal privado e um par de chaves de reprodução, estamos prontos para gerar tokens de autorização de reprodução assinados. Em seu aplicativo, sua lógica de negócios determinará quais usuários devem receber um token de autorização. Conforme mencionado acima, talvez a lógica do seu aplicativo verifique primeiro se o usuário é um assinante válido do canal consultando um banco de dados. Ou, no caso de restrições geográficas, talvez você precise procurar o endereço IP do visualizador para garantir que ele esteja associado a uma região capaz de visualizar o fluxo. A implementação exata varia, mas depois de determinar se o visualizador está realmente autorizado a visualizar o stream, você pode prosseguir com o método de geração de token descrito abaixo.

Atenção: a geração de token será diferente com base no idioma que você está usando no back-end. Consulte o guia do usuário para obter detalhes sobre os requisitos.

Para gerar um token com Node.js, podemos usar a biblioteca jsonwebtoken ( docs ). Essa biblioteca simplificará o processo e nos permitirá assinar nossa carga útil com o algoritmo de assinatura SHA-384 , conforme exigido pelo Amazon IVS. Nossa carga útil deve conter o ARN do canal , uma access-control-origin para limitar a reprodução a um domínio específico (ou * para todos os domínios) e um registro de data e hora de expiração de token. Para assinar o payload, vamos formatá-lo conforme abaixo e usar a chave privada que criamos e importamos acima.

Observação: o token é usado para iniciar a reprodução em um canal privado, portanto, o período de expiração se aplica apenas ao tempo entre a geração do token e o início da reprodução. Não está relacionado à quantidade de tempo que o usuário pode reproduzir um determinado fluxo. Depois que a reprodução é autorizada, ela pode continuar até que o usuário desconecte ou recarregue a página da web.

Aqui está uma maneira de gerar um token no back-end (por meio de um microsserviço ou aplicativo sem servidor) usando 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; }


Em nosso front-end, podemos recuperar o token do back-end e anexá-lo ao URL de reprodução do canal privado. No exemplo abaixo, trunamos o URL de reprodução ( streamUrl ) para abreviar.

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


Resumo

Nesta postagem, aprendemos como criar canais privados, criar e importar pares de chaves de reprodução e gerar um token JWT para autorização de reprodução. Para saber mais sobre canais privados, consulte o guia do usuário .