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"),
},
},
}),
},
})