Bem-vindo ao Tech Talk da Brightcove! Este novo blog focado em negócios de tecnologia com tópicos sobre vídeo e engenharia de software. Por exemplo, o tema é como criar e distribuir filmes para vários dispositivos conectados e como fazer isso. Nesta época do primeiro post, vou falar sobre o uso do Zencoder, Lambda, S3 para automatizar o fluxo de trabalho de transcodificação com apenas algumas linhas de código.

As pastas de observação (também chamadas de "pastas para soltar" ou "hot folders") são ferramentas fáceis de usar para automatizar todos os fluxos de trabalho baseados em arquivos de uma só vez. Se você transcodificar regularmente a mídia no mesmo formato, poderá criar automaticamente o arquivo transcodificado simplesmente soltando o arquivo bruto em uma pasta. Esse é um procedimento comumente necessário ao criar mídia para receber a aprovação de clientes em fluxos de trabalho de pós-produção de vídeo ou gerar vários formatos de distribuição.

Neste post, tornar a prática de combinar os recursos usando o Lambda. Quando você solta o arquivo no bucket do S3, a tarefa de transcodificação usando a API do Zencoder é iniciada e o arquivo resultante é retornado ao S3. Você pode aplicar essa técnica e automatizar outras etapas no fluxo de trabalho. Por exemplo, você pode executar ações adicionais em arquivos transcodificados, como gerar notificações push e mover arquivos para o CDN.

Se você for um desenvolvedor e estiver familiarizado com a AWS, pule para a função Lambda na etapa 3 ou obtenha o exemplo de código do GitHub e tente você mesmo.

Benefícios da transcodificação na nuvem

As pastas de exibição são compatíveis com codificadores populares, como o Adobe Media Encoder, o Telestream e o Sorenson Squeeze. As licenças de compra dos produtos Sorenson e Adobe para o trabalho de codificação em pequena escala não podem ser consideradas econômicas, mas ao configurar um grande número de servidores de codificação quando há uma grande quantidade de conteúdo e a manutenção dele Custa custo e tempo enormes.

As ferramentas (Zencoder, S3 e Lambda) usadas aqui são baratas de serem cobradas de acordo com o uso, sem custo inicial nem taxa mínima exigida. Portanto, pode-se dizer que esta pasta de relógio é rentável, independentemente do tamanho da escala de trabalho. O custo real também é de 3 centavos por 1 GB no armazenamento S3, 5 centavos por minuto da saída de transcodificação do Zencoder (2 centavos se o valor for grande), portanto é fácil estimar a taxa de uso. O arquivo de saída é gravado no S3 e pode ser usado para distribuição na web imediatamente.

Mecanismo

Esta pasta monitorada existe no bucket do Amazon S3. O upload do arquivo para este intervalo inicia a função Lambda, gera uma solicitação para criar um trabalho de codificação e a envia para a API do Zencoder. O Zencoder obtém o arquivo do S3, transcodifica-o para o formato de saída que você define, depois descarta o arquivo transcodificado para o S3 e o retorna. Você pode entregar o arquivo ao cliente ou entregá-lo diretamente ao usuário final via CloudFront ou outro CDN.

Suposições

Para praticar este tutorial, você precisa de uma conta da Amazon Web Services (AWS) e conta Zencoder. Para fins de demonstração, apenas o serviço gratuito é suficiente, mas apenas o armazenamento S3GB está disponível, o Zencoder corta a saída em incrementos de 5 segundos.

Passo 1: Configurar o balde S3

Primeiro você precisa configurar a pasta watch no S3. Se você ainda não configurou o bucket do S3, faça o login no console da AWS e navegue para o serviço S3. Em seguida, clique em "Criar Balde" e dê um nome a ele. Como o nome do bucket deve ser único em todo o serviço, é uma boa ideia dar a ele um prefixo exclusivo, como seu nome ou nome da empresa.

 https://lh6.googleusercontent.com/d4-qZpYiN-An4nDunW66CfH25Zx4ViA49t3neGKQY92Ti1D43Jy2AM8pLC0SZOs873CmnFVElquiYP_KbIevClLadzuWpYIMYSgalIc89O1xoSGDA2yekx_7kUMwxzUm1-iPQyGM

"Região" (região), deixe o padrão de Zencoder de "US Standard" Coloque por favor. Isso impede que os custos de migração do S3 ocorram quando o Zencoder obtém seus arquivos. Se você precisar usar buckets de outras regiões, também poderá adicionar um parâmetro "Região" ao trabalho do Zencoder e definir o transcodificar para ser executado na mesma região.

Crie duas pastas no bucket do S3. Uma é a pasta na qual você carrega o arquivo e a outra é a pasta onde o Zencoder carrega o arquivo transcodificado. Aqui nós simplesmente usamos os nomes "inputs /" e "outputs /".

Etapa 2: conceder acesso ao Zencoder ao bucket do S3

Há duas maneiras de conceder acesso ao Zencoder para ler e gravar arquivos no seu bucket do S3. A maneira mais fácil é adicionar a diretiva de direitos de acesso do usuário do IAM do Zencoder ao bucket do S3.
No painel Propriedades do bucket do S3, clique em Permissions e, em seguida, em Add Bucket Policy. Cole a política de buckets do Zencoder (disponível na documentação do Zencoder ou neste repositório do GitHub) e substitua as instâncias de 'YOUR-BUCKET' pelo nome do bucket especificado na etapa 1.

 https://lh4.googleusercontent.com/yXR6O28MKEkCPxaaKN-AKhbfq9Zb1jLhyfwGBwRc74r5U3tE4vGelhrlwdEKTv_aCeSQ2-gBVrOSb-AmgYbR9po28exYHk1D6A01FyhfMU572Q6KQNJ7Jz9_xiu51wjVtbdeIoeG

Outra maneira de conceder acesso ao seu balde para Zencoder é, a política AmazonS3FullAccess Use-o (ou somente para esse intervalo) para criar um usuário do IAM e adicionar o ID da Chave de Acesso e a Chave de Acesso Secreto do usuário à seção Credenciais da sua conta do Zencoder.

Passo 3: Criar uma função Lambda

 https://lh5.googleusercontent.com/kG8puMgEaMaRymy5CpILl4bh-vlop2EeQcm8KsxBGdkgXCancACm_ZZ90tdZrVImfeon6WPDs3gGDGWDCH6JatiRuYZEcpA5ZcNJzPbzo1vNcfAvNElULfwgoYgpFCsHebpSL_O2 de

consola AWS, e em seguida, clique no serviço Lambda. Em seguida, clique em "Criar uma função Lambda" (Se você estiver usando o Lambda pela primeira vez, clique em "Começar"). Se você pular a etapa de impressão azul, a tela Configurar Função será exibida. Nomeie a função (por exemplo, "transcodificar vídeo") e selecione Python 2.7 no tempo de execução.

Cole o código de exemplo na seção de código da função Lambda. Ao fazer isso, você precisa editar algumas das principais variáveis ​​globais. Especificamente, defina API_KEY como chave de API de acesso completo do Zencoder, reescreva INPUT_FOLDER_NAME ao nome da pasta monitorada que você criou no S3 e S3_OUTPUT_BASE_URL ao nome do bloco e pasta onde deseja salvar o arquivo de saída . Em NOTIFICATION_EMAIL, defina o endereço de e-mail que você deseja receber a notificação do Zencoder (se você não deseja receber uma notificação, exclua a linha 39 da função Lambda).

Vou explicar um pouco do código de lambda_function.py. Basicamente, você irá gerar o nome do arquivo de saída com base no nome do arquivo carregado no S3. O objeto api_data é um trabalho enviado ao Zencoder, que contém definições de todos os parâmetros de saída e codificação. Também é possível reescrever seu conteúdo conforme necessário, e o Request Builder do Zencoder possui vários modelos. Ele envia o job para o terminal da API do Zencoder e registra a resposta no log.

Em seguida, selecione "S3 Execution Role" sob o título "Criar nova função". Para exibir a tela de criação, você precisa permitir o pop-up do navegador. Nesta tela, insira o nome da nova função e clique em "Permitir". Essa função define o esquema de permissão para executar a função Lambda. Neste caso, permitimos o acesso do Lambda ao bucket do S3. Quando você retornar à tela do Lambda, a nova função criada deverá ser selecionada no campo "Função".

Estenda o tempo limite para 10 segundos. Na realidade, é improvável que sejam necessários mais de 1500 milissegundos para executar a função, mas dar uma margem de alguns segundos caso a resposta da API seja lenta aumentará a resiliência da função. Como o Lambda cobra a cada 100 milissegundos de tempo de execução, é melhor não defini-lo por muito tempo. Em seguida, clique em "Next" e depois em "Create Function".
Na guia Origens de Eventos, adicione uma fonte de eventos. Selecione "S3" em "Tipo de fonte de evento", selecione o bucket S3 na etapa 1 em "Bucket" e defina "Event type" como "Object Created (All)".

 https://lh6.googleusercontent.com/zNsc0t_fH8oAHIwkB-uLqOOPi03g4CeldslcH-KnWXVVG7_MxwoirWtQm6b9FzPDuLzzUZAmp-qtnSgrkP1MOC992qNSXnRvPnHdOkLy6gYOiDvUg2wxJTMzZlKwg7wSk9DsFNoq no campo "Prefixo", digite o nome da pasta relógio que criou no S3 balde (por exemplo: " entradas / "). Ao fazer isso, a função Lambda será ativada somente quando um arquivo for adicionado à pasta especificada aqui, em vez das outras pastas no bloco. Mais importante, o arquivo de saída dispara o trabalho de codificação, o que impede que ele seja executado em um loop infinito. Por fim, marque "Ativar fonte de evento" e envie.

Concluído com

Agora você pode gerar um depósito S3 com uma pasta monitorada e uma função Lambda para receber um evento de criação de arquivo da pasta monitorada. Essa função transcodifica o arquivo criado, solta-o na pasta de saída e gera um trabalho do Zencoder para retornar. Vamos tentar enviar algumas mídias para a pasta watch e ver a operação real.

Se você precisar de solução de problemas, verifique os detalhes de cada chamada para a função Lambda no log do AWS CloudWatch. Mesmo na visão Jobs do Zencoder, você pode ver detalhes de cada trabalho e detectar erros.