Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Workflows de Broadcast Ponta a Ponta com AWS MediaConnect

By Nikhil PawarJun 23, 202510 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

No ritmo acelerado da mídia atual, transportar vídeo de alta qualidade pelas redes com confiabilidade e segurança virou requisito básico. Seja você uma emissora levando eventos ao vivo para audiências globais, um criador distribuindo vídeo premium para plataformas de streaming ou uma empresa cuidando das comunicações internas em vídeo, manter a qualidade da imagem sem abrir mão de segurança e estabilidade pode ser um baita desafio.

É aí que entra o AWS Elemental MediaConnect, uma solução que muda o jogo. Como serviço em nuvem, ele transforma a forma de pensar o transporte de vídeo, oferecendo um caminho seguro, escalável e de alta qualidade para mover feeds de vídeo por redes globais. Pensado para simplificar workflows de streaming, o AWS Elemental MediaConnect elimina a complexidade e o custo da infraestrutura tradicional.

Construído para desempenho e resiliência, o MediaConnect suporta protocolos seguros padrão de mercado como Zixi, SRT e RIST, garantindo que o conteúdo chegue íntegro e com o mais alto padrão de qualidade. Recursos como ingest flexível de fontes, saídas redundantes e integração nativa com os AWS Media Services (como MediaLive e MediaPackage) permitem que as equipes entreguem streams impecáveis e de baixa latência — para que você foque no conteúdo, não no pipeline.

O AWS Elemental MediaConnect atende a vários cenários de distribuição de vídeo de alta qualidade, entre eles:

  • On-premises para AWS: transporte vídeo com segurança a partir de encoders de contribuição (ou outras fontes on-premises) para a AWS usando protocolos confiáveis como Zixi, SRT ou RIST.
  • AWS para on-premises: distribua o vídeo processado da AWS de volta para locais on-premises, seja para reprodução, monitoramento ou processamento adicional.
  • Sindicalização cloud-to-cloud: compartilhe conteúdo entre regiões da AWS ou com outras nuvens para redundância ou estratégias multi-CDN.
  • Entrega global segura: distribua conteúdo para usuários finais ou parceiros pelo mundo todo com criptografia e controles de acesso embutidos.

Com a função de entitlement do MediaConnect, dá para dividir o custo de distribuição com assinantes/clientes e ainda ativar ou desativar o entitlement com um clique.

Diagrama da arquitetura

Configurando o MediaConnect (ingest)

Configure um workflow padrão de contribuição em nuvem no MediaConnect

  • Crie um flow na conta originadora: ex.: source-demoflow-in-originator-us-east-1. Deixei alguns templates do CloudFormation como referência, mas vou demonstrar como criar diferentes pipelines de mídia e conectá-los pelo console, para facilitar o entendimento.

Criar flow

  • Informe o nome, deixe a Availability Zone com o valor padrão, Source type → Standard source e escolha o Protocol (ex.: SRT listener).

Criar flow no MediaConnect

Adicione um Allowlist CIDR block para proteger o flow contra uso indevido. Coloquei meu IP público seguido de /32, junto com o número da porta, ex.: 5000. (Faixa válida de 1024 a 65535, exceto 2077 e 2088. Caracteres válidos: 0–9.)

OBSERVAÇÃO — Se o stream for criptografado, escolha a opção de descriptografia.

Você pode guardar a chave de descriptografia no AWS Secret Manager para que o AWS MediaConnect a acesse, mas a role do MediaConnect precisa de permissões para ler esse segredo.

  • Iniciar o flow:

source-demoflow-in-originator-us-east-1

  • Iniciar o stream: estou usando o OBS Studio para enviar um stream SRT ao workflow do MediaConnect. Abra o OBS e prepare o stream. Vá em Settings e selecione Stream. No campo Server, insira srt://<Inbound IP Address>:<Port>. Substitua Inbound IP Address pelo IP de entrada do seu flow e Port pela porta do seu flow. Deixe Stream Key em branco. Clique em OK para fechar a janela de Settings.

Transmitindo pelo OBS Studio

Agora é só iniciar o streaming no OBS para fazer o ingest no flow do MediaConnect. Em alguns instantes, sua fonte deve aparecer com status Connected em Source health, e você consegue ver a thumbnail do vídeo. Pronto: o stream chegou ao MediaConnect e está pronto para ser distribuído.

Stream na fonte de distribuição da conta originadora

Criando saídas

Configure um workflow padrão de distribuição em nuvem a partir da conta AWS Originator

  • Output #1: ex.: protocolo SRT

Vamos criar uma saída com protocolo SRT no flow de ingest em nuvem que configuramos antes (source-demoflow-in-originator-us-east-1). Em seguida, recebemos o stream de vídeo e reproduzimos em um laptop local pelo player VLC.

  • Adicione uma saída na seção de output do flow do MediaConnect (ex.: output-1-srt-listner-from-source-demoflow-in-originator-us-east-1).

Output #1 — protocolo SRT

  • Inicie o streaming no OBS e confirme no VLC que o stream está chegando.

Output — Status — Connected

  • Com a saída do MediaConnect configurada, abra as configurações de rede do VLC e insira srt://<Inbound IP Address>:Port na URL. Substitua Inbound IP Address e Port pelos dados do seu flow e clique em Open.

VLC reproduzindo o stream de vídeo via protocolo SRT, conectado pelo flow de saída do MediaConnect

Observação: (opcional) no momento, não é possível adicionar Tags ao Flow do MediaConnect via template do CloudFormation. Para adicionar tags, estou usando uma função lambda, mas você também pode usar o console ou a CLI.

AWSTemplateFormatVersion: '2010-09-09'
Description: Create an AWS MediaConnect flow with an SRT listener source

Resources:
  MediaConnectFlow:
    Type: AWS::MediaConnect::Flow
    Properties:
      AvailabilityZone: us-east-1a
      Name: source-demoflow-in-originator-us-east-1
      Source:
        Name: nikhil-mac
        Description: nikhil-mac-machine
        Protocol: srt-listener
        IngestPort: 5000
        WhitelistCidr: 0.0.0.0/0  # Replace with a specific IP range for security
      SourceMonitoringConfig:
        ThumbnailState: ENABLED

  MediaConnectFlowOutput:
    Type: AWS::MediaConnect::FlowOutput
    Properties:
      FlowArn: !Ref MediaConnectFlow
      Name: output-1-srt-listner-from-source-demoflow-in-originator-us-east-1
      Description: Output-1-for-site-1-VLC
      Protocol: srt-listener
      Port: 2222
      MinLatency: 2000
      CidrAllowList:
        - 0.0.0.0/0

  TaggingLambdaRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
      Policies:
        - PolicyName: MediaConnectTaggingPolicy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - mediaconnect:TagResource
                Resource: !Sub 'arn:aws:mediaconnect:${AWS::Region}:${AWS::AccountId}:flow:*'

  TaggingLambda:
    Type: AWS::Lambda::Function
    Properties:
      Runtime: python3.9
      Handler: index.handler
      Role: !GetAtt TaggingLambdaRole.Arn
      Timeout: 30
      Code:
        ZipFile: |
          import boto3
          import cfnresponse

          def handler(event, context):
              if event['RequestType'] in ['Create', 'Update']:
                  try:
                      client = boto3.client('mediaconnect')
                      flow_arn = event['ResourceProperties']['FlowArn']
                      tags = [\
                          {'Key': 'name', 'Value': 'source-demoflow-in-originator-us-east-1'},\
                          {'Key': 'account', 'Value': '2111XXXXXXXX'},\
                          {'Key': 'created_by', 'Value': 'cloudformation'},\
                          {'Key': 'type', 'Value': 'originator'}\
                      ]

                      tag_dict = {}
                      for tag in tags:
                          tag_dict[tag['Key']] = tag['Value']

                      client.tag_resource(
                          ResourceArn=flow_arn,
                          Tags=tag_dict
                      )

                      cfnresponse.send(event, context, cfnresponse.SUCCESS, {})
                  except Exception as e:
                      print(f"Error tagging MediaConnect Flow: {str(e)}")
                      cfnresponse.send(event, context, cfnresponse.FAILED, {})
              else:
                  cfnresponse.send(event, context, cfnresponse.SUCCESS, {})

  MediaConnectFlowTags:
    Type: Custom::MediaConnectFlowTags
    DependsOn: MediaConnectFlow
    Properties:
      ServiceToken: !GetAtt TaggingLambda.Arn
      FlowArn: !Ref MediaConnectFlow

Outputs:
  FlowArn:
    Description: ARN of the MediaConnect Flow
    Value: !Ref MediaConnectFlow

  FlowOutputArn:
    Description: ARN of the MediaConnect Flow Output
    Value: !Ref MediaConnectFlowOutput
  • Output #2: conceder entitlement a outra conta — os originadores de conteúdo podem conceder entitlements para compartilhar o conteúdo com outras contas AWS (contas de assinante). Os assinantes podem, então, configurar seus próprios flows do AWS Elemental MediaConnect usando o flow do originador como fonte.

Conceder entitlement 1.1

Conceder entitlement 1.2

Observação — em um único entitlement, você pode incluir várias contas usando a opção de adicionar assinante.

  MediaConnectFlowEntitlement:
    Type: AWS::MediaConnect::FlowEntitlement
    Properties:
      FlowArn: !Ref MediaConnectFlow
      Name: entitlement-for-subscriber-account-7227XXXXXXXX
      Description: Entitlement for subscriber account
      Subscribers:
        - "7227XXXXXXXX"
      DataTransferSubscriberFeePercent: 100
      EntitlementStatus: ENABLED

Configure um workflow padrão de distribuição em nuvem a partir da conta AWS Subscriber

  • Crie um flow do MediaConnect na conta de assinante para a qual você quer enviar o stream; o ARN do entitlement deve estar disponível no momento da criação.

Flow do MediaConnect na conta de assinante a partir do entitlement

#Sample Cloudformation template with Entilement
AWSTemplateFormatVersion: '2010-09-09'
Description: Subscriber MediaConnect flow using an entitlement from another account

Resources:
  SubscriberMediaConnectFlow:
    Type: AWS::MediaConnect::Flow
    Properties:
      AvailabilityZone: us-east-1a
      Name: subscriber-flow-from-originator-entitlement
      Source:
        Name: entitlement-source
        Description: Source from entitlement
        EntitlementArn: arn:aws:mediaconnect:us-east-1:2111XXXXXXXX:entitlement:1-WgUJUgRTAlJeUghT-b1637ab66a4c:entitlement-for-subscriber-account-7227XXXXXXXX
      SourceMonitoringConfig:
        ThumbnailState: ENABLED
  • Inicie os dois flows e comece o streaming.

Stream chegando à conta de assinante via entitlement

Conectando o MediaConnect ao MediaLive

  • Output #3: do flow do MediaConnect (conta originadora) para o channel do AWS Elemental MediaLive (conta originadora, mesma região)
  • AWS Elemental MediaLive Channel: primeiro, crie um input no MediaLive Channel.
  • Comece pelo console do serviço MediaLive. A partir dele:
  • Vá em Inputs e clique em Create input.
  • Em Input details, dê um nome descritivo ao input.
  • Em Input type, selecione MediaConnect.
  • Na seção MediaConnect flows, defina Input class como SINGLE_INPUT. Em seguida, escolha o Flow ARN específico na lista suspensa.
  • Em Role ARN, selecione Use existing role e escolha sua MediaLiveAccessRole.
  • Preenchidos todos os detalhes, clique em Create para gerar o input.

Para se aprofundar em Role, Inputs e AWS Elemental MediaLive, confira meu post sobre MediaLive aqui.

Input do MediaLive 1.1

Input do MediaLive 1.2

  • Crie o channel do MediaLive — no menu AWS Elemental MediaLiveChannels → Create Channel. Preencha as informações gerais, Channel name e IAM role.

Channel do MediaLive na conta originadora

  • Na seção Channel template, escolha Live event HLS. Channel class → Single Pipeline.

Configurações do channel do MediaLive na conta originadora

  • Em Input attachments → clique em Add. Em Attach input, no campo Input, selecione seu input na lista suspensa e confirme.
  • O channel do MediaLive precisa de output groups — há várias opções. Para a demonstração, vou usar HLS com S3 como destino, ex.: nikhil-medialive-destination. Em HLS group destination A, no campo URL, informe a URL do S3 no formato a seguir. Use o nome do bucket S3 que você criou — s3://nikhil-medialive-destination/live/index.

Configurações de saída do channel do MediaLive

  • Crie um channel do MediaLive e inicie o stream pelo OBS. O stream deve aparecer chegando ao channel do MediaLive, e os arquivos vão sendo gerados no seu bucket S3. Se quiser, adicione uma distribuição do CloudFront na saída HLS e reproduza o stream pela URL do CloudFront, ex.: https:///live/index.m3u8.

MediaConnect para MediaLive

MediaConnect entre regiões

  • Output #4: do MediaLive (originadora — us-east-1) para o MediaConnect (originadora — us-west-2)
  • Primeiro, crie outro flow do MediaConnect, igual ao anterior, em uma região diferente (ex.: demoflow-in-originator-us-west-2).

Flow do MediaConnect

  • Se você marcar a descriptografia, isso significa que o conteúdo vindo do channel do MediaLive (us-east-1) virá criptografado. (Observação: vou fazer assim para mostrar a parte da criptografia.) Tanto a role do flow do MediaConnect quanto a role do MediaLive precisam de acesso à chave de criptografia/descriptografia. A chave pode ficar no AWS Secret Manager (em us-east-1) e ser replicada para a região de destino (Oregon — us-west-2), já que os secrets da AWS são recursos regionais e o MediaConnect só consegue lê-los se forem replicados.

  • Exemplo de policy para o secret da AWS
{
  "Version" : "2012-10-17",
  "Statement" : [ {\
    "Sid" : "AllowMediaConnectGetSecretValue",\
    "Effect" : "Allow",\
    "Principal" : {\
      "Service" : "mediaconnect.amazonaws.com"\
    },\
    "Action" : "secretsmanager:GetSecretValue",\
    "Resource" : [\
         "arn:aws:secretsmanager:us-east-1:2111XXXXXXXX:secret:medialive-secret-us-east-1-jedikQ",\
         "arn:aws:secretsmanager:us-west-2:2111XXXXXXXX:secret:medialive-secret-us-east-1-jedikQ" ],\
    "Condition" : {\
      "StringEquals" : {\
        "aws:SourceAccount" : "2111XXXXXXXX"\
      }\
    }\
  }, {\
    "Sid" : "AllowMediaConnectListSecrets",\
    "Effect" : "Allow",\
    "Principal" : {\
      "Service" : "mediaconnect.amazonaws.com"\
    },\
    "Action" : "secretsmanager:ListSecrets",\
    "Resource" : "*",\
    "Condition" : {\
      "StringEquals" : {\
        "aws:SourceAccount" : "2111XXXXXXXX"\
      }\
    }\
  }, {\
    "Sid" : "AllowMediaLiveAccessRoleGetSecretValue",\
    "Effect" : "Allow",\
    "Principal" : {\
      "AWS" : "arn:aws:iam::2111XXXXXXXX:role/MediaLiveAccessRole"\
    },\
    "Action" : "secretsmanager:GetSecretValue",\
    "Resource" : [ "arn:aws:secretsmanager:us-east-1:211125713318:secret:medialive-secret-us-east-1-jedikQ", "arn:aws:secretsmanager:us-west-2:211125713318:secret:medialive-secret-us-east-1-jedikQ" ],\
    "Condition" : {\
      "StringEquals" : {\
        "aws:SourceAccount" : "2111XXXXXXXX"\
      }\
    }\
  } ]
}
  • Agora, configure a saída para o MediaConnect (us-west-2) no channel do MediaLive (us-east-1) editando o channel para concluir o pipeline de mídia.
  • Editar channel → Output group (adicionar) → SRT → Confirmar

Output group do MediaLive — SRT

  • Dê um nome (ex.: media-connect-srt-oregon) → Configurações

Configurações do output SRT group

  • Adicione a URL srt como seu endpoint do MediaConnect (us-east-2) com a porta no formato — srt://<Inbound IP Address>:<Port> — e selecione o secret.

Endpoint SRT

Validando seus workflows

Com os inputs configurados, o próximo passo essencial é iniciar todos os workflows e o channel do MediaLive. Assim, dá para confirmar que todas as saídas chegam aos destinos previstos e que cada pipeline está funcionando direitinho. Como mostra a imagem abaixo, o pipeline entrega o conteúdo a todos os endpoints configurados.

Vamos detalhar o fluxo típico do conteúdo:

Lado do originador (AWS Account 2111XXXXXXXX):

  • O OBS (MAC) envia o stream inicial.
  • Esse stream é roteado para o flow do MediaConnect nikhil-demoflow (us-east-1).
  • De lá, é entregue ao VLC (srt://3.233.7.232:5555) para verificação local.
  • O stream também alimenta o channel do Elemental MediaLive — nikhil-obs-channel (us-east-1).
  • E também alimenta o flow do MediaConnect — stream-from-account-2111XXXXXXXX-flow (us-east-1) na conta de assinante (AWS Account 7227XXXXXXXX).
  • Na conta originadora, o stream vai do flow do MediaConnect nikhil-demoflow (us-east-1) para o nikhil-demoflow-oregon (us-west-2).

Flow do MediaConnect — us-west-2

Workflow do assinante

Output #5: pipeline do endpoint do MediaConnect na conta de assinante para o channel do AWS Elemental MediaLive

Para isso, vou implantar rapidamente o channel do MediaLive na conta de assinante usando o Workflow Wizard. Para mais detalhes sobre o Workflow Wizard, confira meu post no blog.

Em vez de Entitlement (para a conta), vou criar uma saída no flow do MediaConnect, que será usada como input do channel do MediaLive na conta de assinante.

Flow do assinante — output

  • Crie um input (tipo: mediaconnect) como antes e implante o channel do MediaLive.

Workflow do assinante — channel do MediaLive

  • Por fim, inicie todos os workflows do MediaConnect e os channels do MediaLive e comece o streaming.

Prévia do MediaPackage

Do ingest à entrega, o AWS Elemental MediaConnect é a espinha dorsal de workflows de vídeo escaláveis e de alta performance. Combinando o MediaLive para processamento em tempo real, o MediaPackage para empacotamento just-in-time e o CloudFront para distribuição global — somados ao AWS Secrets Manager para guardar e gerenciar chaves de criptografia com segurança —, as emissoras conseguem proteger o conteúdo e entregá-lo sem fricção em endpoints públicos ou privados. À medida que as demandas de vídeo ao vivo evoluem, essa arquitetura mostra como os AWS Media Services abstraem a complexidade da infraestrutura, deixando as equipes livres para focar em inovação em vez de gastar energia com overhead operacional.

Visualização final do pipeline

Limpeza

Exclua todos os recursos implantados:

Channels do MediaLivesubscriber-workflow, medialive-channel-in-originator

Flows do MediaConnectsource-demoflow-in-originator-us-east-1, subscriber-flow-from-originator-entitlement, demoflow-in-originator-us-west-2

Secret do Secret Managermedialive-secret (remova a replicação do secret e exclua de us-east-1 na conta originadora)

Input do MediaLiveinput-for-medialive-originator (criado separadamente)

Se você está construindo uma plataforma de streaming ou explorando os recursos de mídia da AWS, espero que este passo a passo tenha ajudado a descomplicar a configuração dos pipelines do MediaConnect e suas integrações. Do design da arquitetura em nuvem à automação da infraestrutura, a DoiT International reúne expertise completa para ajudar a modernizar sua infraestrutura em nuvem. Fale com a gente e conheça nossas soluções de cloud engineering.