Skip to content
v2.276.0

Experimental

@aws-cdk/aws-medialive-alpha is an experimental (alpha) package: its API may change in any release, without a major version bump.

InputLossFailoverProps Struct ​

Properties for an input-loss failover condition.

Example ​

ts
declare const stack: Stack;
declare const primaryInput: medialive.IInput;
declare const secondaryInput: medialive.IInput;
declare const audioSelector: medialive.AudioSelector;
declare const video: medialive.EncodeConfiguration;
declare const audio: medialive.EncodeConfiguration;
declare const bucket: s3.IBucket;

new medialive.Channel(stack, 'Channel', {
  inputs: [{
    input: primaryInput,
    automaticInputFailover: {
      secondaryInput,
      inputPreference: medialive.InputPreference.PRIMARY_INPUT_PREFERRED,
      errorClearTime: Duration.seconds(3),
      failoverConditions: [
        medialive.FailoverCondition.inputLoss({ threshold: Duration.millis(1500) }),
        medialive.FailoverCondition.audioSilence({ audioSelector, threshold: Duration.seconds(2) }),
        medialive.FailoverCondition.videoBlack({ blackDetectThreshold: 0.1, threshold: Duration.seconds(1) }),
      ],
    },
  }, {
    // The secondary input must also be attached to the channel as its own input.
    input: secondaryInput,
  }],
  outputGroups: [
    medialive.OutputGroupConfiguration.hls({
      name: 'hls',
      destinations: [medialive.OutputDestination.toBucket(bucket, 'live/stream')],
      outputs: [{ encodes: [video, audio], outputName: 'hls_out' }],
    }),
  ],
});
python
# stack: Stack
# primary_input: medialive.IInput
# secondary_input: medialive.IInput
# audio_selector: medialive.AudioSelector
# video: medialive.EncodeConfiguration
# audio: medialive.EncodeConfiguration
# bucket: s3.IBucket


medialive.Channel(stack, "Channel",
    inputs=[medialive.InputAttachment(
        input=primary_input,
        automatic_input_failover=medialive.AutomaticInputFailover(
            secondary_input=secondary_input,
            input_preference=medialive.InputPreference.PRIMARY_INPUT_PREFERRED,
            error_clear_time=Duration.seconds(3),
            failover_conditions=[
                medialive.FailoverCondition.input_loss(threshold=Duration.millis(1500)),
                medialive.FailoverCondition.audio_silence(audio_selector=audio_selector, threshold=Duration.seconds(2)),
                medialive.FailoverCondition.video_black(black_detect_threshold=0.1, threshold=Duration.seconds(1))
            ]
        )
    ), medialive.InputAttachment(
        # The secondary input must also be attached to the channel as its own input.
        input=secondary_input
    )],
    output_groups=[
        medialive.OutputGroupConfiguration.hls(
            name="hls",
            destinations=[medialive.OutputDestination.to_bucket(bucket, "live/stream")],
            outputs=[medialive.HlsOutputDefinition(encodes=[video, audio], output_name="hls_out")]
        )
    ]
)
java
Stack stack;
IInput primaryInput;
IInput secondaryInput;
AudioSelector audioSelector;
EncodeConfiguration video;
EncodeConfiguration audio;
IBucket bucket;


Channel.Builder.create(stack, "Channel")
        .inputs(List.of(InputAttachment.builder()
                .input(primaryInput)
                .automaticInputFailover(AutomaticInputFailover.builder()
                        .secondaryInput(secondaryInput)
                        .inputPreference(InputPreference.PRIMARY_INPUT_PREFERRED)
                        .errorClearTime(Duration.seconds(3))
                        .failoverConditions(List.of(FailoverCondition.inputLoss(InputLossFailoverProps.builder().threshold(Duration.millis(1500)).build()), FailoverCondition.audioSilence(AudioSilenceFailoverProps.builder().audioSelector(audioSelector).threshold(Duration.seconds(2)).build()), FailoverCondition.videoBlack(VideoBlackFailoverProps.builder().blackDetectThreshold(0.1).threshold(Duration.seconds(1)).build())))
                        .build())
                .build(), InputAttachment.builder()
                // The secondary input must also be attached to the channel as its own input.
                .input(secondaryInput)
                .build()))
        .outputGroups(List.of(OutputGroupConfiguration.hls(HlsOutputGroupProps.builder()
                .name("hls")
                .destinations(List.of(OutputDestination.toBucket(bucket, "live/stream")))
                .outputs(List.of(HlsOutputDefinition.builder().encodes(List.of(video, audio)).outputName("hls_out").build()))
                .build())))
        .build();
csharp
// Install: dotnet add package Amazon.CDK.AWS.MediaLive.Alpha
Stack stack;
IInput primaryInput;
IInput secondaryInput;
AudioSelector audioSelector;
EncodeConfiguration video;
EncodeConfiguration audio;
IBucket bucket;


new Channel(stack, "Channel", new ChannelProps {
    Inputs = new [] { new InputAttachment {
        Input = primaryInput,
        AutomaticInputFailover = new AutomaticInputFailover {
            SecondaryInput = secondaryInput,
            InputPreference = InputPreference.PRIMARY_INPUT_PREFERRED,
            ErrorClearTime = Duration.Seconds(3),
            FailoverConditions = new [] { FailoverCondition.InputLoss(new InputLossFailoverProps { Threshold = Duration.Millis(1500) }), FailoverCondition.AudioSilence(new AudioSilenceFailoverProps { AudioSelector = audioSelector, Threshold = Duration.Seconds(2) }), FailoverCondition.VideoBlack(new VideoBlackFailoverProps { BlackDetectThreshold = 0.1, Threshold = Duration.Seconds(1) }) }
        }
    }, new InputAttachment {
        // The secondary input must also be attached to the channel as its own input.
        Input = secondaryInput
    } },
    OutputGroups = new [] { OutputGroupConfiguration.Hls(new HlsOutputGroupProps {
        Name = "hls",
        Destinations = new [] { OutputDestination.ToBucket(bucket, "live/stream") },
        Outputs = new [] { new HlsOutputDefinition { Encodes = new [] { video, audio }, OutputName = "hls_out" } }
    }) }
});
go
// Install: go get github.com/aws/aws-cdk-go/awsmedialivealpha/v2
var stack Stack
var primaryInput IInput
var secondaryInput IInput
var audioSelector AudioSelector
var video EncodeConfiguration
var audio EncodeConfiguration
var bucket IBucket


medialive.NewChannel(stack, jsii.String("Channel"), &ChannelProps{
	Inputs: []InputAttachment{
		&InputAttachment{
			Input: primaryInput,
			AutomaticInputFailover: &AutomaticInputFailover{
				SecondaryInput: *SecondaryInput,
				InputPreference: medialive.InputPreference_PRIMARY_INPUT_PREFERRED(),
				ErrorClearTime: awscdk.Duration_Seconds(jsii.Number(3)),
				FailoverConditions: []FailoverCondition{
					medialive.FailoverCondition_InputLoss(&InputLossFailoverProps{
						Threshold: awscdk.Duration_Millis(jsii.Number(1500)),
					}),
					medialive.FailoverCondition_AudioSilence(&AudioSilenceFailoverProps{
						AudioSelector: *AudioSelector,
						Threshold: awscdk.Duration_*Seconds(jsii.Number(2)),
					}),
					medialive.FailoverCondition_VideoBlack(&VideoBlackFailoverProps{
						BlackDetectThreshold: jsii.Number(0.1),
						Threshold: awscdk.Duration_*Seconds(jsii.Number(1)),
					}),
				},
			},
		},
		&InputAttachment{
			// The secondary input must also be attached to the channel as its own input.
			Input: secondaryInput,
		},
	},
	OutputGroups: []OutputGroupConfiguration{
		medialive.OutputGroupConfiguration_Hls(&HlsOutputGroupProps{
			Name: jsii.String("hls"),
			Destinations: []OutputDestination{
				medialive.OutputDestination_ToBucket(bucket, jsii.String("live/stream")),
			},
			Outputs: []HlsOutputDefinition{
				&HlsOutputDefinition{
					Encodes: []EncodeConfiguration{
						video,
						audio,
					},
					OutputName: jsii.String("hls_out"),
				},
			},
		}),
	},
})

Properties ​

thresholdoptionalDurationthresholdoptionalDurationthresholdoptionalDurationThresholdoptionalDurationThresholdoptionalDuration#
The amount of time with no input detected before failover occurs.

Default: MediaLive service default