Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Arma workflows de broadcast end-to-end con AWS MediaConnect

By Nikhil PawarJun 23, 202510 min read

Esta página también está disponible en English, Deutsch, Français, Italiano, 日本語 y Português.

En el panorama actual de los medios, donde todo va a una velocidad enorme, transportar contenido de video de alta calidad por las redes de forma confiable y segura se volvió indispensable. Ya seas un broadcaster que transmite eventos en vivo a audiencias globales, un creador que distribuye video premium a plataformas de streaming o una empresa que gestiona comunicaciones internas por video, mantener la calidad sin sacrificar seguridad ni confiabilidad puede ser todo un reto.

Ahí es donde entra AWS Elemental MediaConnect como una solución que cambia las reglas del juego. Al ser un servicio en la nube, transforma la manera de pensar el transporte de video y ofrece una forma escalable, segura y de alta calidad para mover feeds de video por redes globales. Diseñado para simplificar los workflows de streaming, AWS Elemental MediaConnect elimina la complejidad y el costo de la infraestructura tradicional.

Pensado para rendir y resistir, MediaConnect soporta protocolos seguros estándar de la industria como Zixi, SRT y RIST, lo que garantiza que el contenido llegue intacto y con los más altos estándares de calidad. Funciones como ingesta flexible de fuentes, salidas redundantes y una integración estrecha con AWS Media Services (como MediaLive y MediaPackage) permiten a los equipos entregar streams impecables y de baja latencia, para que te concentres en el contenido y no en el pipeline.

AWS Elemental MediaConnect soporta diversos escenarios de distribución de video de alta calidad, entre ellos:

  • On-premises a AWS: transporta video de forma segura desde encoders de contribución (u otras fuentes on-prem) hacia AWS, con protocolos confiables como Zixi, SRT o RIST.
  • AWS a on-premises: distribuye video procesado desde AWS de regreso a ubicaciones on-premises para playback, monitoreo o procesamiento adicional.
  • Sindicación cloud-to-cloud: comparte contenido entre regiones de AWS o con otras plataformas cloud para estrategias de redundancia o multi-CDN.
  • Entrega global segura: distribuye contenido a usuarios finales o partners en todo el mundo con encriptación y controles de acceso integrados.

Con la función de entitlement de MediaConnect, los clientes pueden compartir el costo de distribución con sus suscriptores y activar o desactivar el entitlement con un solo clic.

Diagrama de arquitectura

Configurar MediaConnect (Ingesta)

Configura un workflow estándar de contribución cloud en MediaConnect

  • Crear flow en la cuenta originator: p. ej., source-demoflow-in-originator-us-east-1. Agregué algunas plantillas de CloudFormation como referencia, pero voy a mostrar cómo crear distintos pipelines de medios y unirlos desde la consola para que se entienda mejor.

Crear flow

  • Ingresa el nombre, deja la Availability Zone con el valor predeterminado, Source type → Standard source, y elige el Protocol (p. ej., SRT listener).

Crear flow en MediaConnect

Agrega un bloque CIDR de Allowlist para proteger tu flow de un posible mal uso. Yo ingresé mi dirección IP pública, seguida de /32, junto con el número de puerto, p. ej., 5000. (Rango válido: 1024 a 65535 inclusive, excepto 2077 y 2088. Caracteres válidos: 0–9).

NOTA: si tu stream está encriptado, puedes elegir la opción de desencriptación.

Puedes guardar la clave de desencriptación en AWS Secret Manager para que AWS MediaConnect pueda acceder a ella, pero el rol de MediaConnect necesita permisos para leer ese secreto.

  • Iniciar el flow:

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

  • Iniciar el stream: estoy usando OBS Studio para enviar un stream SRT al workflow de MediaConnect. Abre OBS y prepara tu stream. Selecciona Settings en OBS y luego Stream. En Server, ingresa srt://<Inbound IP Address>:<Port>. Reemplaza Inbound IP Address por la IP de entrada de tu flow y Port por su número de puerto. Deja Stream Key en blanco. Haz clic en OK para cerrar el diálogo de Settings.

Transmitiendo desde OBS Studio

Ya puedes iniciar el streaming en OBS para que ingrese al flow de MediaConnect. En unos instantes deberías ver que tu fuente muestra estado Connected en Source health, junto con la miniatura del video. Tu stream llegó con éxito a MediaConnect para su distribución.

Stream en la fuente de distribución de la cuenta originator

Crear outputs

Configura un workflow estándar de distribución cloud desde la cuenta AWS Originator

  • Output #1: p. ej., protocolo SRT.

Ahora vamos a crear un output con protocolo SRT en el flow de ingesta cloud que configuramos antes (source-demoflow-in-originator-us-east-1). Después recibiremos el stream y lo reproduciremos en una laptop local con el reproductor VLC.

  • Agrega un output en la sección de outputs del flow de MediaConnect (p. ej., output-1-srt-listner-from-source-demoflow-in-originator-us-east-1).

Output #1 — protocolo SRT

  • Inicia el streaming desde OBS y confirma en VLC que el stream está llegando.

Output — Estado — Connected

  • Con el output de MediaConnect ya configurado, abre la configuración de red de VLC e ingresa srt://<Inbound IP Address>:Port en la URL. Reemplaza Inbound IP Address y Port por la IP de entrada de tu flow y haz clic en Open.

VLC reproduciendo el stream de video por protocolo SRT, conectado a través del output de MediaConnect

Nota: (Opcional) Por ahora no se pueden agregar Tags a un MediaConnect Flow vía plantilla de CloudFormation. Para agregar tags yo uso una función Lambda, pero también puedes hacerlo desde la consola o el 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: Otorgar entitlement a otra cuenta — Quien origina el contenido puede otorgar entitlements para compartirlo con otras cuentas de AWS (cuentas suscriptoras). Los suscriptores pueden entonces armar sus propios flows de AWS Elemental MediaConnect usando el flow del originador como fuente.

Otorgar entitlement 1.1

Otorgar entitlement 1.2

Nota: puedes agregar varias cuentas en un mismo entitlement con la opción de agregar suscriptor.

  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

Configurar un workflow estándar de distribución cloud desde la cuenta AWS Subscriber

  • Crea un flow de MediaConnect en la cuenta suscriptora a la que vas a enviar el stream. El ARN del entitlement debe estar disponible al momento de crearlo.

Flow de MediaConnect del suscriptor a partir del 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
  • Inicia ambos flows y comienza a transmitir.

Stream llegando a la cuenta del suscriptor con entitlement

Conectar MediaConnect con MediaLive

  • Output #3: MediaConnect Flow (cuenta originator) a un canal de AWS Elemental MediaLive (cuenta originator en la misma región).
  • Canal de AWS Elemental MediaLive: primero, crea un input para el canal de MediaLive.
  • Comienza por la consola del servicio MediaLive. Desde ahí:
  • Ve a Inputs y haz clic en Create input.
  • En Input details, asígnale un nombre descriptivo a tu input.
  • En Input type, selecciona MediaConnect.
  • En la sección MediaConnect flows, configura Input class en SINGLE_INPUT. Después tendrás que elegir tu Flow ARN específico desde la lista desplegable.
  • En Role ARN, selecciona Use existing role y elige tu MediaLiveAccessRole entre las opciones disponibles.
  • Una vez ingresados todos los datos, haz clic en Create para generar el input.

Si quieres saber más sobre Role, Inputs y AWS Elemental MediaLive, échale un vistazo a mi blog sobre MediaLive aquí.

Input de MediaLive 1.1

Input de MediaLive 1.2

  • Crear el canal de MediaLive — En el menú de AWS Elemental MediaLiveChannelsCreate Channel. Ingresa la información general, el Channel name y el rol de IAM.

Canal de MediaLive en originator

  • En la sección Channel template, elige Live event HLS. Channel class → Single Pipeline.

Configuración del canal de MediaLive en originator

  • En Input attachments → haz clic en Add. En Attach input, en Input, elige tu input desde la lista desplegable y confirma.
  • El canal de MediaLive necesita output groups; hay varias opciones. Para esta demo voy a usar HLS con S3 como destino. P. ej., nikhil-medialive-destination. En HLS group destination A, en URL, ingresa la URL de S3 con el siguiente formato. Usa el nombre del bucket de S3 que creaste: s3://nikhil-medialive-destination/live/index.

Configuración de output del canal de MediaLive

  • Crea un canal de MediaLive e inicia tu stream desde OBS. Deberías ver que el stream llega al canal de MediaLive y que se generan archivos en tu bucket de S3. Opcionalmente puedes agregar una distribución de CloudFront sobre la salida HLS y reproducir tu stream con la URL de CloudFront, p. ej., https:///live/index.m3u8.

De MediaConnect a MediaLive

MediaConnect cross-region

  • Output #4: MediaLive (en originator — us-east-1) a MediaConnect (en originator — us-west-2).
  • Primero, crea otro flow de MediaConnect, igual que antes, pero en otra región (p. ej., demoflow-in-originator-us-west-2).

Flow de MediaConnect

  • Si seleccionas la opción de desencriptación, significa que el contenido proveniente del canal de MediaLive (us-east-1) llegará encriptado. (Nota: lo haré así para mostrar la parte de encriptación). Tanto el rol del flow de MediaConnect como el de MediaLive necesitarán acceso a la clave de encriptación/desencriptación. Esa clave se puede guardar en AWS Secret Manager (en us-east-1) y replicarse en la región de destino (Oregon — us-west-2), porque los secretos de AWS son recursos regionales y MediaConnect no los verá a menos que estén replicados.

  • Mi política de ejemplo para el secreto de 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"\
      }\
    }\
  } ]
}
  • Ahora configura el output de MediaConnect (us-west-2) en el canal de MediaLive (us-east-1) editando el canal para terminar el pipeline de medios.
  • Edit channel → Output group (add) → SRT → Confirm.

Output group de MediaLive — SRT

  • Asigna un nombre (p. ej., media-connect-srt-oregon) → Settings.

Configuración del Output SRT Group

  • Agrega la URL SRT con tu endpoint de MediaConnect (us-east-2) y el puerto, en el formato srt://<Inbound IP Address>:<Port>, y selecciona el secreto.

Endpoint SRT

Verificar tus workflows

Una vez configurados los inputs, el siguiente paso clave es iniciar todos los workflows y tu canal de MediaLive. Así te aseguras de que todos los outputs lleguen correctamente a su destino y de que cada pipeline funcione como debe. Como se ve abajo, el pipeline entrega contenido con éxito a todos los endpoints configurados.

Veamos el flujo típico del contenido:

Lado del originador (cuenta de AWS 2111XXXXXXXX):

  • OBS (MAC) envía el stream inicial.
  • Ese stream se enruta al flow de MediaConnect nikhil-demoflow (us-east-1).
  • Desde ahí se entrega a VLC (srt://3.233.7.232:5555) para verificación local.
  • El stream también alimenta al canal de Elemental MediaLive — nikhil-obs-channel (us-east-1).
  • Y también alimenta al flow de MediaConnect — stream-from-account-2111XXXXXXXX-flow (us-east-1) en la cuenta del suscriptor (cuenta de AWS 7227XXXXXXXX).
  • En la cuenta originadora, el stream va del flow de MediaConnect nikhil-demoflow (us-east-1) a nikhil-demoflow-oregon (us-west-2).

Flow de MediaConnect — us-west-2

Workflow del suscriptor

Output #5: pipeline desde el endpoint de MediaConnect en la cuenta del suscriptor hacia un canal de AWS Elemental MediaLive.

Para esto voy a desplegar rápidamente el canal de MediaLive en la cuenta del suscriptor con el Workflow Wizard. Échale un vistazo a mi blog para más detalles sobre el Workflow Wizard.

Ahora, en lugar de un Entitlement (por cuenta), voy a crear un output en el flow de MediaConnect que se usará como input del canal de MediaLive en la cuenta del suscriptor.

Output del flow del suscriptor

  • Crea un input (type: mediaconnect) como antes y despliega el canal de MediaLive.

Workflow del suscriptor — canal de MediaLive

  • Por último, inicia todos los workflows de MediaConnect y los canales de MediaLive, y comienza a transmitir.

Vista previa de MediaPackage

Desde la ingesta hasta la entrega, AWS Elemental MediaConnect es la columna vertebral de workflows de video escalables y de alto rendimiento. Al integrar MediaLive para procesamiento en tiempo real, MediaPackage para empaquetado just-in-time y CloudFront para distribución global —junto con AWS Secrets Manager para guardar y gestionar de forma segura las claves de encriptación—, los broadcasters pueden proteger su contenido y entregarlo sin fricción a endpoints públicos o privados. A medida que evolucionan las exigencias del video en vivo, esta arquitectura muestra cómo AWS Media Services abstrae la complejidad de la infraestructura y deja que los equipos se concentren en innovar en vez de cargar con la operación.

Visualización del pipeline final

Limpieza

Elimina todos los recursos desplegados:

Canales de MediaLive: subscriber-workflow, medialive-channel-in-originator

Flows de MediaConnect: source-demoflow-in-originator-us-east-1, subscriber-flow-from-originator-entitlement, demoflow-in-originator-us-west-2

Secreto de Secret Manager: medialive-secret (quita la replicación del secreto y elimínalo de us-east-1 en la cuenta originadora)

Input de MediaLive: input-for-medialive-originator (creado por separado)

Ya sea que estés armando una plataforma de streaming o explorando las capacidades de medios de AWS, espero que este recorrido te haya servido para simplificar la configuración de los pipelines de MediaConnect y sus distintas integraciones. Desde el diseño de arquitectura cloud hasta la automatización de infraestructura, DoiT International ofrece una experiencia integral para ayudarte a modernizar tu infraestructura cloud. Contáctanos aquí para conocer nuestras soluciones de cloud engineering.