Nel panorama media di oggi, sempre più dinamico, trasportare contenuti video di alta qualità in modo affidabile e sicuro attraverso le reti è diventato indispensabile. Che si tratti di un broadcaster impegnato a trasmettere eventi live a un pubblico globale, di un content creator che distribuisce video premium su piattaforme di streaming o di un'azienda che gestisce le comunicazioni video interne, preservare la qualità del video e garantire al tempo stesso sicurezza e affidabilità può rivelarsi un'impresa tutt'altro che semplice.
È qui che entra in gioco AWS Elemental MediaConnect, una soluzione che cambia le regole del gioco. Si tratta di un servizio cloud che ridefinisce il concetto stesso di trasporto video, offrendo un modo scalabile, sicuro e di altissima qualità per spostare flussi video sulle reti globali. Pensato per semplificare i workflow di streaming, AWS Elemental MediaConnect elimina la complessità e i costi delle infrastrutture tradizionali.
Progettato per prestazioni e resilienza, MediaConnect supporta protocolli sicuri di settore come Zixi, SRT e RIST, per garantire che i contenuti arrivino integri e ai massimi standard qualitativi. Funzionalità come l'ingest flessibile delle sorgenti, gli output ridondanti e la stretta integrazione con gli AWS Media Services (come MediaLive e MediaPackage) permettono ai team di distribuire flussi impeccabili e a bassa latenza, lasciando spazio a ciò che conta davvero: i contenuti, non la pipeline.
AWS Elemental MediaConnect supporta diversi scenari di distribuzione video di alta qualità, tra cui:
- Da on-premises ad AWS: trasporto sicuro del video da encoder di contribuzione (o altre sorgenti on-prem) verso AWS tramite protocolli affidabili come Zixi, SRT o RIST.
- Da AWS a on-premises: distribuzione del video elaborato da AWS verso sedi on-premises per riproduzione, monitoraggio o ulteriore elaborazione.
- Sindacazione cloud-to-cloud: condivisione di contenuti tra regioni AWS o con altre piattaforme cloud per strategie di ridondanza o multi-CDN.
- Distribuzione globale sicura: consegna dei contenuti a utenti finali o partner in tutto il mondo, con cifratura e controlli di accesso integrati.
Grazie alla funzione di entitlement di MediaConnect, i clienti possono ripartire i costi di distribuzione con i propri abbonati o clienti, attivando o disattivando l'entitlement con un semplice clic.

Diagramma architetturale
Configurazione di MediaConnect (ingest)
Configurare un workflow standard di contribuzione cloud in MediaConnect
- Creare il flow nell'account originator: ad esempio source-demoflow-in-originator-us-east-1. Ho aggiunto alcuni template CloudFormation come riferimento, ma mostrerò come creare le diverse pipeline media e collegarle tra loro tramite la console, per renderne più chiara la logica.

Creazione del flow
- Inserire il nome, lasciare la Availability Zone sul valore predefinito, impostare Source type → Standard source, quindi scegliere il Protocol (ad esempio SRT listener).

Creazione del flow MediaConnect
Aggiungere un Allowlist CIDR block per proteggere il flow da utilizzi impropri. Ho inserito il mio indirizzo IP pubblico seguito da /32, insieme al numero di porta, ad esempio 5000. (Range valido: da 1024 a 65535 inclusi, eccetto 2077 e 2088. Caratteri validi: 0–9).
NOTA — Se il flusso è cifrato, è possibile selezionare l'opzione di decrittazione.
La chiave di decrittazione può essere conservata in AWS Secret Manager, dove AWS MediaConnect potrà recuperarla, a patto che il ruolo di MediaConnect disponga dei permessi per leggere il secret.
- Avviare il flow:

source-demoflow-in-originator-us-east-1
- Avviare lo stream: per inviare uno stream SRT al workflow MediaConnect uso OBS Studio. Aprire OBS e preparare lo stream. Selezionare Settings in OBS e poi Stream. Alla voce Server, inserire
srt://<Inbound IP Address>:<Port>. Sostituire Inbound IP Address con l'indirizzo IP in ingresso del flow e Port con il relativo numero di porta. Lasciare vuoto Stream Key. Cliccare OK per chiudere la finestra Settings.

Trasmissione tramite OBS Studio
A questo punto si può avviare lo streaming in OBS per l'ingest sul flow di MediaConnect. Dopo qualche istante la sorgente dovrebbe passare allo stato Connected sotto Source health e dovreste vedere la miniatura del video. Lo stream è arrivato correttamente a MediaConnect, pronto per la distribuzione.

Stream alla sorgente di distribuzione nell'account originator
Creazione degli output
Configurare un workflow standard di distribuzione cloud dall'AWS Originator Account
- Output #1: ad esempio protocollo SRT.
Creiamo ora un output con protocollo SRT nel flow di ingest cloud configurato in precedenza (source-demoflow-in-originator-us-east-1). Lo stream video verrà poi ricevuto e riprodotto su un laptop locale tramite VLC.
- Aggiungere un output nella sezione output del flow MediaConnect (ad esempio output-1-srt-listner-from-source-demoflow-in-originator-us-east-1).

Output #1 — protocollo SRT
- Avviare lo streaming da OBS e verificare in VLC che lo stream arrivi correttamente.

Output — Stato — Connected
- Una volta configurato l'output di MediaConnect, aprire le impostazioni di rete di VLC e inserire
srt://<Inbound IP Address>:Portnell'URL. Sostituire Inbound IP Address e Port con l'indirizzo IP in ingresso del flow, quindi cliccare Open.

VLC riproduce lo stream video tramite protocollo SRT, connesso attraverso il flow di output di MediaConnect
Nota: (opzionale) al momento non è possibile aggiungere tag a un flow MediaConnect tramite template CloudFormation; per aggiungerli sto usando una funzione lambda, ma si può procedere anche da console o 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: concedere un entitlement a un altro account — Gli originator dei contenuti possono concedere entitlement per condividere i propri contenuti con altri account AWS (account subscriber). I subscriber potranno quindi configurare i propri flow di AWS Elemental MediaConnect usando il flow dell'originator come sorgente.

Concessione entitlement 1.1

Concessione entitlement 1.2
Nota — È possibile aggiungere più account in un singolo entitlement tramite "add subscriber".
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
Configurare un workflow standard di distribuzione cloud dall'AWS Subscriber Account
- Creare un flow MediaConnect nell'account subscriber a cui si intende inviare lo stream; in fase di creazione deve essere disponibile l'ARN dell'entitlement.

Flow MediaConnect del subscriber tramite 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
- Avviare entrambi i flow e iniziare lo streaming.

Stream in arrivo nell'account subscriber tramite entitlement
Collegare MediaConnect a MediaLive
- Output #3: dal flow MediaConnect (account originator) a un canale AWS Elemental MediaLive (stesso account originator, stessa regione)
- Canale AWS Elemental MediaLive: per prima cosa, creare un input per il canale MediaLive.
- Iniziare aprendo la console del servizio MediaLive. Da lì:
- Andare in Inputs e cliccare Create input.
- In Input details, assegnare all'input un nome descrittivo.
- Per Input type, selezionare MediaConnect.
- Nella sezione MediaConnect flows, impostare Input class su SINGLE_INPUT. Sarà quindi necessario scegliere il Flow ARN specifico dall'elenco a discesa.
- Per Role ARN, selezionare Use existing role e scegliere MediaLiveAccessRole tra le opzioni disponibili.
- Inseriti tutti i dettagli, cliccare Create per generare l'input.
Per approfondire Role, Inputs e AWS Elemental MediaLive, potete consultare il mio articolo dedicato a MediaLive qui.

Input MediaLive 1.1

Input MediaLive 1.2
- Creare il canale MediaLive — dal menu AWS Elemental MediaLive → Channels → Create Channel. Inserire le informazioni generali, il Channel name e il ruolo IAM.

Canale MediaLive nell'originator
- Nella sezione Channel template, scegliere Live event HLS. Channel class → Single Pipeline.

Impostazioni del canale MediaLive nell'originator
- In Input attachments → cliccare Add. In Attach input, alla voce Input, scegliere il proprio input dall'elenco a discesa e confermare.
- Il canale MediaLive richiede dei gruppi di output: le opzioni sono molteplici. A scopo dimostrativo userò HLS con S3 come destinazione, ad esempio nikhil-medialive-destination. In HLS group destination A, alla voce URL, inserire l'URL S3 nel formato seguente, utilizzando il nome del bucket S3 creato — s3://nikhil-medialive-destination/live/index.

Impostazioni di output del canale MediaLive
- Creare il canale MediaLive e avviare lo stream da OBS. Lo stream dovrebbe arrivare al canale MediaLive e nel bucket S3 verranno generati i file. In via opzionale, è possibile aggiungere una distribution CloudFront sull'output HLS e riprodurre lo stream tramite l'URL di CloudFront, ad esempio https://
/live/index.m3u8.

Da MediaConnect a MediaLive
MediaConnect cross-region
- Output #4: da MediaLive (originator — us-east-1) a MediaConnect (originator — us-west-2)
- Per prima cosa, creare un altro flow MediaConnect, come fatto in precedenza, in una regione diversa (ad esempio demoflow-in-originator-us-west-2).

Flow MediaConnect
- Selezionando l'opzione di decrittazione, il contenuto proveniente dal canale MediaLive (us-east-1) sarà cifrato. (Nota: lo farò proprio per mostrare la parte di cifratura.) Sia il ruolo del flow MediaConnect sia quello di MediaLive dovranno avere accesso alla chiave di cifratura/decrittazione. La chiave di cifratura/decrittazione può essere conservata in AWS Secret Manager (in us-east-1) e replicata nella regione di destinazione (Oregon — us-west-2): i secret di AWS sono infatti risorse regionali e MediaConnect non li vedrà se non replicati.

- Esempio di policy per il secret di 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"\
}\
}\
} ]
}
- A questo punto, configurare l'output MediaConnect (us-west-2) nel canale MediaLive (us-east-1) modificando il canale per completare la pipeline media.
- Edit channel → Output group (add) → SRT → Confirm

Output group MediaLive — SRT
- Assegnare un nome (ad esempio media-connect-srt-oregon) → Settings.

Impostazioni del gruppo di output SRT
- Aggiungere l'URL SRT come endpoint MediaConnect (us-east-2) con la porta nel formato
srt://<Inbound IP Address>:<Port>e selezionare il secret.

Endpoint SRT
Verifica dei workflow
Configurati gli input, il passaggio cruciale successivo è avviare tutti i workflow e il canale MediaLive. È così che ci si assicura che ogni output raggiunga la destinazione prevista e che ogni pipeline funzioni correttamente. Come si vede di seguito, la pipeline distribuisce i contenuti a tutti gli endpoint configurati.
Vediamo nel dettaglio il flusso tipico dei contenuti:
Lato originator (AWS Account 2111XXXXXXXX):
- OBS (MAC) invia lo stream iniziale.
- Lo stream viene instradato verso il flow MediaConnect nikhil-demoflow (us-east-1).
- Da qui arriva a VLC (srt://3.233.7.232:5555) per la verifica locale.
- Lo stream alimenta inoltre il canale Elemental MediaLive — nikhil-obs-channel (us-east-1).
- Lo stream alimenta anche il flow MediaConnect — stream-from-account-2111XXXXXXXX-flow (us-east-1) nell'account subscriber (AWS Account 7227XXXXXXXX).
- Nell'account originator, lo stream va dal flow MediaConnect nikhil-demoflow (us-east-1) a nikhil-demoflow-oregon (us-west-2).

Flow MediaConnect — us-west-2
Workflow del subscriber
Output #5: pipeline dall'endpoint MediaConnect dell'account subscriber al canale AWS Elemental MediaLive
Per questo passaggio, distribuirò rapidamente il canale MediaLive nell'account subscriber tramite il Workflow Wizard. Per maggiori dettagli sul Workflow Wizard, vi rimando al mio articolo dedicato.
Anziché ricorrere a un Entitlement (per account), creerò un output nel flow MediaConnect, che servirà come input per il canale MediaLive nell'account subscriber.

Output del flow del subscriber
- Creare un input (di tipo MediaConnect) come fatto in precedenza e distribuire il canale MediaLive.

Workflow del subscriber — canale MediaLive
- Infine, avviare tutti i workflow MediaConnect e i canali MediaLive e iniziare lo streaming.

Anteprima MediaPackage
Dall'ingest alla delivery, AWS Elemental MediaConnect costituisce la spina dorsale di workflow video scalabili e ad alte prestazioni. Integrando MediaLive per l'elaborazione in tempo reale, MediaPackage per il packaging just-in-time e CloudFront per la distribuzione globale — affiancati da AWS Secrets Manager per archiviare e gestire in sicurezza le chiavi di cifratura — i broadcaster possono proteggere i contenuti e distribuirli senza interruzioni a endpoint pubblici o privati. Con l'evolversi delle esigenze del live video, questa architettura mostra come gli AWS Media Services nascondano la complessità infrastrutturale, permettendo ai team di concentrarsi sull'innovazione anziché sull'overhead operativo.

Visualizzazione finale della pipeline
Pulizia
Eliminare tutte le risorse distribuite,
Canali MediaLive — subscriber-workflow, medialive-channel-in-originator
Flow MediaConnect — source-demoflow-in-originator-us-east-1, subscriber-flow-from-originator-entitlement, demoflow-in-originator-us-west-2
Secret di Secret Manager — medialive-secret (rimuovere la replica del secret ed eliminarlo da us-east-1 nell'account originator)
Input MediaLive — input-for-medialive-originator (creato separatamente)
Che stiate costruendo una piattaforma di streaming o esplorando le funzionalità media di AWS, mi auguro che questa guida vi aiuti a semplificare la configurazione delle pipeline MediaConnect e delle relative integrazioni. Dalla progettazione di architetture cloud all'automazione dell'infrastruttura, DoiT International mette a disposizione una competenza completa per modernizzare la vostra infrastruttura cloud. Contattateci qui per scoprire le nostre soluzioni di cloud engineering.