Skip to content

Commit eedf512

Browse files
committed
fixes pushed from review
1 parent 921cda1 commit eedf512

1 file changed

Lines changed: 165 additions & 28 deletions

File tree

text/0884-aws-elemental-mediaconnect-l2.md

Lines changed: 165 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ const bridge = new CfnBridge(stack, 'Bridge', {
7070
Same Configuration in an example L2:
7171

7272
```ts
73-
const vpcInterface = mediaconnect.VpcInterface.create({
73+
const vpcInterface = mediaconnect.VpcInterface.define({
7474
vpcInterfaceName: 'my-vpc-interface',
7575
role: role,
7676
securityGroups: [securityGroup],
@@ -243,6 +243,7 @@ Property Interface for Flow:
243243
FlowProps {
244244
/**
245245
* Flow Name
246+
* @default - auto-generated
246247
*/
247248
flowName?: string;
248249

@@ -401,30 +402,116 @@ flow.grants.actions(fn, 'mediaconnect:UpdateFlow');
401402

402403
##### Flow Source Types
403404

404-
MediaConnect supports multiple source types for ingesting content into a flow:
405+
MediaConnect supports multiple source types for ingesting content into a flow. The examples below use `NetworkConfiguration.publicNetwork()` for simplicity, but all protocol-based sources can also use `NetworkConfiguration.vpc()` with a VPC interface for private connectivity.
405406

406-
###### SRT Listener Source
407+
###### RTP
408+
409+
RTP (Real-time Transport Protocol) is a standard protocol for delivering audio and video over IP networks.
410+
411+
```ts
412+
new mediaconnect.Flow(stack, 'MyFlow', {
413+
source: mediaconnect.SourceConfiguration.rtp({
414+
flowSourceName: 'rtp-source',
415+
port: 5000,
416+
network: mediaconnect.NetworkConfiguration.publicNetwork('203.0.113.0/24'),
417+
}),
418+
});
419+
```
420+
421+
###### RTP-FEC
422+
423+
RTP with Forward Error Correction adds redundancy to recover lost packets without retransmission. Use this when contributing via RTP and you need packet recovery.
424+
425+
```ts
426+
new mediaconnect.Flow(stack, 'MyFlow', {
427+
source: mediaconnect.SourceConfiguration.rtpFec({
428+
flowSourceName: 'rtp-fec-source',
429+
port: 5000,
430+
network: mediaconnect.NetworkConfiguration.publicNetwork('203.0.113.0/24'),
431+
}),
432+
});
433+
```
434+
435+
###### SRT Listener
436+
437+
SRT (Secure Reliable Transport) in listener mode configures MediaConnect to listen on a specific port for incoming content. The upstream device connects to MediaConnect as a caller.
407438

408439
```ts
409440
new mediaconnect.Flow(stack, 'MyFlow', {
410441
source: mediaconnect.SourceConfiguration.srtListener({
411-
flowSourceName: 'live-encoder-source',
412-
description: 'Live encoder feed',
442+
flowSourceName: 'srt-listener-source',
413443
port: 5000,
414444
minLatency: Duration.millis(2000),
415445
network: mediaconnect.NetworkConfiguration.publicNetwork('203.0.113.0/24'),
416446
}),
417447
});
418448
```
419449

450+
###### SRT Caller
451+
452+
SRT in caller mode configures MediaConnect to connect to a remote SRT listener. Use this when the source device is listening for incoming connections rather than pushing content.
453+
454+
```ts
455+
new mediaconnect.Flow(stack, 'MyFlow', {
456+
source: mediaconnect.SourceConfiguration.srtCaller({
457+
flowSourceName: 'srt-caller-source',
458+
sourceListenerAddress: '198.51.100.10',
459+
sourceListenerPort: 5000,
460+
minLatency: Duration.millis(2000),
461+
network: mediaconnect.NetworkConfiguration.publicNetwork('203.0.113.0/24'),
462+
}),
463+
});
464+
```
465+
466+
###### RIST
467+
468+
RIST (Reliable Internet Stream Transport) provides reliable video transport with packet recovery.
469+
470+
```ts
471+
new mediaconnect.Flow(stack, 'MyFlow', {
472+
source: mediaconnect.SourceConfiguration.rist({
473+
flowSourceName: 'rist-source',
474+
port: 5000,
475+
maxLatency: Duration.millis(2000),
476+
network: mediaconnect.NetworkConfiguration.publicNetwork('203.0.113.0/24'),
477+
}),
478+
});
479+
```
480+
481+
###### Zixi Push
482+
483+
Zixi Push uses the Zixi protocol for reliable video transport. Content is pushed to MediaConnect from a Zixi-compatible component upstream.
484+
485+
```ts
486+
new mediaconnect.Flow(stack, 'MyFlow', {
487+
source: mediaconnect.SourceConfiguration.zixiPush({
488+
flowSourceName: 'zixi-source',
489+
maxLatency: Duration.millis(2000),
490+
network: mediaconnect.NetworkConfiguration.publicNetwork('203.0.113.0/24'),
491+
}),
492+
});
493+
```
494+
495+
###### Router Source
496+
497+
Use a router source when the flow's source comes from a MediaConnect Router rather than a direct connection.
498+
499+
```ts
500+
new mediaconnect.Flow(stack, 'MyFlow', {
501+
source: mediaconnect.SourceConfiguration.router(),
502+
});
503+
```
504+
420505
###### VPC Source
421506

507+
Use a VPC-based source when you need a connection between a flow and your Amazon VPC.
508+
422509
```ts
423510
declare const securityGroup: ec2.ISecurityGroup;
424511
declare const subnet: ec2.ISubnet;
425512
declare const role: iam.IRole;
426513

427-
const vpcInterface = mediaconnect.VpcInterface.create({
514+
const vpcInterface = mediaconnect.VpcInterface.define({
428515
vpcInterfaceName: 'my-vpc-interface',
429516
role: role,
430517
securityGroups: [securityGroup],
@@ -434,7 +521,6 @@ const vpcInterface = mediaconnect.VpcInterface.create({
434521
new mediaconnect.Flow(stack, 'MyFlow', {
435522
source: mediaconnect.SourceConfiguration.rist({
436523
flowSourceName: 'vpc-source',
437-
description: 'VPC-based source',
438524
port: 5000,
439525
maxLatency: Duration.millis(2000),
440526
network: mediaconnect.NetworkConfiguration.vpc(vpcInterface),
@@ -443,10 +529,11 @@ new mediaconnect.Flow(stack, 'MyFlow', {
443529
});
444530
```
445531

446-
###### Entitled Source (From Another AWS Account)
532+
###### Entitled Source
533+
534+
Entitlements allow you to subscribe to content from another AWS account.
447535

448536
```ts
449-
// Import an entitlement from another AWS account
450537
const entitlement = mediaconnect.FlowEntitlement.fromFlowEntitlementArn(
451538
stack, 'ImportedEntitlement',
452539
'arn:aws:mediaconnect:us-west-2:111122223333:entitlement:1-11111111111111111111111111111111:MyEntitlement',
@@ -459,6 +546,32 @@ new mediaconnect.Flow(stack, 'MyFlow', {
459546
});
460547
```
461548

549+
###### Gateway Bridge Source
550+
551+
Use a gateway bridge source when ingesting content from on-premises equipment through a MediaConnect gateway and bridge.
552+
553+
```ts
554+
declare const bridge: mediaconnect.IBridge;
555+
declare const role: iam.IRole;
556+
declare const securityGroup: ec2.ISecurityGroup;
557+
declare const subnet: ec2.ISubnet;
558+
559+
const vpcInterface = mediaconnect.VpcInterface.define({
560+
vpcInterfaceName: 'bridge-interface',
561+
role: role,
562+
securityGroups: [securityGroup],
563+
subnet: subnet,
564+
});
565+
566+
new mediaconnect.Flow(stack, 'MyFlow', {
567+
source: mediaconnect.SourceConfiguration.gatewayBridge({
568+
bridge: bridge,
569+
vpcInterface: vpcInterface,
570+
}),
571+
vpcInterfaces: [vpcInterface],
572+
});
573+
```
574+
462575
#### AWS Elemental MediaConnect Flow Source
463576

464577
A FlowSource (`AWS::MediaConnect::FlowSource`) is a standalone resource used to add secondary
@@ -534,14 +647,14 @@ For further information refer to [our documentation](https://docs.aws.amazon.com
534647

535648
##### Creating VPC Interfaces
536649

537-
VPC interfaces are created using the `VpcInterface.create()` factory method and can be reused across multiple flows and bridges:
650+
VPC interfaces are created using the `VpcInterface.define()` factory method and can be reused across multiple flows and bridges:
538651

539652
```ts
540653
declare const role: iam.IRole;
541654
declare const securityGroup: ec2.ISecurityGroup;
542655
declare const subnet: ec2.ISubnet;
543656

544-
const vpcInterface = mediaconnect.VpcInterface.create({
657+
const vpcInterface = mediaconnect.VpcInterface.define({
545658
vpcInterfaceName: 'my-vpc-interface',
546659
role: role,
547660
securityGroups: [securityGroup],
@@ -559,7 +672,7 @@ declare const securityGroup: ec2.ISecurityGroup;
559672
declare const subnet: ec2.ISubnet;
560673

561674
// ENA (Elastic Network Adapter) - Standard performance
562-
const enaInterface = mediaconnect.VpcInterface.create({
675+
const enaInterface = mediaconnect.VpcInterface.define({
563676
vpcInterfaceName: 'ena-interface',
564677
role: role,
565678
securityGroups: [securityGroup],
@@ -568,7 +681,7 @@ const enaInterface = mediaconnect.VpcInterface.create({
568681
});
569682

570683
// EFA (Elastic Fabric Adapter) - Required for CDI workflows
571-
const efaInterface = mediaconnect.VpcInterface.create({
684+
const efaInterface = mediaconnect.VpcInterface.define({
572685
vpcInterfaceName: 'efa-interface',
573686
role: role,
574687
securityGroups: [securityGroup],
@@ -586,7 +699,7 @@ declare const role: iam.IRole;
586699
declare const securityGroup: ec2.ISecurityGroup;
587700
declare const subnet: ec2.ISubnet;
588701

589-
const vpcInterface = mediaconnect.VpcInterface.create({
702+
const vpcInterface = mediaconnect.VpcInterface.fromNetworkInterfaces({
590703
vpcInterfaceName: 'existing-interface',
591704
role: role,
592705
securityGroups: [securityGroup],
@@ -595,11 +708,6 @@ const vpcInterface = mediaconnect.VpcInterface.create({
595708
});
596709
```
597710

598-
**Note:** You cannot specify both `networkInterfaceType` and
599-
`networkInterfaceIds`. Use `networkInterfaceType` to let MediaConnect
600-
create interfaces automatically, or `networkInterfaceIds` to use
601-
existing interfaces.
602-
603711
##### Using VPC Interfaces with Flows
604712

605713
VPC interfaces enable flows to use VPC-based sources and outputs:
@@ -609,7 +717,7 @@ declare const role: iam.IRole;
609717
declare const securityGroup: ec2.ISecurityGroup;
610718
declare const subnet: ec2.ISubnet;
611719

612-
const vpcInterface = mediaconnect.VpcInterface.create({
720+
const vpcInterface = mediaconnect.VpcInterface.define({
613721
vpcInterfaceName: 'flow-vpc-interface',
614722
role: role,
615723
securityGroups: [securityGroup],
@@ -651,10 +759,13 @@ new mediaconnect.Bridge(stack, 'EgressBridge', {
651759
});
652760
```
653761

654-
Property Interface for VpcInterface:
762+
Property Interfaces for VpcInterface:
655763

656764
```ts
657-
VpcInterfaceProps {
765+
/**
766+
* Props for VpcInterface.define() — creates new network interfaces
767+
*/
768+
VpcInterfaceDefineProps {
658769
/**
659770
* Unique name for the VPC interface
660771
*/
@@ -676,16 +787,40 @@ VpcInterfaceProps {
676787
subnet: ISubnet;
677788

678789
/**
679-
* Pre-created network interface IDs
680-
* @default - MediaConnect creates network interfaces automatically
790+
* Network interface type (ENA or EFA)
791+
* @default NetworkInterface.ENA
681792
*/
682-
networkInterfaceIds?: string[];
793+
networkInterfaceType?: NetworkInterface;
794+
}
683795

796+
/**
797+
* Props for VpcInterface.fromNetworkInterfaces() — uses existing ENIs
798+
*/
799+
VpcInterfaceFromNetworkInterfacesProps {
684800
/**
685-
* Network interface type (ENA or EFA)
686-
* @default - Default network interface type
801+
* Unique name for the VPC interface
687802
*/
688-
networkInterfaceType?: NetworkInterface;
803+
name: string;
804+
805+
/**
806+
* IAM role that MediaConnect assumes to create ENIs in your account
807+
*/
808+
role: IRole;
809+
810+
/**
811+
* Security groups to apply to the ENI
812+
*/
813+
securityGroups: ISecurityGroup[];
814+
815+
/**
816+
* Subnet where the ENI will be created (must be in the same AZ as the flow)
817+
*/
818+
subnet: ISubnet;
819+
820+
/**
821+
* Pre-created network interface IDs
822+
*/
823+
networkInterfaceIds: string[];
689824
}
690825
```
691826

@@ -802,6 +937,7 @@ Property Interface for Gateway:
802937
GatewayProps {
803938
/**
804939
* Gateway Name
940+
* @default - auto-generated
805941
*/
806942
gatewayName?: string;
807943

@@ -853,6 +989,7 @@ Property Interface for Bridge:
853989
BridgeProps {
854990
/**
855991
* Bridge Name
992+
* @default - auto-generated
856993
*/
857994
bridgeName?: string;
858995

0 commit comments

Comments
 (0)