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>:Porten 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 MediaLive → Channels → Create 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.