'''
# AWS Elemental MediaLive Construct Library

This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project.

```python
import aws_cdk.aws_medialive as medialive
```

<!--BEGIN CFNONLY DISCLAIMER-->

There are no official hand-written ([L2](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib)) constructs for this service yet. Here are some suggestions on how to proceed:

* Search [Construct Hub for MediaLive construct libraries](https://constructs.dev/search?q=medialive)
* Use the automatically generated [L1](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_l1_using) constructs, in the same way you would use [the CloudFormation AWS::MediaLive resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_MediaLive.html) directly.

<!--BEGIN CFNONLY DISCLAIMER-->

There are no hand-written ([L2](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib)) constructs for this service yet.
However, you can still use the automatically generated [L1](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_l1_using) constructs, and use this service exactly as you would using CloudFormation directly.

For more information on the resources and properties available for this service, see the [CloudFormation documentation for AWS::MediaLive](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_MediaLive.html).

(Read the [CDK Contributing Guide](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and submit an RFC if you are interested in contributing to this construct library.)

<!--END CFNONLY DISCLAIMER-->
'''
import abc
import builtins
import datetime
import enum
import typing

import jsii
import publication
import typing_extensions

from typeguard import check_type

from .._jsii import *

import constructs as _constructs_77d1e7e8
from .. import (
    CfnResource as _CfnResource_9df397a6,
    CfnTag as _CfnTag_f6864754,
    IInspectable as _IInspectable_c2943556,
    IResolvable as _IResolvable_da3f097b,
    ITaggable as _ITaggable_36806126,
    TagManager as _TagManager_0a598cb3,
    TreeInspector as _TreeInspector_488e0dd5,
)


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnChannel(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_medialive.CfnChannel",
):
    '''The AWS::MediaLive::Channel resource is a MediaLive resource type that creates a channel.

    A MediaLive channel ingests and transcodes (decodes and encodes) source content from the inputs that are attached to that channel, and packages the new content into outputs.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html
    :cloudformationResource: AWS::MediaLive::Channel
    :exampleMetadata: fixture=_generated

    Example::

        
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        cdi_input_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.CdiInputSpecificationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        channel_class: typing.Optional[builtins.str] = None,
        destinations: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.OutputDestinationProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        encoder_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.EncoderSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        input_attachments: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.InputAttachmentProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        input_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.InputSpecificationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        log_level: typing.Optional[builtins.str] = None,
        maintenance: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.MaintenanceCreateSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        name: typing.Optional[builtins.str] = None,
        role_arn: typing.Optional[builtins.str] = None,
        tags: typing.Any = None,
        vpc: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.VpcOutputSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param cdi_input_specification: Specification of CDI inputs for this channel.
        :param channel_class: The class for this channel. For a channel with two pipelines, the class is STANDARD. For a channel with one pipeline, the class is SINGLE_PIPELINE.
        :param destinations: The settings that identify the destination for the outputs in this MediaLive output package.
        :param encoder_settings: The encoding configuration for the output content.
        :param input_attachments: The list of input attachments for the channel.
        :param input_specification: The input specification for this channel. It specifies the key characteristics of the inputs for this channel: the maximum bitrate, the resolution, and the codec.
        :param log_level: The verbosity for logging activity for this channel. Charges for logging (which are generated through Amazon CloudWatch Logging) are higher for higher verbosities.
        :param maintenance: Maintenance settings for this channel.
        :param name: A name for this audio selector. The AudioDescription (in an output) references this name in order to identify a specific input audio to include in that output.
        :param role_arn: The IAM role for MediaLive to assume when running this channel. The role is identified by its ARN.
        :param tags: A collection of tags for this channel. Each tag is a key-value pair.
        :param vpc: Settings to enable VPC mode in the channel, so that the endpoints for all outputs are in your VPC.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__0060427de31049849d0b954eb2d8f1219de8b4f8164b94cdfa32d6ef2df38d6f)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnChannelProps(
            cdi_input_specification=cdi_input_specification,
            channel_class=channel_class,
            destinations=destinations,
            encoder_settings=encoder_settings,
            input_attachments=input_attachments,
            input_specification=input_specification,
            log_level=log_level,
            maintenance=maintenance,
            name=name,
            role_arn=role_arn,
            tags=tags,
            vpc=vpc,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__77a53567e403f0822cadccac18299e5972848433b11cc62dd610a87f360b29e7)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__e2253fe8a2d59d3935026cb52637b011dbe3c7c13c56356047e371000df86f09)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrArn")
    def attr_arn(self) -> builtins.str:
        '''The ARN of the MediaLive channel.

        For example: arn:aws:medialive:us-west-1:111122223333:medialive:channel:1234567

        :cloudformationAttribute: Arn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrArn"))

    @builtins.property
    @jsii.member(jsii_name="attrId")
    def attr_id(self) -> builtins.str:
        '''User-specified id.

        This is used in an output group or an output.

        :cloudformationAttribute: Id
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrId"))

    @builtins.property
    @jsii.member(jsii_name="attrInputs")
    def attr_inputs(self) -> typing.List[builtins.str]:
        '''The inputs that are attached to this channel.

        The inputs are identified by their IDs (not by their names or their ARNs).

        :cloudformationAttribute: Inputs
        '''
        return typing.cast(typing.List[builtins.str], jsii.get(self, "attrInputs"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="cdiInputSpecification")
    def cdi_input_specification(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.CdiInputSpecificationProperty"]]:
        '''Specification of CDI inputs for this channel.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.CdiInputSpecificationProperty"]], jsii.get(self, "cdiInputSpecification"))

    @cdi_input_specification.setter
    def cdi_input_specification(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.CdiInputSpecificationProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__f92b60869c3a38d6c288b1f41617590836131c33145b5a07d2348dbb82d37420)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "cdiInputSpecification", value)

    @builtins.property
    @jsii.member(jsii_name="channelClass")
    def channel_class(self) -> typing.Optional[builtins.str]:
        '''The class for this channel.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "channelClass"))

    @channel_class.setter
    def channel_class(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__82667be050483040af27d9bf862af731a2dc4717b3497dbcd0c4f237126bac8e)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "channelClass", value)

    @builtins.property
    @jsii.member(jsii_name="destinations")
    def destinations(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputDestinationProperty"]]]]:
        '''The settings that identify the destination for the outputs in this MediaLive output package.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputDestinationProperty"]]]], jsii.get(self, "destinations"))

    @destinations.setter
    def destinations(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputDestinationProperty"]]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__c2a2554798d3e2b5537f9e6866bbc72a0a8473bbaa576a77c590c04c2e70f553)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "destinations", value)

    @builtins.property
    @jsii.member(jsii_name="encoderSettings")
    def encoder_settings(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.EncoderSettingsProperty"]]:
        '''The encoding configuration for the output content.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.EncoderSettingsProperty"]], jsii.get(self, "encoderSettings"))

    @encoder_settings.setter
    def encoder_settings(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.EncoderSettingsProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__7fdb195a3769eba13c8fa8392bdc7fdb13d178f09f1a3128b22012ff69de3ea8)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "encoderSettings", value)

    @builtins.property
    @jsii.member(jsii_name="inputAttachments")
    def input_attachments(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputAttachmentProperty"]]]]:
        '''The list of input attachments for the channel.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputAttachmentProperty"]]]], jsii.get(self, "inputAttachments"))

    @input_attachments.setter
    def input_attachments(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputAttachmentProperty"]]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__21a00bae3ae031cde82b03663d2a24b4294b4b914a32c0c2f6738dd48830dc30)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "inputAttachments", value)

    @builtins.property
    @jsii.member(jsii_name="inputSpecification")
    def input_specification(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputSpecificationProperty"]]:
        '''The input specification for this channel.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputSpecificationProperty"]], jsii.get(self, "inputSpecification"))

    @input_specification.setter
    def input_specification(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputSpecificationProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__0b5259f36c03529b4fadc479e28da22c834a5bc4672f8081bd809f8353b46ad4)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "inputSpecification", value)

    @builtins.property
    @jsii.member(jsii_name="logLevel")
    def log_level(self) -> typing.Optional[builtins.str]:
        '''The verbosity for logging activity for this channel.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "logLevel"))

    @log_level.setter
    def log_level(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__0fb18d7d630d6ab2d0915e23515972c22653969c3e2ab74e3d5284992dd07c06)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "logLevel", value)

    @builtins.property
    @jsii.member(jsii_name="maintenance")
    def maintenance(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MaintenanceCreateSettingsProperty"]]:
        '''Maintenance settings for this channel.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MaintenanceCreateSettingsProperty"]], jsii.get(self, "maintenance"))

    @maintenance.setter
    def maintenance(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MaintenanceCreateSettingsProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__3468489db4ad9a5131075408b322162aebaf0aa3a8c49b86e5f9c4a94c1ed381)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "maintenance", value)

    @builtins.property
    @jsii.member(jsii_name="name")
    def name(self) -> typing.Optional[builtins.str]:
        '''A name for this audio selector.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "name"))

    @name.setter
    def name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__70ea23804c9eff1d939ba4e0c6cc8df0464ad8f53606a203ad6e5d2c88f275c1)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "name", value)

    @builtins.property
    @jsii.member(jsii_name="roleArn")
    def role_arn(self) -> typing.Optional[builtins.str]:
        '''The IAM role for MediaLive to assume when running this channel.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "roleArn"))

    @role_arn.setter
    def role_arn(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__54b9cee27918938a1be87816364ecf209866f36edaf4395b5de8016df80718f9)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "roleArn", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Any:
        '''A collection of tags for this channel.'''
        return typing.cast(typing.Any, jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Any) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__53063edb939a91b86de1b82e9af65d09af8e01650061a1b1693b7912e6164f14)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @builtins.property
    @jsii.member(jsii_name="vpc")
    def vpc(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.VpcOutputSettingsProperty"]]:
        '''Settings to enable VPC mode in the channel, so that the endpoints for all outputs are in your VPC.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.VpcOutputSettingsProperty"]], jsii.get(self, "vpc"))

    @vpc.setter
    def vpc(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.VpcOutputSettingsProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__eb8444e8ee5815fae672b115515a96cba9b3cf9b7e399608e9a0d229e8c8ad41)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "vpc", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AacSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "bitrate": "bitrate",
            "coding_mode": "codingMode",
            "input_type": "inputType",
            "profile": "profile",
            "rate_control_mode": "rateControlMode",
            "raw_format": "rawFormat",
            "sample_rate": "sampleRate",
            "spec": "spec",
            "vbr_quality": "vbrQuality",
        },
    )
    class AacSettingsProperty:
        def __init__(
            self,
            *,
            bitrate: typing.Optional[jsii.Number] = None,
            coding_mode: typing.Optional[builtins.str] = None,
            input_type: typing.Optional[builtins.str] = None,
            profile: typing.Optional[builtins.str] = None,
            rate_control_mode: typing.Optional[builtins.str] = None,
            raw_format: typing.Optional[builtins.str] = None,
            sample_rate: typing.Optional[jsii.Number] = None,
            spec: typing.Optional[builtins.str] = None,
            vbr_quality: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The settings for an AAC audio encode in the output.

            The parent of this entity is AudioCodecSettings.

            :param bitrate: The average bitrate in bits/second. Valid values depend on the rate control mode and profile.
            :param coding_mode: Mono, stereo, or 5.1 channel layout. Valid values depend on the rate control mode and profile. The adReceiverMix setting receives a stereo description plus control track, and emits a mono AAC encode of the description track, with control data emitted in the PES header as per ETSI TS 101 154 Annex E.
            :param input_type: Set to broadcasterMixedAd when the input contains pre-mixed main audio + AD (narration) as a stereo pair. The Audio Type field (audioType) will be set to 3, which signals to downstream systems that this stream contains broadcaster mixed AD. Note that the input received by the encoder must contain pre-mixed audio; MediaLive does not perform the mixing. The values in audioTypeControl and audioType (in AudioDescription) are ignored when set to broadcasterMixedAd. Leave this set to normal when the input does not contain pre-mixed audio + AD.
            :param profile: The AAC profile.
            :param rate_control_mode: The rate control mode.
            :param raw_format: Sets the LATM/LOAS AAC output for raw containers.
            :param sample_rate: The sample rate in Hz. Valid values depend on the rate control mode and profile.
            :param spec: Uses MPEG-2 AAC audio instead of MPEG-4 AAC audio for raw or MPEG-2 Transport Stream containers.
            :param vbr_quality: The VBR quality level. This is used only if rateControlMode is VBR.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                aac_settings_property = medialive.CfnChannel.AacSettingsProperty(
                    bitrate=123,
                    coding_mode="codingMode",
                    input_type="inputType",
                    profile="profile",
                    rate_control_mode="rateControlMode",
                    raw_format="rawFormat",
                    sample_rate=123,
                    spec="spec",
                    vbr_quality="vbrQuality"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__8e31898723313c2a2b115709d5edef386849980fe358a3b468e4f4e0650aca7e)
                check_type(argname="argument bitrate", value=bitrate, expected_type=type_hints["bitrate"])
                check_type(argname="argument coding_mode", value=coding_mode, expected_type=type_hints["coding_mode"])
                check_type(argname="argument input_type", value=input_type, expected_type=type_hints["input_type"])
                check_type(argname="argument profile", value=profile, expected_type=type_hints["profile"])
                check_type(argname="argument rate_control_mode", value=rate_control_mode, expected_type=type_hints["rate_control_mode"])
                check_type(argname="argument raw_format", value=raw_format, expected_type=type_hints["raw_format"])
                check_type(argname="argument sample_rate", value=sample_rate, expected_type=type_hints["sample_rate"])
                check_type(argname="argument spec", value=spec, expected_type=type_hints["spec"])
                check_type(argname="argument vbr_quality", value=vbr_quality, expected_type=type_hints["vbr_quality"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if bitrate is not None:
                self._values["bitrate"] = bitrate
            if coding_mode is not None:
                self._values["coding_mode"] = coding_mode
            if input_type is not None:
                self._values["input_type"] = input_type
            if profile is not None:
                self._values["profile"] = profile
            if rate_control_mode is not None:
                self._values["rate_control_mode"] = rate_control_mode
            if raw_format is not None:
                self._values["raw_format"] = raw_format
            if sample_rate is not None:
                self._values["sample_rate"] = sample_rate
            if spec is not None:
                self._values["spec"] = spec
            if vbr_quality is not None:
                self._values["vbr_quality"] = vbr_quality

        @builtins.property
        def bitrate(self) -> typing.Optional[jsii.Number]:
            '''The average bitrate in bits/second.

            Valid values depend on the rate control mode and profile.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-bitrate
            '''
            result = self._values.get("bitrate")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def coding_mode(self) -> typing.Optional[builtins.str]:
            '''Mono, stereo, or 5.1 channel layout. Valid values depend on the rate control mode and profile. The adReceiverMix setting receives a stereo description plus control track, and emits a mono AAC encode of the description track, with control data emitted in the PES header as per ETSI TS 101 154 Annex E.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-codingmode
            '''
            result = self._values.get("coding_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def input_type(self) -> typing.Optional[builtins.str]:
            '''Set to broadcasterMixedAd when the input contains pre-mixed main audio + AD (narration) as a stereo pair.

            The Audio Type field (audioType) will be set to 3, which signals to downstream systems that this stream contains broadcaster mixed AD. Note that the input received by the encoder must contain pre-mixed audio; MediaLive does not perform the mixing. The values in audioTypeControl and audioType (in AudioDescription) are ignored when set to broadcasterMixedAd. Leave this set to normal when the input does not contain pre-mixed audio + AD.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-inputtype
            '''
            result = self._values.get("input_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def profile(self) -> typing.Optional[builtins.str]:
            '''The AAC profile.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-profile
            '''
            result = self._values.get("profile")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def rate_control_mode(self) -> typing.Optional[builtins.str]:
            '''The rate control mode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-ratecontrolmode
            '''
            result = self._values.get("rate_control_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def raw_format(self) -> typing.Optional[builtins.str]:
            '''Sets the LATM/LOAS AAC output for raw containers.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-rawformat
            '''
            result = self._values.get("raw_format")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def sample_rate(self) -> typing.Optional[jsii.Number]:
            '''The sample rate in Hz.

            Valid values depend on the rate control mode and profile.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-samplerate
            '''
            result = self._values.get("sample_rate")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def spec(self) -> typing.Optional[builtins.str]:
            '''Uses MPEG-2 AAC audio instead of MPEG-4 AAC audio for raw or MPEG-2 Transport Stream containers.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-spec
            '''
            result = self._values.get("spec")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def vbr_quality(self) -> typing.Optional[builtins.str]:
            '''The VBR quality level.

            This is used only if rateControlMode is VBR.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aacsettings.html#cfn-medialive-channel-aacsettings-vbrquality
            '''
            result = self._values.get("vbr_quality")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AacSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.Ac3SettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "attenuation_control": "attenuationControl",
            "bitrate": "bitrate",
            "bitstream_mode": "bitstreamMode",
            "coding_mode": "codingMode",
            "dialnorm": "dialnorm",
            "drc_profile": "drcProfile",
            "lfe_filter": "lfeFilter",
            "metadata_control": "metadataControl",
        },
    )
    class Ac3SettingsProperty:
        def __init__(
            self,
            *,
            attenuation_control: typing.Optional[builtins.str] = None,
            bitrate: typing.Optional[jsii.Number] = None,
            bitstream_mode: typing.Optional[builtins.str] = None,
            coding_mode: typing.Optional[builtins.str] = None,
            dialnorm: typing.Optional[jsii.Number] = None,
            drc_profile: typing.Optional[builtins.str] = None,
            lfe_filter: typing.Optional[builtins.str] = None,
            metadata_control: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The settings for an AC3 audio encode in the output.

            The parent of this entity is AudioCodecSettings.

            :param attenuation_control: 
            :param bitrate: The average bitrate in bits/second. Valid bitrates depend on the coding mode.
            :param bitstream_mode: Specifies the bitstream mode (bsmod) for the emitted AC-3 stream. For more information about these values, see ATSC A/52-2012.
            :param coding_mode: The Dolby Digital coding mode. This determines the number of channels.
            :param dialnorm: Sets the dialnorm for the output. If excluded and the input audio is Dolby Digital, dialnorm is passed through.
            :param drc_profile: If set to filmStandard, adds dynamic range compression signaling to the output bitstream as defined in the Dolby Digital specification.
            :param lfe_filter: When set to enabled, applies a 120Hz lowpass filter to the LFE channel prior to encoding. This is valid only in codingMode32Lfe mode.
            :param metadata_control: When set to followInput, encoder metadata is sourced from the DD, DD+, or DolbyE decoder that supplies this audio data. If the audio is supplied from one of these streams, the static metadata settings are used.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                ac3_settings_property = medialive.CfnChannel.Ac3SettingsProperty(
                    attenuation_control="attenuationControl",
                    bitrate=123,
                    bitstream_mode="bitstreamMode",
                    coding_mode="codingMode",
                    dialnorm=123,
                    drc_profile="drcProfile",
                    lfe_filter="lfeFilter",
                    metadata_control="metadataControl"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__3438fa867f11ff502b4fa54f1dd5270220ccbbc83de4185add8ae06b3e863348)
                check_type(argname="argument attenuation_control", value=attenuation_control, expected_type=type_hints["attenuation_control"])
                check_type(argname="argument bitrate", value=bitrate, expected_type=type_hints["bitrate"])
                check_type(argname="argument bitstream_mode", value=bitstream_mode, expected_type=type_hints["bitstream_mode"])
                check_type(argname="argument coding_mode", value=coding_mode, expected_type=type_hints["coding_mode"])
                check_type(argname="argument dialnorm", value=dialnorm, expected_type=type_hints["dialnorm"])
                check_type(argname="argument drc_profile", value=drc_profile, expected_type=type_hints["drc_profile"])
                check_type(argname="argument lfe_filter", value=lfe_filter, expected_type=type_hints["lfe_filter"])
                check_type(argname="argument metadata_control", value=metadata_control, expected_type=type_hints["metadata_control"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if attenuation_control is not None:
                self._values["attenuation_control"] = attenuation_control
            if bitrate is not None:
                self._values["bitrate"] = bitrate
            if bitstream_mode is not None:
                self._values["bitstream_mode"] = bitstream_mode
            if coding_mode is not None:
                self._values["coding_mode"] = coding_mode
            if dialnorm is not None:
                self._values["dialnorm"] = dialnorm
            if drc_profile is not None:
                self._values["drc_profile"] = drc_profile
            if lfe_filter is not None:
                self._values["lfe_filter"] = lfe_filter
            if metadata_control is not None:
                self._values["metadata_control"] = metadata_control

        @builtins.property
        def attenuation_control(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-attenuationcontrol
            '''
            result = self._values.get("attenuation_control")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def bitrate(self) -> typing.Optional[jsii.Number]:
            '''The average bitrate in bits/second.

            Valid bitrates depend on the coding mode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-bitrate
            '''
            result = self._values.get("bitrate")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def bitstream_mode(self) -> typing.Optional[builtins.str]:
            '''Specifies the bitstream mode (bsmod) for the emitted AC-3 stream.

            For more information about these values, see ATSC A/52-2012.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-bitstreammode
            '''
            result = self._values.get("bitstream_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def coding_mode(self) -> typing.Optional[builtins.str]:
            '''The Dolby Digital coding mode.

            This determines the number of channels.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-codingmode
            '''
            result = self._values.get("coding_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def dialnorm(self) -> typing.Optional[jsii.Number]:
            '''Sets the dialnorm for the output.

            If excluded and the input audio is Dolby Digital, dialnorm is passed through.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-dialnorm
            '''
            result = self._values.get("dialnorm")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def drc_profile(self) -> typing.Optional[builtins.str]:
            '''If set to filmStandard, adds dynamic range compression signaling to the output bitstream as defined in the Dolby Digital specification.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-drcprofile
            '''
            result = self._values.get("drc_profile")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def lfe_filter(self) -> typing.Optional[builtins.str]:
            '''When set to enabled, applies a 120Hz lowpass filter to the LFE channel prior to encoding.

            This is valid only in codingMode32Lfe mode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-lfefilter
            '''
            result = self._values.get("lfe_filter")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def metadata_control(self) -> typing.Optional[builtins.str]:
            '''When set to followInput, encoder metadata is sourced from the DD, DD+, or DolbyE decoder that supplies this audio data.

            If the audio is supplied from one of these streams, the static metadata settings are used.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ac3settings.html#cfn-medialive-channel-ac3settings-metadatacontrol
            '''
            result = self._values.get("metadata_control")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "Ac3SettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AncillarySourceSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "source_ancillary_channel_number": "sourceAncillaryChannelNumber",
        },
    )
    class AncillarySourceSettingsProperty:
        def __init__(
            self,
            *,
            source_ancillary_channel_number: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Information about the ancillary captions to extract from the input.

            The parent of this entity is CaptionSelectorSettings.

            :param source_ancillary_channel_number: Specifies the number (1 to 4) of the captions channel you want to extract from the ancillary captions. If you plan to convert the ancillary captions to another format, complete this field. If you plan to choose Embedded as the captions destination in the output (to pass through all the channels in the ancillary captions), leave this field blank because MediaLive ignores the field.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ancillarysourcesettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                ancillary_source_settings_property = medialive.CfnChannel.AncillarySourceSettingsProperty(
                    source_ancillary_channel_number=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__8192630f40f6883538117cc4351df30d49295a7620ea561657270b4feacaf984)
                check_type(argname="argument source_ancillary_channel_number", value=source_ancillary_channel_number, expected_type=type_hints["source_ancillary_channel_number"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if source_ancillary_channel_number is not None:
                self._values["source_ancillary_channel_number"] = source_ancillary_channel_number

        @builtins.property
        def source_ancillary_channel_number(self) -> typing.Optional[jsii.Number]:
            '''Specifies the number (1 to 4) of the captions channel you want to extract from the ancillary captions.

            If you plan to convert the ancillary captions to another format, complete this field. If you plan to choose Embedded as the captions destination in the output (to pass through all the channels in the ancillary captions), leave this field blank because MediaLive ignores the field.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ancillarysourcesettings.html#cfn-medialive-channel-ancillarysourcesettings-sourceancillarychannelnumber
            '''
            result = self._values.get("source_ancillary_channel_number")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AncillarySourceSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.ArchiveCdnSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"archive_s3_settings": "archiveS3Settings"},
    )
    class ArchiveCdnSettingsProperty:
        def __init__(
            self,
            *,
            archive_s3_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.ArchiveS3SettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Settings to configure the destination of an Archive output.

            The parent of this entity is ArchiveGroupSettings.

            :param archive_s3_settings: Sets up Amazon S3 as the destination for this Archive output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivecdnsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                archive_cdn_settings_property = medialive.CfnChannel.ArchiveCdnSettingsProperty(
                    archive_s3_settings=medialive.CfnChannel.ArchiveS3SettingsProperty(
                        canned_acl="cannedAcl"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__444596e4c19acefc51bb76250ff228ae64e367eff9a08d2adec73cf04a714acb)
                check_type(argname="argument archive_s3_settings", value=archive_s3_settings, expected_type=type_hints["archive_s3_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if archive_s3_settings is not None:
                self._values["archive_s3_settings"] = archive_s3_settings

        @builtins.property
        def archive_s3_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.ArchiveS3SettingsProperty"]]:
            '''Sets up Amazon S3 as the destination for this Archive output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivecdnsettings.html#cfn-medialive-channel-archivecdnsettings-archives3settings
            '''
            result = self._values.get("archive_s3_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.ArchiveS3SettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ArchiveCdnSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.ArchiveContainerSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"m2_ts_settings": "m2TsSettings", "raw_settings": "rawSettings"},
    )
    class ArchiveContainerSettingsProperty:
        def __init__(
            self,
            *,
            m2_ts_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.M2tsSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            raw_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.RawSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The archive container settings.

            The parent of this entity is ArchiveOutputSettings.

            :param m2_ts_settings: The settings for the M2TS in the archive output.
            :param raw_settings: The settings for Raw archive output type.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivecontainersettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                archive_container_settings_property = medialive.CfnChannel.ArchiveContainerSettingsProperty(
                    m2_ts_settings=medialive.CfnChannel.M2tsSettingsProperty(
                        absent_input_audio_behavior="absentInputAudioBehavior",
                        arib="arib",
                        arib_captions_pid="aribCaptionsPid",
                        arib_captions_pid_control="aribCaptionsPidControl",
                        audio_buffer_model="audioBufferModel",
                        audio_frames_per_pes=123,
                        audio_pids="audioPids",
                        audio_stream_type="audioStreamType",
                        bitrate=123,
                        buffer_model="bufferModel",
                        cc_descriptor="ccDescriptor",
                        dvb_nit_settings=medialive.CfnChannel.DvbNitSettingsProperty(
                            network_id=123,
                            network_name="networkName",
                            rep_interval=123
                        ),
                        dvb_sdt_settings=medialive.CfnChannel.DvbSdtSettingsProperty(
                            output_sdt="outputSdt",
                            rep_interval=123,
                            service_name="serviceName",
                            service_provider_name="serviceProviderName"
                        ),
                        dvb_sub_pids="dvbSubPids",
                        dvb_tdt_settings=medialive.CfnChannel.DvbTdtSettingsProperty(
                            rep_interval=123
                        ),
                        dvb_teletext_pid="dvbTeletextPid",
                        ebif="ebif",
                        ebp_audio_interval="ebpAudioInterval",
                        ebp_lookahead_ms=123,
                        ebp_placement="ebpPlacement",
                        ecm_pid="ecmPid",
                        es_rate_in_pes="esRateInPes",
                        etv_platform_pid="etvPlatformPid",
                        etv_signal_pid="etvSignalPid",
                        fragment_time=123,
                        klv="klv",
                        klv_data_pids="klvDataPids",
                        nielsen_id3_behavior="nielsenId3Behavior",
                        null_packet_bitrate=123,
                        pat_interval=123,
                        pcr_control="pcrControl",
                        pcr_period=123,
                        pcr_pid="pcrPid",
                        pmt_interval=123,
                        pmt_pid="pmtPid",
                        program_num=123,
                        rate_mode="rateMode",
                        scte27_pids="scte27Pids",
                        scte35_control="scte35Control",
                        scte35_pid="scte35Pid",
                        scte35_preroll_pullup_milliseconds=123,
                        segmentation_markers="segmentationMarkers",
                        segmentation_style="segmentationStyle",
                        segmentation_time=123,
                        timed_metadata_behavior="timedMetadataBehavior",
                        timed_metadata_pid="timedMetadataPid",
                        transport_stream_id=123,
                        video_pid="videoPid"
                    ),
                    raw_settings=medialive.CfnChannel.RawSettingsProperty()
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__bd0f18f9ca33488c4dcb09ae97e5ef98b5e7de7c3f57f2b853567c7f72d05f8d)
                check_type(argname="argument m2_ts_settings", value=m2_ts_settings, expected_type=type_hints["m2_ts_settings"])
                check_type(argname="argument raw_settings", value=raw_settings, expected_type=type_hints["raw_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if m2_ts_settings is not None:
                self._values["m2_ts_settings"] = m2_ts_settings
            if raw_settings is not None:
                self._values["raw_settings"] = raw_settings

        @builtins.property
        def m2_ts_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.M2tsSettingsProperty"]]:
            '''The settings for the M2TS in the archive output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivecontainersettings.html#cfn-medialive-channel-archivecontainersettings-m2tssettings
            '''
            result = self._values.get("m2_ts_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.M2tsSettingsProperty"]], result)

        @builtins.property
        def raw_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.RawSettingsProperty"]]:
            '''The settings for Raw archive output type.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivecontainersettings.html#cfn-medialive-channel-archivecontainersettings-rawsettings
            '''
            result = self._values.get("raw_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.RawSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ArchiveContainerSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.ArchiveGroupSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "archive_cdn_settings": "archiveCdnSettings",
            "destination": "destination",
            "rollover_interval": "rolloverInterval",
        },
    )
    class ArchiveGroupSettingsProperty:
        def __init__(
            self,
            *,
            archive_cdn_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.ArchiveCdnSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            destination: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.OutputLocationRefProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            rollover_interval: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The settings for an archive output group.

            The parent of this entity is OutputGroupSettings.

            :param archive_cdn_settings: Settings to configure the destination of an Archive output.
            :param destination: A directory and base file name where archive files should be written.
            :param rollover_interval: The number of seconds to write to an archive file before closing and starting a new one.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivegroupsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                archive_group_settings_property = medialive.CfnChannel.ArchiveGroupSettingsProperty(
                    archive_cdn_settings=medialive.CfnChannel.ArchiveCdnSettingsProperty(
                        archive_s3_settings=medialive.CfnChannel.ArchiveS3SettingsProperty(
                            canned_acl="cannedAcl"
                        )
                    ),
                    destination=medialive.CfnChannel.OutputLocationRefProperty(
                        destination_ref_id="destinationRefId"
                    ),
                    rollover_interval=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__de5308594b87080b5a575eb34202d543eb467e24c13fb098e67bb77d967d7e84)
                check_type(argname="argument archive_cdn_settings", value=archive_cdn_settings, expected_type=type_hints["archive_cdn_settings"])
                check_type(argname="argument destination", value=destination, expected_type=type_hints["destination"])
                check_type(argname="argument rollover_interval", value=rollover_interval, expected_type=type_hints["rollover_interval"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if archive_cdn_settings is not None:
                self._values["archive_cdn_settings"] = archive_cdn_settings
            if destination is not None:
                self._values["destination"] = destination
            if rollover_interval is not None:
                self._values["rollover_interval"] = rollover_interval

        @builtins.property
        def archive_cdn_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.ArchiveCdnSettingsProperty"]]:
            '''Settings to configure the destination of an Archive output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivegroupsettings.html#cfn-medialive-channel-archivegroupsettings-archivecdnsettings
            '''
            result = self._values.get("archive_cdn_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.ArchiveCdnSettingsProperty"]], result)

        @builtins.property
        def destination(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputLocationRefProperty"]]:
            '''A directory and base file name where archive files should be written.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivegroupsettings.html#cfn-medialive-channel-archivegroupsettings-destination
            '''
            result = self._values.get("destination")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputLocationRefProperty"]], result)

        @builtins.property
        def rollover_interval(self) -> typing.Optional[jsii.Number]:
            '''The number of seconds to write to an archive file before closing and starting a new one.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archivegroupsettings.html#cfn-medialive-channel-archivegroupsettings-rolloverinterval
            '''
            result = self._values.get("rollover_interval")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ArchiveGroupSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.ArchiveOutputSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "container_settings": "containerSettings",
            "extension": "extension",
            "name_modifier": "nameModifier",
        },
    )
    class ArchiveOutputSettingsProperty:
        def __init__(
            self,
            *,
            container_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.ArchiveContainerSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            extension: typing.Optional[builtins.str] = None,
            name_modifier: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The archive output settings.

            The parent of this entity is OutputSettings.

            :param container_settings: The settings that are specific to the container type of the file.
            :param extension: The output file extension. If excluded, this is auto-selected from the container type.
            :param name_modifier: A string that is concatenated to the end of the destination file name. The string is required for multiple outputs of the same type.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archiveoutputsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                archive_output_settings_property = medialive.CfnChannel.ArchiveOutputSettingsProperty(
                    container_settings=medialive.CfnChannel.ArchiveContainerSettingsProperty(
                        m2_ts_settings=medialive.CfnChannel.M2tsSettingsProperty(
                            absent_input_audio_behavior="absentInputAudioBehavior",
                            arib="arib",
                            arib_captions_pid="aribCaptionsPid",
                            arib_captions_pid_control="aribCaptionsPidControl",
                            audio_buffer_model="audioBufferModel",
                            audio_frames_per_pes=123,
                            audio_pids="audioPids",
                            audio_stream_type="audioStreamType",
                            bitrate=123,
                            buffer_model="bufferModel",
                            cc_descriptor="ccDescriptor",
                            dvb_nit_settings=medialive.CfnChannel.DvbNitSettingsProperty(
                                network_id=123,
                                network_name="networkName",
                                rep_interval=123
                            ),
                            dvb_sdt_settings=medialive.CfnChannel.DvbSdtSettingsProperty(
                                output_sdt="outputSdt",
                                rep_interval=123,
                                service_name="serviceName",
                                service_provider_name="serviceProviderName"
                            ),
                            dvb_sub_pids="dvbSubPids",
                            dvb_tdt_settings=medialive.CfnChannel.DvbTdtSettingsProperty(
                                rep_interval=123
                            ),
                            dvb_teletext_pid="dvbTeletextPid",
                            ebif="ebif",
                            ebp_audio_interval="ebpAudioInterval",
                            ebp_lookahead_ms=123,
                            ebp_placement="ebpPlacement",
                            ecm_pid="ecmPid",
                            es_rate_in_pes="esRateInPes",
                            etv_platform_pid="etvPlatformPid",
                            etv_signal_pid="etvSignalPid",
                            fragment_time=123,
                            klv="klv",
                            klv_data_pids="klvDataPids",
                            nielsen_id3_behavior="nielsenId3Behavior",
                            null_packet_bitrate=123,
                            pat_interval=123,
                            pcr_control="pcrControl",
                            pcr_period=123,
                            pcr_pid="pcrPid",
                            pmt_interval=123,
                            pmt_pid="pmtPid",
                            program_num=123,
                            rate_mode="rateMode",
                            scte27_pids="scte27Pids",
                            scte35_control="scte35Control",
                            scte35_pid="scte35Pid",
                            scte35_preroll_pullup_milliseconds=123,
                            segmentation_markers="segmentationMarkers",
                            segmentation_style="segmentationStyle",
                            segmentation_time=123,
                            timed_metadata_behavior="timedMetadataBehavior",
                            timed_metadata_pid="timedMetadataPid",
                            transport_stream_id=123,
                            video_pid="videoPid"
                        ),
                        raw_settings=medialive.CfnChannel.RawSettingsProperty()
                    ),
                    extension="extension",
                    name_modifier="nameModifier"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__4144df375bfb1ccec206195b771b803ce7569b586415cd7514815fc36a0a80cf)
                check_type(argname="argument container_settings", value=container_settings, expected_type=type_hints["container_settings"])
                check_type(argname="argument extension", value=extension, expected_type=type_hints["extension"])
                check_type(argname="argument name_modifier", value=name_modifier, expected_type=type_hints["name_modifier"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if container_settings is not None:
                self._values["container_settings"] = container_settings
            if extension is not None:
                self._values["extension"] = extension
            if name_modifier is not None:
                self._values["name_modifier"] = name_modifier

        @builtins.property
        def container_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.ArchiveContainerSettingsProperty"]]:
            '''The settings that are specific to the container type of the file.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archiveoutputsettings.html#cfn-medialive-channel-archiveoutputsettings-containersettings
            '''
            result = self._values.get("container_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.ArchiveContainerSettingsProperty"]], result)

        @builtins.property
        def extension(self) -> typing.Optional[builtins.str]:
            '''The output file extension.

            If excluded, this is auto-selected from the container type.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archiveoutputsettings.html#cfn-medialive-channel-archiveoutputsettings-extension
            '''
            result = self._values.get("extension")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def name_modifier(self) -> typing.Optional[builtins.str]:
            '''A string that is concatenated to the end of the destination file name.

            The string is required for multiple outputs of the same type.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archiveoutputsettings.html#cfn-medialive-channel-archiveoutputsettings-namemodifier
            '''
            result = self._values.get("name_modifier")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ArchiveOutputSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.ArchiveS3SettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"canned_acl": "cannedAcl"},
    )
    class ArchiveS3SettingsProperty:
        def __init__(self, *, canned_acl: typing.Optional[builtins.str] = None) -> None:
            '''Sets up Amazon S3 as the destination for this Archive output.

            The parent of this entity is ArchiveCdnSettings.

            :param canned_acl: Specify the canned ACL to apply to each S3 request. Defaults to none.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archives3settings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                archive_s3_settings_property = medialive.CfnChannel.ArchiveS3SettingsProperty(
                    canned_acl="cannedAcl"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__dc499a6fb83dfccec9312e061f4c6fb0333201c210c2971a3b8d9d50dbfb5c9d)
                check_type(argname="argument canned_acl", value=canned_acl, expected_type=type_hints["canned_acl"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if canned_acl is not None:
                self._values["canned_acl"] = canned_acl

        @builtins.property
        def canned_acl(self) -> typing.Optional[builtins.str]:
            '''Specify the canned ACL to apply to each S3 request.

            Defaults to none.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-archives3settings.html#cfn-medialive-channel-archives3settings-cannedacl
            '''
            result = self._values.get("canned_acl")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ArchiveS3SettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AribDestinationSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={},
    )
    class AribDestinationSettingsProperty:
        def __init__(self) -> None:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aribdestinationsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                arib_destination_settings_property = medialive.CfnChannel.AribDestinationSettingsProperty()
            '''
            self._values: typing.Dict[builtins.str, typing.Any] = {}

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AribDestinationSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AribSourceSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={},
    )
    class AribSourceSettingsProperty:
        def __init__(self) -> None:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-aribsourcesettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                arib_source_settings_property = medialive.CfnChannel.AribSourceSettingsProperty()
            '''
            self._values: typing.Dict[builtins.str, typing.Any] = {}

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AribSourceSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AudioChannelMappingProperty",
        jsii_struct_bases=[],
        name_mapping={
            "input_channel_levels": "inputChannelLevels",
            "output_channel": "outputChannel",
        },
    )
    class AudioChannelMappingProperty:
        def __init__(
            self,
            *,
            input_channel_levels: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.InputChannelLevelProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            output_channel: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The settings for remixing audio.

            The parent of this entity is RemixSettings.

            :param input_channel_levels: The indices and gain values for each input channel that should be remixed into this output channel.
            :param output_channel: The index of the output channel that is being produced.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiochannelmapping.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                audio_channel_mapping_property = medialive.CfnChannel.AudioChannelMappingProperty(
                    input_channel_levels=[medialive.CfnChannel.InputChannelLevelProperty(
                        gain=123,
                        input_channel=123
                    )],
                    output_channel=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__5622ba1006ba21c7ad05a917ad3e5d9dae24c8ce2b760da2f8a373854fdb43f0)
                check_type(argname="argument input_channel_levels", value=input_channel_levels, expected_type=type_hints["input_channel_levels"])
                check_type(argname="argument output_channel", value=output_channel, expected_type=type_hints["output_channel"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if input_channel_levels is not None:
                self._values["input_channel_levels"] = input_channel_levels
            if output_channel is not None:
                self._values["output_channel"] = output_channel

        @builtins.property
        def input_channel_levels(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputChannelLevelProperty"]]]]:
            '''The indices and gain values for each input channel that should be remixed into this output channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiochannelmapping.html#cfn-medialive-channel-audiochannelmapping-inputchannellevels
            '''
            result = self._values.get("input_channel_levels")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputChannelLevelProperty"]]]], result)

        @builtins.property
        def output_channel(self) -> typing.Optional[jsii.Number]:
            '''The index of the output channel that is being produced.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiochannelmapping.html#cfn-medialive-channel-audiochannelmapping-outputchannel
            '''
            result = self._values.get("output_channel")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AudioChannelMappingProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AudioCodecSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "aac_settings": "aacSettings",
            "ac3_settings": "ac3Settings",
            "eac3_atmos_settings": "eac3AtmosSettings",
            "eac3_settings": "eac3Settings",
            "mp2_settings": "mp2Settings",
            "pass_through_settings": "passThroughSettings",
            "wav_settings": "wavSettings",
        },
    )
    class AudioCodecSettingsProperty:
        def __init__(
            self,
            *,
            aac_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AacSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            ac3_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.Ac3SettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            eac3_atmos_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.Eac3AtmosSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            eac3_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.Eac3SettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            mp2_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.Mp2SettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            pass_through_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.PassThroughSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            wav_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.WavSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The configuration of the audio codec in the audio output.

            The parent of this entity is AudioDescription.

            :param aac_settings: The setup of the AAC audio codec in the output.
            :param ac3_settings: The setup of an AC3 audio codec in the output.
            :param eac3_atmos_settings: 
            :param eac3_settings: The setup of an EAC3 audio codec in the output.
            :param mp2_settings: The setup of an MP2 audio codec in the output.
            :param pass_through_settings: The setup to pass through the Dolby audio codec to the output.
            :param wav_settings: Settings for audio encoded with the WAV codec.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                audio_codec_settings_property = medialive.CfnChannel.AudioCodecSettingsProperty(
                    aac_settings=medialive.CfnChannel.AacSettingsProperty(
                        bitrate=123,
                        coding_mode="codingMode",
                        input_type="inputType",
                        profile="profile",
                        rate_control_mode="rateControlMode",
                        raw_format="rawFormat",
                        sample_rate=123,
                        spec="spec",
                        vbr_quality="vbrQuality"
                    ),
                    ac3_settings=medialive.CfnChannel.Ac3SettingsProperty(
                        attenuation_control="attenuationControl",
                        bitrate=123,
                        bitstream_mode="bitstreamMode",
                        coding_mode="codingMode",
                        dialnorm=123,
                        drc_profile="drcProfile",
                        lfe_filter="lfeFilter",
                        metadata_control="metadataControl"
                    ),
                    eac3_atmos_settings=medialive.CfnChannel.Eac3AtmosSettingsProperty(
                        bitrate=123,
                        coding_mode="codingMode",
                        dialnorm=123,
                        drc_line="drcLine",
                        drc_rf="drcRf",
                        height_trim=123,
                        surround_trim=123
                    ),
                    eac3_settings=medialive.CfnChannel.Eac3SettingsProperty(
                        attenuation_control="attenuationControl",
                        bitrate=123,
                        bitstream_mode="bitstreamMode",
                        coding_mode="codingMode",
                        dc_filter="dcFilter",
                        dialnorm=123,
                        drc_line="drcLine",
                        drc_rf="drcRf",
                        lfe_control="lfeControl",
                        lfe_filter="lfeFilter",
                        lo_ro_center_mix_level=123,
                        lo_ro_surround_mix_level=123,
                        lt_rt_center_mix_level=123,
                        lt_rt_surround_mix_level=123,
                        metadata_control="metadataControl",
                        passthrough_control="passthroughControl",
                        phase_control="phaseControl",
                        stereo_downmix="stereoDownmix",
                        surround_ex_mode="surroundExMode",
                        surround_mode="surroundMode"
                    ),
                    mp2_settings=medialive.CfnChannel.Mp2SettingsProperty(
                        bitrate=123,
                        coding_mode="codingMode",
                        sample_rate=123
                    ),
                    pass_through_settings=medialive.CfnChannel.PassThroughSettingsProperty(),
                    wav_settings=medialive.CfnChannel.WavSettingsProperty(
                        bit_depth=123,
                        coding_mode="codingMode",
                        sample_rate=123
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__818b64750c74718f495f603e3d4f93a619c505c97fc690e547616ab20e455a2b)
                check_type(argname="argument aac_settings", value=aac_settings, expected_type=type_hints["aac_settings"])
                check_type(argname="argument ac3_settings", value=ac3_settings, expected_type=type_hints["ac3_settings"])
                check_type(argname="argument eac3_atmos_settings", value=eac3_atmos_settings, expected_type=type_hints["eac3_atmos_settings"])
                check_type(argname="argument eac3_settings", value=eac3_settings, expected_type=type_hints["eac3_settings"])
                check_type(argname="argument mp2_settings", value=mp2_settings, expected_type=type_hints["mp2_settings"])
                check_type(argname="argument pass_through_settings", value=pass_through_settings, expected_type=type_hints["pass_through_settings"])
                check_type(argname="argument wav_settings", value=wav_settings, expected_type=type_hints["wav_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if aac_settings is not None:
                self._values["aac_settings"] = aac_settings
            if ac3_settings is not None:
                self._values["ac3_settings"] = ac3_settings
            if eac3_atmos_settings is not None:
                self._values["eac3_atmos_settings"] = eac3_atmos_settings
            if eac3_settings is not None:
                self._values["eac3_settings"] = eac3_settings
            if mp2_settings is not None:
                self._values["mp2_settings"] = mp2_settings
            if pass_through_settings is not None:
                self._values["pass_through_settings"] = pass_through_settings
            if wav_settings is not None:
                self._values["wav_settings"] = wav_settings

        @builtins.property
        def aac_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AacSettingsProperty"]]:
            '''The setup of the AAC audio codec in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-aacsettings
            '''
            result = self._values.get("aac_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AacSettingsProperty"]], result)

        @builtins.property
        def ac3_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Ac3SettingsProperty"]]:
            '''The setup of an AC3 audio codec in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-ac3settings
            '''
            result = self._values.get("ac3_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Ac3SettingsProperty"]], result)

        @builtins.property
        def eac3_atmos_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Eac3AtmosSettingsProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-eac3atmossettings
            '''
            result = self._values.get("eac3_atmos_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Eac3AtmosSettingsProperty"]], result)

        @builtins.property
        def eac3_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Eac3SettingsProperty"]]:
            '''The setup of an EAC3 audio codec in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-eac3settings
            '''
            result = self._values.get("eac3_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Eac3SettingsProperty"]], result)

        @builtins.property
        def mp2_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Mp2SettingsProperty"]]:
            '''The setup of an MP2 audio codec in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-mp2settings
            '''
            result = self._values.get("mp2_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Mp2SettingsProperty"]], result)

        @builtins.property
        def pass_through_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.PassThroughSettingsProperty"]]:
            '''The setup to pass through the Dolby audio codec to the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-passthroughsettings
            '''
            result = self._values.get("pass_through_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.PassThroughSettingsProperty"]], result)

        @builtins.property
        def wav_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.WavSettingsProperty"]]:
            '''Settings for audio encoded with the WAV codec.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiocodecsettings.html#cfn-medialive-channel-audiocodecsettings-wavsettings
            '''
            result = self._values.get("wav_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.WavSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AudioCodecSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AudioDescriptionProperty",
        jsii_struct_bases=[],
        name_mapping={
            "audio_normalization_settings": "audioNormalizationSettings",
            "audio_selector_name": "audioSelectorName",
            "audio_type": "audioType",
            "audio_type_control": "audioTypeControl",
            "audio_watermarking_settings": "audioWatermarkingSettings",
            "codec_settings": "codecSettings",
            "language_code": "languageCode",
            "language_code_control": "languageCodeControl",
            "name": "name",
            "remix_settings": "remixSettings",
            "stream_name": "streamName",
        },
    )
    class AudioDescriptionProperty:
        def __init__(
            self,
            *,
            audio_normalization_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AudioNormalizationSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            audio_selector_name: typing.Optional[builtins.str] = None,
            audio_type: typing.Optional[builtins.str] = None,
            audio_type_control: typing.Optional[builtins.str] = None,
            audio_watermarking_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AudioWatermarkSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            codec_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AudioCodecSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            language_code: typing.Optional[builtins.str] = None,
            language_code_control: typing.Optional[builtins.str] = None,
            name: typing.Optional[builtins.str] = None,
            remix_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.RemixSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            stream_name: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The encoding information for one output audio.

            The parent of this entity is EncoderSettings.

            :param audio_normalization_settings: The advanced audio normalization settings.
            :param audio_selector_name: The name of the AudioSelector that is used as the source for this AudioDescription.
            :param audio_type: Applies only if audioTypeControl is useConfigured. The values for audioType are defined in ISO-IEC 13818-1.
            :param audio_type_control: Determines how audio type is determined. followInput: If the input contains an ISO 639 audioType, then that value is passed through to the output. If the input contains no ISO 639 audioType, the value in Audio Type is included in the output. useConfigured: The value in Audio Type is included in the output. Note that this field and audioType are both ignored if inputType is broadcasterMixedAd.
            :param audio_watermarking_settings: Settings to configure one or more solutions that insert audio watermarks in the audio encode.
            :param codec_settings: The audio codec settings.
            :param language_code: Indicates the language of the audio output track. Used only if languageControlMode is useConfigured, or there is no ISO 639 language code specified in the input.
            :param language_code_control: Choosing followInput causes the ISO 639 language code of the output to follow the ISO 639 language code of the input. The languageCode setting is used when useConfigured is set, or when followInput is selected but there is no ISO 639 language code specified by the input.
            :param name: The name of this AudioDescription. Outputs use this name to uniquely identify this AudioDescription. Description names should be unique within this channel.
            :param remix_settings: The settings that control how input audio channels are remixed into the output audio channels.
            :param stream_name: Used for Microsoft Smooth and Apple HLS outputs. Indicates the name displayed by the player (for example, English or Director Commentary).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                audio_description_property = medialive.CfnChannel.AudioDescriptionProperty(
                    audio_normalization_settings=medialive.CfnChannel.AudioNormalizationSettingsProperty(
                        algorithm="algorithm",
                        algorithm_control="algorithmControl",
                        target_lkfs=123
                    ),
                    audio_selector_name="audioSelectorName",
                    audio_type="audioType",
                    audio_type_control="audioTypeControl",
                    audio_watermarking_settings=medialive.CfnChannel.AudioWatermarkSettingsProperty(
                        nielsen_watermarks_settings=medialive.CfnChannel.NielsenWatermarksSettingsProperty(
                            nielsen_cbet_settings=medialive.CfnChannel.NielsenCBETProperty(
                                cbet_check_digit_string="cbetCheckDigitString",
                                cbet_stepaside="cbetStepaside",
                                csid="csid"
                            ),
                            nielsen_distribution_type="nielsenDistributionType",
                            nielsen_naes_ii_nw_settings=medialive.CfnChannel.NielsenNaesIiNwProperty(
                                check_digit_string="checkDigitString",
                                sid=123,
                                timezone="timezone"
                            )
                        )
                    ),
                    codec_settings=medialive.CfnChannel.AudioCodecSettingsProperty(
                        aac_settings=medialive.CfnChannel.AacSettingsProperty(
                            bitrate=123,
                            coding_mode="codingMode",
                            input_type="inputType",
                            profile="profile",
                            rate_control_mode="rateControlMode",
                            raw_format="rawFormat",
                            sample_rate=123,
                            spec="spec",
                            vbr_quality="vbrQuality"
                        ),
                        ac3_settings=medialive.CfnChannel.Ac3SettingsProperty(
                            attenuation_control="attenuationControl",
                            bitrate=123,
                            bitstream_mode="bitstreamMode",
                            coding_mode="codingMode",
                            dialnorm=123,
                            drc_profile="drcProfile",
                            lfe_filter="lfeFilter",
                            metadata_control="metadataControl"
                        ),
                        eac3_atmos_settings=medialive.CfnChannel.Eac3AtmosSettingsProperty(
                            bitrate=123,
                            coding_mode="codingMode",
                            dialnorm=123,
                            drc_line="drcLine",
                            drc_rf="drcRf",
                            height_trim=123,
                            surround_trim=123
                        ),
                        eac3_settings=medialive.CfnChannel.Eac3SettingsProperty(
                            attenuation_control="attenuationControl",
                            bitrate=123,
                            bitstream_mode="bitstreamMode",
                            coding_mode="codingMode",
                            dc_filter="dcFilter",
                            dialnorm=123,
                            drc_line="drcLine",
                            drc_rf="drcRf",
                            lfe_control="lfeControl",
                            lfe_filter="lfeFilter",
                            lo_ro_center_mix_level=123,
                            lo_ro_surround_mix_level=123,
                            lt_rt_center_mix_level=123,
                            lt_rt_surround_mix_level=123,
                            metadata_control="metadataControl",
                            passthrough_control="passthroughControl",
                            phase_control="phaseControl",
                            stereo_downmix="stereoDownmix",
                            surround_ex_mode="surroundExMode",
                            surround_mode="surroundMode"
                        ),
                        mp2_settings=medialive.CfnChannel.Mp2SettingsProperty(
                            bitrate=123,
                            coding_mode="codingMode",
                            sample_rate=123
                        ),
                        pass_through_settings=medialive.CfnChannel.PassThroughSettingsProperty(),
                        wav_settings=medialive.CfnChannel.WavSettingsProperty(
                            bit_depth=123,
                            coding_mode="codingMode",
                            sample_rate=123
                        )
                    ),
                    language_code="languageCode",
                    language_code_control="languageCodeControl",
                    name="name",
                    remix_settings=medialive.CfnChannel.RemixSettingsProperty(
                        channel_mappings=[medialive.CfnChannel.AudioChannelMappingProperty(
                            input_channel_levels=[medialive.CfnChannel.InputChannelLevelProperty(
                                gain=123,
                                input_channel=123
                            )],
                            output_channel=123
                        )],
                        channels_in=123,
                        channels_out=123
                    ),
                    stream_name="streamName"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__eac525e44cda4c1cda893c85a29097b10e89383e25cd7a85e3170de4eea2071e)
                check_type(argname="argument audio_normalization_settings", value=audio_normalization_settings, expected_type=type_hints["audio_normalization_settings"])
                check_type(argname="argument audio_selector_name", value=audio_selector_name, expected_type=type_hints["audio_selector_name"])
                check_type(argname="argument audio_type", value=audio_type, expected_type=type_hints["audio_type"])
                check_type(argname="argument audio_type_control", value=audio_type_control, expected_type=type_hints["audio_type_control"])
                check_type(argname="argument audio_watermarking_settings", value=audio_watermarking_settings, expected_type=type_hints["audio_watermarking_settings"])
                check_type(argname="argument codec_settings", value=codec_settings, expected_type=type_hints["codec_settings"])
                check_type(argname="argument language_code", value=language_code, expected_type=type_hints["language_code"])
                check_type(argname="argument language_code_control", value=language_code_control, expected_type=type_hints["language_code_control"])
                check_type(argname="argument name", value=name, expected_type=type_hints["name"])
                check_type(argname="argument remix_settings", value=remix_settings, expected_type=type_hints["remix_settings"])
                check_type(argname="argument stream_name", value=stream_name, expected_type=type_hints["stream_name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if audio_normalization_settings is not None:
                self._values["audio_normalization_settings"] = audio_normalization_settings
            if audio_selector_name is not None:
                self._values["audio_selector_name"] = audio_selector_name
            if audio_type is not None:
                self._values["audio_type"] = audio_type
            if audio_type_control is not None:
                self._values["audio_type_control"] = audio_type_control
            if audio_watermarking_settings is not None:
                self._values["audio_watermarking_settings"] = audio_watermarking_settings
            if codec_settings is not None:
                self._values["codec_settings"] = codec_settings
            if language_code is not None:
                self._values["language_code"] = language_code
            if language_code_control is not None:
                self._values["language_code_control"] = language_code_control
            if name is not None:
                self._values["name"] = name
            if remix_settings is not None:
                self._values["remix_settings"] = remix_settings
            if stream_name is not None:
                self._values["stream_name"] = stream_name

        @builtins.property
        def audio_normalization_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioNormalizationSettingsProperty"]]:
            '''The advanced audio normalization settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-audionormalizationsettings
            '''
            result = self._values.get("audio_normalization_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioNormalizationSettingsProperty"]], result)

        @builtins.property
        def audio_selector_name(self) -> typing.Optional[builtins.str]:
            '''The name of the AudioSelector that is used as the source for this AudioDescription.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-audioselectorname
            '''
            result = self._values.get("audio_selector_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def audio_type(self) -> typing.Optional[builtins.str]:
            '''Applies only if audioTypeControl is useConfigured.

            The values for audioType are defined in ISO-IEC 13818-1.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-audiotype
            '''
            result = self._values.get("audio_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def audio_type_control(self) -> typing.Optional[builtins.str]:
            '''Determines how audio type is determined.

            followInput: If the input contains an ISO 639 audioType, then that value is passed through to the output. If the input contains no ISO 639 audioType, the value in Audio Type is included in the output. useConfigured: The value in Audio Type is included in the output. Note that this field and audioType are both ignored if inputType is broadcasterMixedAd.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-audiotypecontrol
            '''
            result = self._values.get("audio_type_control")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def audio_watermarking_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioWatermarkSettingsProperty"]]:
            '''Settings to configure one or more solutions that insert audio watermarks in the audio encode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-audiowatermarkingsettings
            '''
            result = self._values.get("audio_watermarking_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioWatermarkSettingsProperty"]], result)

        @builtins.property
        def codec_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioCodecSettingsProperty"]]:
            '''The audio codec settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-codecsettings
            '''
            result = self._values.get("codec_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioCodecSettingsProperty"]], result)

        @builtins.property
        def language_code(self) -> typing.Optional[builtins.str]:
            '''Indicates the language of the audio output track.

            Used only if languageControlMode is useConfigured, or there is no ISO 639 language code specified in the input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-languagecode
            '''
            result = self._values.get("language_code")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def language_code_control(self) -> typing.Optional[builtins.str]:
            '''Choosing followInput causes the ISO 639 language code of the output to follow the ISO 639 language code of the input.

            The languageCode setting is used when useConfigured is set, or when followInput is selected but there is no ISO 639 language code specified by the input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-languagecodecontrol
            '''
            result = self._values.get("language_code_control")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def name(self) -> typing.Optional[builtins.str]:
            '''The name of this AudioDescription.

            Outputs use this name to uniquely identify this AudioDescription. Description names should be unique within this channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-name
            '''
            result = self._values.get("name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def remix_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.RemixSettingsProperty"]]:
            '''The settings that control how input audio channels are remixed into the output audio channels.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-remixsettings
            '''
            result = self._values.get("remix_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.RemixSettingsProperty"]], result)

        @builtins.property
        def stream_name(self) -> typing.Optional[builtins.str]:
            '''Used for Microsoft Smooth and Apple HLS outputs.

            Indicates the name displayed by the player (for example, English or Director Commentary).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodescription.html#cfn-medialive-channel-audiodescription-streamname
            '''
            result = self._values.get("stream_name")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AudioDescriptionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AudioDolbyEDecodeProperty",
        jsii_struct_bases=[],
        name_mapping={"program_selection": "programSelection"},
    )
    class AudioDolbyEDecodeProperty:
        def __init__(
            self,
            *,
            program_selection: typing.Optional[builtins.str] = None,
        ) -> None:
            '''
            :param program_selection: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodolbyedecode.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                audio_dolby_eDecode_property = medialive.CfnChannel.AudioDolbyEDecodeProperty(
                    program_selection="programSelection"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__fc0d2585efcd86a49f8ec949eba6e7d948c486ed3e468a980987251fc08637cf)
                check_type(argname="argument program_selection", value=program_selection, expected_type=type_hints["program_selection"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if program_selection is not None:
                self._values["program_selection"] = program_selection

        @builtins.property
        def program_selection(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiodolbyedecode.html#cfn-medialive-channel-audiodolbyedecode-programselection
            '''
            result = self._values.get("program_selection")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AudioDolbyEDecodeProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AudioHlsRenditionSelectionProperty",
        jsii_struct_bases=[],
        name_mapping={"group_id": "groupId", "name": "name"},
    )
    class AudioHlsRenditionSelectionProperty:
        def __init__(
            self,
            *,
            group_id: typing.Optional[builtins.str] = None,
            name: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Selector for HLS audio rendition.

            The parent of this entity is AudioSelectorSettings.

            :param group_id: Specifies the GROUP-ID in the #EXT-X-MEDIA tag of the target HLS audio rendition.
            :param name: Specifies the NAME in the #EXT-X-MEDIA tag of the target HLS audio rendition.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiohlsrenditionselection.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                audio_hls_rendition_selection_property = medialive.CfnChannel.AudioHlsRenditionSelectionProperty(
                    group_id="groupId",
                    name="name"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__4a6ab29a08aea906ab2edfe9cb3b006a503c86868e1e216f809c2dff0e58f195)
                check_type(argname="argument group_id", value=group_id, expected_type=type_hints["group_id"])
                check_type(argname="argument name", value=name, expected_type=type_hints["name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if group_id is not None:
                self._values["group_id"] = group_id
            if name is not None:
                self._values["name"] = name

        @builtins.property
        def group_id(self) -> typing.Optional[builtins.str]:
            '''Specifies the GROUP-ID in the #EXT-X-MEDIA tag of the target HLS audio rendition.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiohlsrenditionselection.html#cfn-medialive-channel-audiohlsrenditionselection-groupid
            '''
            result = self._values.get("group_id")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def name(self) -> typing.Optional[builtins.str]:
            '''Specifies the NAME in the #EXT-X-MEDIA tag of the target HLS audio rendition.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiohlsrenditionselection.html#cfn-medialive-channel-audiohlsrenditionselection-name
            '''
            result = self._values.get("name")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AudioHlsRenditionSelectionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AudioLanguageSelectionProperty",
        jsii_struct_bases=[],
        name_mapping={
            "language_code": "languageCode",
            "language_selection_policy": "languageSelectionPolicy",
        },
    )
    class AudioLanguageSelectionProperty:
        def __init__(
            self,
            *,
            language_code: typing.Optional[builtins.str] = None,
            language_selection_policy: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Information about the audio language to extract.

            The parent of this entity is AudioSelectorSettings.

            :param language_code: Selects a specific three-letter language code from within an audio source.
            :param language_selection_policy: When set to "strict," the transport stream demux strictly identifies audio streams by their language descriptor. If a PMT update occurs such that an audio stream matching the initially selected language is no longer present, then mute is encoded until the language returns. If set to "loose," then on a PMT update the demux chooses another audio stream in the program with the same stream type if it can't find one with the same language.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiolanguageselection.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                audio_language_selection_property = medialive.CfnChannel.AudioLanguageSelectionProperty(
                    language_code="languageCode",
                    language_selection_policy="languageSelectionPolicy"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ad1591fffbd5bac667f3b1b92698b20c83dac4f814e4c64bf0f8bb9755baa1c1)
                check_type(argname="argument language_code", value=language_code, expected_type=type_hints["language_code"])
                check_type(argname="argument language_selection_policy", value=language_selection_policy, expected_type=type_hints["language_selection_policy"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if language_code is not None:
                self._values["language_code"] = language_code
            if language_selection_policy is not None:
                self._values["language_selection_policy"] = language_selection_policy

        @builtins.property
        def language_code(self) -> typing.Optional[builtins.str]:
            '''Selects a specific three-letter language code from within an audio source.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiolanguageselection.html#cfn-medialive-channel-audiolanguageselection-languagecode
            '''
            result = self._values.get("language_code")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def language_selection_policy(self) -> typing.Optional[builtins.str]:
            '''When set to "strict," the transport stream demux strictly identifies audio streams by their language descriptor.

            If a PMT update occurs such that an audio stream matching the initially selected language is no longer present, then mute is encoded until the language returns. If set to "loose," then on a PMT update the demux chooses another audio stream in the program with the same stream type if it can't find one with the same language.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiolanguageselection.html#cfn-medialive-channel-audiolanguageselection-languageselectionpolicy
            '''
            result = self._values.get("language_selection_policy")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AudioLanguageSelectionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AudioNormalizationSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "algorithm": "algorithm",
            "algorithm_control": "algorithmControl",
            "target_lkfs": "targetLkfs",
        },
    )
    class AudioNormalizationSettingsProperty:
        def __init__(
            self,
            *,
            algorithm: typing.Optional[builtins.str] = None,
            algorithm_control: typing.Optional[builtins.str] = None,
            target_lkfs: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The settings for normalizing video.

            The parent of this entity is AudioDescription.

            :param algorithm: The audio normalization algorithm to use. itu17701 conforms to the CALM Act specification. itu17702 conforms to the EBU R-128 specification.
            :param algorithm_control: When set to correctAudio, the output audio is corrected using the chosen algorithm. If set to measureOnly, the audio is measured but not adjusted.
            :param target_lkfs: The Target LKFS(loudness) to adjust volume to. If no value is entered, a default value is used according to the chosen algorithm. The CALM Act (1770-1) recommends a target of -24 LKFS. The EBU R-128 specification (1770-2) recommends a target of -23 LKFS.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audionormalizationsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                audio_normalization_settings_property = medialive.CfnChannel.AudioNormalizationSettingsProperty(
                    algorithm="algorithm",
                    algorithm_control="algorithmControl",
                    target_lkfs=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__48c0d0ae257261670d1c62e1a75660424f8feeb6c3901fb0cf6bbdf5a182164a)
                check_type(argname="argument algorithm", value=algorithm, expected_type=type_hints["algorithm"])
                check_type(argname="argument algorithm_control", value=algorithm_control, expected_type=type_hints["algorithm_control"])
                check_type(argname="argument target_lkfs", value=target_lkfs, expected_type=type_hints["target_lkfs"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if algorithm is not None:
                self._values["algorithm"] = algorithm
            if algorithm_control is not None:
                self._values["algorithm_control"] = algorithm_control
            if target_lkfs is not None:
                self._values["target_lkfs"] = target_lkfs

        @builtins.property
        def algorithm(self) -> typing.Optional[builtins.str]:
            '''The audio normalization algorithm to use.

            itu17701 conforms to the CALM Act specification. itu17702 conforms to the EBU R-128 specification.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audionormalizationsettings.html#cfn-medialive-channel-audionormalizationsettings-algorithm
            '''
            result = self._values.get("algorithm")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def algorithm_control(self) -> typing.Optional[builtins.str]:
            '''When set to correctAudio, the output audio is corrected using the chosen algorithm.

            If set to measureOnly, the audio is measured but not adjusted.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audionormalizationsettings.html#cfn-medialive-channel-audionormalizationsettings-algorithmcontrol
            '''
            result = self._values.get("algorithm_control")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def target_lkfs(self) -> typing.Optional[jsii.Number]:
            '''The Target LKFS(loudness) to adjust volume to.

            If no value is entered, a default value is used according to the chosen algorithm. The CALM Act (1770-1) recommends a target of -24 LKFS. The EBU R-128 specification (1770-2) recommends a target of -23 LKFS.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audionormalizationsettings.html#cfn-medialive-channel-audionormalizationsettings-targetlkfs
            '''
            result = self._values.get("target_lkfs")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AudioNormalizationSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AudioOnlyHlsSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "audio_group_id": "audioGroupId",
            "audio_only_image": "audioOnlyImage",
            "audio_track_type": "audioTrackType",
            "segment_type": "segmentType",
        },
    )
    class AudioOnlyHlsSettingsProperty:
        def __init__(
            self,
            *,
            audio_group_id: typing.Optional[builtins.str] = None,
            audio_only_image: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.InputLocationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            audio_track_type: typing.Optional[builtins.str] = None,
            segment_type: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The configuration of an audio-only HLS output.

            The parent of this entity is HlsSettings.

            :param audio_group_id: Specifies the group that the audio rendition belongs to.
            :param audio_only_image: Used with an audio-only stream. It must be a .jpg or .png file. If given, this image is used as the cover art for the audio-only output. Ideally, it should be formatted for an iPhone screen for two reasons. The iPhone does not resize the image; instead, it crops a centered image on the top/bottom and left/right. Additionally, this image file gets saved bit-for-bit into every 10-second segment file, so it increases bandwidth by {image file size} * {segment count} * {user count.}.
            :param audio_track_type: Four types of audio-only tracks are supported: Audio-Only Variant Stream The client can play back this audio-only stream instead of video in low-bandwidth scenarios. Represented as an EXT-X-STREAM-INF in the HLS manifest. Alternate Audio, Auto Select, Default Alternate rendition that the client should try to play back by default. Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=YES, AUTOSELECT=YES Alternate Audio, Auto Select, Not Default Alternate rendition that the client might try to play back by default. Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=NO, AUTOSELECT=YES Alternate Audio, not Auto Select Alternate rendition that the client will not try to play back by default. Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=NO, AUTOSELECT=NO.
            :param segment_type: Specifies the segment type.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioonlyhlssettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                audio_only_hls_settings_property = medialive.CfnChannel.AudioOnlyHlsSettingsProperty(
                    audio_group_id="audioGroupId",
                    audio_only_image=medialive.CfnChannel.InputLocationProperty(
                        password_param="passwordParam",
                        uri="uri",
                        username="username"
                    ),
                    audio_track_type="audioTrackType",
                    segment_type="segmentType"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__730c480186bce3ae3ce0ff4c36da958ea8baa502e87ff721ca3963c20975dc28)
                check_type(argname="argument audio_group_id", value=audio_group_id, expected_type=type_hints["audio_group_id"])
                check_type(argname="argument audio_only_image", value=audio_only_image, expected_type=type_hints["audio_only_image"])
                check_type(argname="argument audio_track_type", value=audio_track_type, expected_type=type_hints["audio_track_type"])
                check_type(argname="argument segment_type", value=segment_type, expected_type=type_hints["segment_type"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if audio_group_id is not None:
                self._values["audio_group_id"] = audio_group_id
            if audio_only_image is not None:
                self._values["audio_only_image"] = audio_only_image
            if audio_track_type is not None:
                self._values["audio_track_type"] = audio_track_type
            if segment_type is not None:
                self._values["segment_type"] = segment_type

        @builtins.property
        def audio_group_id(self) -> typing.Optional[builtins.str]:
            '''Specifies the group that the audio rendition belongs to.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioonlyhlssettings.html#cfn-medialive-channel-audioonlyhlssettings-audiogroupid
            '''
            result = self._values.get("audio_group_id")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def audio_only_image(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputLocationProperty"]]:
            '''Used with an audio-only stream.

            It must be a .jpg or .png file. If given, this image is used as the cover art for the audio-only output. Ideally, it should be formatted for an iPhone screen for two reasons. The iPhone does not resize the image; instead, it crops a centered image on the top/bottom and left/right. Additionally, this image file gets saved bit-for-bit into every 10-second segment file, so it increases bandwidth by {image file size} * {segment count} * {user count.}.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioonlyhlssettings.html#cfn-medialive-channel-audioonlyhlssettings-audioonlyimage
            '''
            result = self._values.get("audio_only_image")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputLocationProperty"]], result)

        @builtins.property
        def audio_track_type(self) -> typing.Optional[builtins.str]:
            '''Four types of audio-only tracks are supported: Audio-Only Variant Stream The client can play back this audio-only stream instead of video in low-bandwidth scenarios.

            Represented as an EXT-X-STREAM-INF in the HLS manifest. Alternate Audio, Auto Select, Default Alternate rendition that the client should try to play back by default. Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=YES, AUTOSELECT=YES Alternate Audio, Auto Select, Not Default Alternate rendition that the client might try to play back by default. Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=NO, AUTOSELECT=YES Alternate Audio, not Auto Select Alternate rendition that the client will not try to play back by default. Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=NO, AUTOSELECT=NO.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioonlyhlssettings.html#cfn-medialive-channel-audioonlyhlssettings-audiotracktype
            '''
            result = self._values.get("audio_track_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def segment_type(self) -> typing.Optional[builtins.str]:
            '''Specifies the segment type.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioonlyhlssettings.html#cfn-medialive-channel-audioonlyhlssettings-segmenttype
            '''
            result = self._values.get("segment_type")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AudioOnlyHlsSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AudioPidSelectionProperty",
        jsii_struct_bases=[],
        name_mapping={"pid": "pid"},
    )
    class AudioPidSelectionProperty:
        def __init__(self, *, pid: typing.Optional[jsii.Number] = None) -> None:
            '''Used to extract audio by The PID.

            The parent of this entity is AudioSelectorSettings.

            :param pid: Select the audio by this PID.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiopidselection.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                audio_pid_selection_property = medialive.CfnChannel.AudioPidSelectionProperty(
                    pid=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__edbfe7bd24e96996e28867af4eb731d2289ac6b4c69a82aac37cecc71c7cb444)
                check_type(argname="argument pid", value=pid, expected_type=type_hints["pid"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if pid is not None:
                self._values["pid"] = pid

        @builtins.property
        def pid(self) -> typing.Optional[jsii.Number]:
            '''Select the audio by this PID.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiopidselection.html#cfn-medialive-channel-audiopidselection-pid
            '''
            result = self._values.get("pid")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AudioPidSelectionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AudioSelectorProperty",
        jsii_struct_bases=[],
        name_mapping={"name": "name", "selector_settings": "selectorSettings"},
    )
    class AudioSelectorProperty:
        def __init__(
            self,
            *,
            name: typing.Optional[builtins.str] = None,
            selector_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AudioSelectorSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Information about one audio to extract from the input.

            The parent of this entity is InputSettings.

            :param name: A name for this AudioSelector.
            :param selector_settings: Information about the specific audio to extract from the input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselector.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                audio_selector_property = medialive.CfnChannel.AudioSelectorProperty(
                    name="name",
                    selector_settings=medialive.CfnChannel.AudioSelectorSettingsProperty(
                        audio_hls_rendition_selection=medialive.CfnChannel.AudioHlsRenditionSelectionProperty(
                            group_id="groupId",
                            name="name"
                        ),
                        audio_language_selection=medialive.CfnChannel.AudioLanguageSelectionProperty(
                            language_code="languageCode",
                            language_selection_policy="languageSelectionPolicy"
                        ),
                        audio_pid_selection=medialive.CfnChannel.AudioPidSelectionProperty(
                            pid=123
                        ),
                        audio_track_selection=medialive.CfnChannel.AudioTrackSelectionProperty(
                            dolby_eDecode=medialive.CfnChannel.AudioDolbyEDecodeProperty(
                                program_selection="programSelection"
                            ),
                            tracks=[medialive.CfnChannel.AudioTrackProperty(
                                track=123
                            )]
                        )
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__5e8d763736fbfed56874abc0aa137f7c61b71c12cea4f7472716b52dc424a289)
                check_type(argname="argument name", value=name, expected_type=type_hints["name"])
                check_type(argname="argument selector_settings", value=selector_settings, expected_type=type_hints["selector_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if name is not None:
                self._values["name"] = name
            if selector_settings is not None:
                self._values["selector_settings"] = selector_settings

        @builtins.property
        def name(self) -> typing.Optional[builtins.str]:
            '''A name for this AudioSelector.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselector.html#cfn-medialive-channel-audioselector-name
            '''
            result = self._values.get("name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def selector_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioSelectorSettingsProperty"]]:
            '''Information about the specific audio to extract from the input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselector.html#cfn-medialive-channel-audioselector-selectorsettings
            '''
            result = self._values.get("selector_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioSelectorSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AudioSelectorProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AudioSelectorSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "audio_hls_rendition_selection": "audioHlsRenditionSelection",
            "audio_language_selection": "audioLanguageSelection",
            "audio_pid_selection": "audioPidSelection",
            "audio_track_selection": "audioTrackSelection",
        },
    )
    class AudioSelectorSettingsProperty:
        def __init__(
            self,
            *,
            audio_hls_rendition_selection: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AudioHlsRenditionSelectionProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            audio_language_selection: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AudioLanguageSelectionProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            audio_pid_selection: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AudioPidSelectionProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            audio_track_selection: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AudioTrackSelectionProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Information about the audio to extract from the input.

            The parent of this entity is AudioSelector.

            :param audio_hls_rendition_selection: Selector for HLS audio rendition.
            :param audio_language_selection: The language code of the audio to select.
            :param audio_pid_selection: The PID of the audio to select.
            :param audio_track_selection: Information about the audio track to extract.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselectorsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                audio_selector_settings_property = medialive.CfnChannel.AudioSelectorSettingsProperty(
                    audio_hls_rendition_selection=medialive.CfnChannel.AudioHlsRenditionSelectionProperty(
                        group_id="groupId",
                        name="name"
                    ),
                    audio_language_selection=medialive.CfnChannel.AudioLanguageSelectionProperty(
                        language_code="languageCode",
                        language_selection_policy="languageSelectionPolicy"
                    ),
                    audio_pid_selection=medialive.CfnChannel.AudioPidSelectionProperty(
                        pid=123
                    ),
                    audio_track_selection=medialive.CfnChannel.AudioTrackSelectionProperty(
                        dolby_eDecode=medialive.CfnChannel.AudioDolbyEDecodeProperty(
                            program_selection="programSelection"
                        ),
                        tracks=[medialive.CfnChannel.AudioTrackProperty(
                            track=123
                        )]
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__0edb712ca08b1eb077c33d5b0bf623f77a177559021fa3af4261fa2914ceacea)
                check_type(argname="argument audio_hls_rendition_selection", value=audio_hls_rendition_selection, expected_type=type_hints["audio_hls_rendition_selection"])
                check_type(argname="argument audio_language_selection", value=audio_language_selection, expected_type=type_hints["audio_language_selection"])
                check_type(argname="argument audio_pid_selection", value=audio_pid_selection, expected_type=type_hints["audio_pid_selection"])
                check_type(argname="argument audio_track_selection", value=audio_track_selection, expected_type=type_hints["audio_track_selection"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if audio_hls_rendition_selection is not None:
                self._values["audio_hls_rendition_selection"] = audio_hls_rendition_selection
            if audio_language_selection is not None:
                self._values["audio_language_selection"] = audio_language_selection
            if audio_pid_selection is not None:
                self._values["audio_pid_selection"] = audio_pid_selection
            if audio_track_selection is not None:
                self._values["audio_track_selection"] = audio_track_selection

        @builtins.property
        def audio_hls_rendition_selection(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioHlsRenditionSelectionProperty"]]:
            '''Selector for HLS audio rendition.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselectorsettings.html#cfn-medialive-channel-audioselectorsettings-audiohlsrenditionselection
            '''
            result = self._values.get("audio_hls_rendition_selection")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioHlsRenditionSelectionProperty"]], result)

        @builtins.property
        def audio_language_selection(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioLanguageSelectionProperty"]]:
            '''The language code of the audio to select.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselectorsettings.html#cfn-medialive-channel-audioselectorsettings-audiolanguageselection
            '''
            result = self._values.get("audio_language_selection")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioLanguageSelectionProperty"]], result)

        @builtins.property
        def audio_pid_selection(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioPidSelectionProperty"]]:
            '''The PID of the audio to select.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselectorsettings.html#cfn-medialive-channel-audioselectorsettings-audiopidselection
            '''
            result = self._values.get("audio_pid_selection")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioPidSelectionProperty"]], result)

        @builtins.property
        def audio_track_selection(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioTrackSelectionProperty"]]:
            '''Information about the audio track to extract.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audioselectorsettings.html#cfn-medialive-channel-audioselectorsettings-audiotrackselection
            '''
            result = self._values.get("audio_track_selection")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioTrackSelectionProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AudioSelectorSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AudioSilenceFailoverSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "audio_selector_name": "audioSelectorName",
            "audio_silence_threshold_msec": "audioSilenceThresholdMsec",
        },
    )
    class AudioSilenceFailoverSettingsProperty:
        def __init__(
            self,
            *,
            audio_selector_name: typing.Optional[builtins.str] = None,
            audio_silence_threshold_msec: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''MediaLive will perform a failover if audio is not detected in this input for the specified period.

            The parent of this entity is FailoverConditionSettings.

            :param audio_selector_name: The name of the audio selector in the input that MediaLive should monitor to detect silence. Select your most important rendition. If you didn't create an audio selector in this input, leave blank.
            :param audio_silence_threshold_msec: The amount of time (in milliseconds) that the active input must be silent before automatic input failover occurs. Silence is defined as audio loss or audio quieter than -50 dBFS.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiosilencefailoversettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                audio_silence_failover_settings_property = medialive.CfnChannel.AudioSilenceFailoverSettingsProperty(
                    audio_selector_name="audioSelectorName",
                    audio_silence_threshold_msec=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__3bfd7acac26919f80314d3c30b6526a1df17df88432037f26383217f645d7f5a)
                check_type(argname="argument audio_selector_name", value=audio_selector_name, expected_type=type_hints["audio_selector_name"])
                check_type(argname="argument audio_silence_threshold_msec", value=audio_silence_threshold_msec, expected_type=type_hints["audio_silence_threshold_msec"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if audio_selector_name is not None:
                self._values["audio_selector_name"] = audio_selector_name
            if audio_silence_threshold_msec is not None:
                self._values["audio_silence_threshold_msec"] = audio_silence_threshold_msec

        @builtins.property
        def audio_selector_name(self) -> typing.Optional[builtins.str]:
            '''The name of the audio selector in the input that MediaLive should monitor to detect silence.

            Select your most important rendition. If you didn't create an audio selector in this input, leave blank.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiosilencefailoversettings.html#cfn-medialive-channel-audiosilencefailoversettings-audioselectorname
            '''
            result = self._values.get("audio_selector_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def audio_silence_threshold_msec(self) -> typing.Optional[jsii.Number]:
            '''The amount of time (in milliseconds) that the active input must be silent before automatic input failover occurs.

            Silence is defined as audio loss or audio quieter than -50 dBFS.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiosilencefailoversettings.html#cfn-medialive-channel-audiosilencefailoversettings-audiosilencethresholdmsec
            '''
            result = self._values.get("audio_silence_threshold_msec")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AudioSilenceFailoverSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AudioTrackProperty",
        jsii_struct_bases=[],
        name_mapping={"track": "track"},
    )
    class AudioTrackProperty:
        def __init__(self, *, track: typing.Optional[jsii.Number] = None) -> None:
            '''Information about one audio track to extract. You can select multiple tracks.

            The parent of this entity is AudioTrackSelection.

            :param track: 1-based integer value that maps to a specific audio track.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiotrack.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                audio_track_property = medialive.CfnChannel.AudioTrackProperty(
                    track=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__7bf3b0127d348b2a7ec18b1b7cd1aa5f3d6a074834971fee9a17fcfa5414e914)
                check_type(argname="argument track", value=track, expected_type=type_hints["track"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if track is not None:
                self._values["track"] = track

        @builtins.property
        def track(self) -> typing.Optional[jsii.Number]:
            '''1-based integer value that maps to a specific audio track.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiotrack.html#cfn-medialive-channel-audiotrack-track
            '''
            result = self._values.get("track")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AudioTrackProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AudioTrackSelectionProperty",
        jsii_struct_bases=[],
        name_mapping={"dolby_e_decode": "dolbyEDecode", "tracks": "tracks"},
    )
    class AudioTrackSelectionProperty:
        def __init__(
            self,
            *,
            dolby_e_decode: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AudioDolbyEDecodeProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            tracks: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AudioTrackProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        ) -> None:
            '''Information about the audio track to extract.

            The parent of this entity is AudioSelectorSettings.

            :param dolby_e_decode: 
            :param tracks: Selects one or more unique audio tracks from within a source.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiotrackselection.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                audio_track_selection_property = medialive.CfnChannel.AudioTrackSelectionProperty(
                    dolby_eDecode=medialive.CfnChannel.AudioDolbyEDecodeProperty(
                        program_selection="programSelection"
                    ),
                    tracks=[medialive.CfnChannel.AudioTrackProperty(
                        track=123
                    )]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__2f02b9c9130bd73b0e869c99512eb05f558d8b6934211fb7b89da4d0276a6585)
                check_type(argname="argument dolby_e_decode", value=dolby_e_decode, expected_type=type_hints["dolby_e_decode"])
                check_type(argname="argument tracks", value=tracks, expected_type=type_hints["tracks"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if dolby_e_decode is not None:
                self._values["dolby_e_decode"] = dolby_e_decode
            if tracks is not None:
                self._values["tracks"] = tracks

        @builtins.property
        def dolby_e_decode(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioDolbyEDecodeProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiotrackselection.html#cfn-medialive-channel-audiotrackselection-dolbyedecode
            '''
            result = self._values.get("dolby_e_decode")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioDolbyEDecodeProperty"]], result)

        @builtins.property
        def tracks(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioTrackProperty"]]]]:
            '''Selects one or more unique audio tracks from within a source.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiotrackselection.html#cfn-medialive-channel-audiotrackselection-tracks
            '''
            result = self._values.get("tracks")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioTrackProperty"]]]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AudioTrackSelectionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AudioWatermarkSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"nielsen_watermarks_settings": "nielsenWatermarksSettings"},
    )
    class AudioWatermarkSettingsProperty:
        def __init__(
            self,
            *,
            nielsen_watermarks_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.NielsenWatermarksSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Audio Watermark Settings.

            The parent of this entity is AudioDescription.

            :param nielsen_watermarks_settings: Settings to configure Nielsen Watermarks in the audio encode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiowatermarksettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                audio_watermark_settings_property = medialive.CfnChannel.AudioWatermarkSettingsProperty(
                    nielsen_watermarks_settings=medialive.CfnChannel.NielsenWatermarksSettingsProperty(
                        nielsen_cbet_settings=medialive.CfnChannel.NielsenCBETProperty(
                            cbet_check_digit_string="cbetCheckDigitString",
                            cbet_stepaside="cbetStepaside",
                            csid="csid"
                        ),
                        nielsen_distribution_type="nielsenDistributionType",
                        nielsen_naes_ii_nw_settings=medialive.CfnChannel.NielsenNaesIiNwProperty(
                            check_digit_string="checkDigitString",
                            sid=123,
                            timezone="timezone"
                        )
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__93f830a49d8ccde8eb54b5221d173ee16e92321934242f6a4a3f73696ee565f0)
                check_type(argname="argument nielsen_watermarks_settings", value=nielsen_watermarks_settings, expected_type=type_hints["nielsen_watermarks_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if nielsen_watermarks_settings is not None:
                self._values["nielsen_watermarks_settings"] = nielsen_watermarks_settings

        @builtins.property
        def nielsen_watermarks_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.NielsenWatermarksSettingsProperty"]]:
            '''Settings to configure Nielsen Watermarks in the audio encode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-audiowatermarksettings.html#cfn-medialive-channel-audiowatermarksettings-nielsenwatermarkssettings
            '''
            result = self._values.get("nielsen_watermarks_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.NielsenWatermarksSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AudioWatermarkSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AutomaticInputFailoverSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "error_clear_time_msec": "errorClearTimeMsec",
            "failover_conditions": "failoverConditions",
            "input_preference": "inputPreference",
            "secondary_input_id": "secondaryInputId",
        },
    )
    class AutomaticInputFailoverSettingsProperty:
        def __init__(
            self,
            *,
            error_clear_time_msec: typing.Optional[jsii.Number] = None,
            failover_conditions: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.FailoverConditionProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            input_preference: typing.Optional[builtins.str] = None,
            secondary_input_id: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Settings to configure the conditions that will define the input as unhealthy and that will make MediaLive fail over to the other input in the input failover pair.

            The parent of this entity is InputAttachment.

            :param error_clear_time_msec: This clear time defines the requirement a recovered input must meet to be considered healthy. The input must have no failover conditions for this length of time. Enter a time in milliseconds. This value is particularly important if the input_preference for the failover pair is set to PRIMARY_INPUT_PREFERRED, because after this time, MediaLive will switch back to the primary input.
            :param failover_conditions: A list of failover conditions. If any of these conditions occur, MediaLive will perform a failover to the other input.
            :param input_preference: Input preference when deciding which input to make active when a previously failed input has recovered.
            :param secondary_input_id: The input ID of the secondary input in the automatic input failover pair.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                automatic_input_failover_settings_property = medialive.CfnChannel.AutomaticInputFailoverSettingsProperty(
                    error_clear_time_msec=123,
                    failover_conditions=[medialive.CfnChannel.FailoverConditionProperty(
                        failover_condition_settings=medialive.CfnChannel.FailoverConditionSettingsProperty(
                            audio_silence_settings=medialive.CfnChannel.AudioSilenceFailoverSettingsProperty(
                                audio_selector_name="audioSelectorName",
                                audio_silence_threshold_msec=123
                            ),
                            input_loss_settings=medialive.CfnChannel.InputLossFailoverSettingsProperty(
                                input_loss_threshold_msec=123
                            ),
                            video_black_settings=medialive.CfnChannel.VideoBlackFailoverSettingsProperty(
                                black_detect_threshold=123,
                                video_black_threshold_msec=123
                            )
                        )
                    )],
                    input_preference="inputPreference",
                    secondary_input_id="secondaryInputId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ffaa6f8bf026be072424a94927c7176d87bffd9bfacfba370a49c9283019ffb1)
                check_type(argname="argument error_clear_time_msec", value=error_clear_time_msec, expected_type=type_hints["error_clear_time_msec"])
                check_type(argname="argument failover_conditions", value=failover_conditions, expected_type=type_hints["failover_conditions"])
                check_type(argname="argument input_preference", value=input_preference, expected_type=type_hints["input_preference"])
                check_type(argname="argument secondary_input_id", value=secondary_input_id, expected_type=type_hints["secondary_input_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if error_clear_time_msec is not None:
                self._values["error_clear_time_msec"] = error_clear_time_msec
            if failover_conditions is not None:
                self._values["failover_conditions"] = failover_conditions
            if input_preference is not None:
                self._values["input_preference"] = input_preference
            if secondary_input_id is not None:
                self._values["secondary_input_id"] = secondary_input_id

        @builtins.property
        def error_clear_time_msec(self) -> typing.Optional[jsii.Number]:
            '''This clear time defines the requirement a recovered input must meet to be considered healthy.

            The input must have no failover conditions for this length of time. Enter a time in milliseconds. This value is particularly important if the input_preference for the failover pair is set to PRIMARY_INPUT_PREFERRED, because after this time, MediaLive will switch back to the primary input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html#cfn-medialive-channel-automaticinputfailoversettings-errorcleartimemsec
            '''
            result = self._values.get("error_clear_time_msec")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def failover_conditions(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.FailoverConditionProperty"]]]]:
            '''A list of failover conditions.

            If any of these conditions occur, MediaLive will perform a failover to the other input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html#cfn-medialive-channel-automaticinputfailoversettings-failoverconditions
            '''
            result = self._values.get("failover_conditions")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.FailoverConditionProperty"]]]], result)

        @builtins.property
        def input_preference(self) -> typing.Optional[builtins.str]:
            '''Input preference when deciding which input to make active when a previously failed input has recovered.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html#cfn-medialive-channel-automaticinputfailoversettings-inputpreference
            '''
            result = self._values.get("input_preference")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def secondary_input_id(self) -> typing.Optional[builtins.str]:
            '''The input ID of the secondary input in the automatic input failover pair.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-automaticinputfailoversettings.html#cfn-medialive-channel-automaticinputfailoversettings-secondaryinputid
            '''
            result = self._values.get("secondary_input_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AutomaticInputFailoverSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AvailBlankingProperty",
        jsii_struct_bases=[],
        name_mapping={"avail_blanking_image": "availBlankingImage", "state": "state"},
    )
    class AvailBlankingProperty:
        def __init__(
            self,
            *,
            avail_blanking_image: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.InputLocationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            state: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The configuration of ad avail blanking in the output.

            The parent of this entity is EncoderSettings.

            :param avail_blanking_image: The blanking image to be used. Keep empty for solid black. Only .bmp and .png images are supported.
            :param state: When set to enabled, the video, audio, and captions are blanked when insertion metadata is added.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availblanking.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                avail_blanking_property = medialive.CfnChannel.AvailBlankingProperty(
                    avail_blanking_image=medialive.CfnChannel.InputLocationProperty(
                        password_param="passwordParam",
                        uri="uri",
                        username="username"
                    ),
                    state="state"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__eca0526dd47d2b5efa5857a5e7d3c0d846ea42078c494f626e4d9e9f6011792b)
                check_type(argname="argument avail_blanking_image", value=avail_blanking_image, expected_type=type_hints["avail_blanking_image"])
                check_type(argname="argument state", value=state, expected_type=type_hints["state"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if avail_blanking_image is not None:
                self._values["avail_blanking_image"] = avail_blanking_image
            if state is not None:
                self._values["state"] = state

        @builtins.property
        def avail_blanking_image(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputLocationProperty"]]:
            '''The blanking image to be used.

            Keep empty for solid black. Only .bmp and .png images are supported.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availblanking.html#cfn-medialive-channel-availblanking-availblankingimage
            '''
            result = self._values.get("avail_blanking_image")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputLocationProperty"]], result)

        @builtins.property
        def state(self) -> typing.Optional[builtins.str]:
            '''When set to enabled, the video, audio, and captions are blanked when insertion metadata is added.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availblanking.html#cfn-medialive-channel-availblanking-state
            '''
            result = self._values.get("state")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AvailBlankingProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AvailConfigurationProperty",
        jsii_struct_bases=[],
        name_mapping={"avail_settings": "availSettings"},
    )
    class AvailConfigurationProperty:
        def __init__(
            self,
            *,
            avail_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AvailSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The setup of ad avail handling in the output.

            The parent of this entity is EncoderSettings.

            :param avail_settings: The setup of ad avail handling in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availconfiguration.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                avail_configuration_property = medialive.CfnChannel.AvailConfigurationProperty(
                    avail_settings=medialive.CfnChannel.AvailSettingsProperty(
                        esam=medialive.CfnChannel.EsamProperty(
                            acquisition_point_id="acquisitionPointId",
                            ad_avail_offset=123,
                            password_param="passwordParam",
                            pois_endpoint="poisEndpoint",
                            username="username",
                            zone_identity="zoneIdentity"
                        ),
                        scte35_splice_insert=medialive.CfnChannel.Scte35SpliceInsertProperty(
                            ad_avail_offset=123,
                            no_regional_blackout_flag="noRegionalBlackoutFlag",
                            web_delivery_allowed_flag="webDeliveryAllowedFlag"
                        ),
                        scte35_time_signal_apos=medialive.CfnChannel.Scte35TimeSignalAposProperty(
                            ad_avail_offset=123,
                            no_regional_blackout_flag="noRegionalBlackoutFlag",
                            web_delivery_allowed_flag="webDeliveryAllowedFlag"
                        )
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__64a141b4b3b5b23b51297f468895864a0795ec8b925d0233a715f29550246998)
                check_type(argname="argument avail_settings", value=avail_settings, expected_type=type_hints["avail_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if avail_settings is not None:
                self._values["avail_settings"] = avail_settings

        @builtins.property
        def avail_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AvailSettingsProperty"]]:
            '''The setup of ad avail handling in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availconfiguration.html#cfn-medialive-channel-availconfiguration-availsettings
            '''
            result = self._values.get("avail_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AvailSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AvailConfigurationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.AvailSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "esam": "esam",
            "scte35_splice_insert": "scte35SpliceInsert",
            "scte35_time_signal_apos": "scte35TimeSignalApos",
        },
    )
    class AvailSettingsProperty:
        def __init__(
            self,
            *,
            esam: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.EsamProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            scte35_splice_insert: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.Scte35SpliceInsertProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            scte35_time_signal_apos: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.Scte35TimeSignalAposProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The settings for the ad avail setup in the output.

            The parent of this entity is AvailConfiguration.

            :param esam: 
            :param scte35_splice_insert: The setup for SCTE-35 splice insert handling.
            :param scte35_time_signal_apos: The setup for SCTE-35 time signal APOS handling.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                avail_settings_property = medialive.CfnChannel.AvailSettingsProperty(
                    esam=medialive.CfnChannel.EsamProperty(
                        acquisition_point_id="acquisitionPointId",
                        ad_avail_offset=123,
                        password_param="passwordParam",
                        pois_endpoint="poisEndpoint",
                        username="username",
                        zone_identity="zoneIdentity"
                    ),
                    scte35_splice_insert=medialive.CfnChannel.Scte35SpliceInsertProperty(
                        ad_avail_offset=123,
                        no_regional_blackout_flag="noRegionalBlackoutFlag",
                        web_delivery_allowed_flag="webDeliveryAllowedFlag"
                    ),
                    scte35_time_signal_apos=medialive.CfnChannel.Scte35TimeSignalAposProperty(
                        ad_avail_offset=123,
                        no_regional_blackout_flag="noRegionalBlackoutFlag",
                        web_delivery_allowed_flag="webDeliveryAllowedFlag"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__bedfc191e762a8db06c6ce92f0d04f852d1143ef089ff6e80e79930d7aaed1c9)
                check_type(argname="argument esam", value=esam, expected_type=type_hints["esam"])
                check_type(argname="argument scte35_splice_insert", value=scte35_splice_insert, expected_type=type_hints["scte35_splice_insert"])
                check_type(argname="argument scte35_time_signal_apos", value=scte35_time_signal_apos, expected_type=type_hints["scte35_time_signal_apos"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if esam is not None:
                self._values["esam"] = esam
            if scte35_splice_insert is not None:
                self._values["scte35_splice_insert"] = scte35_splice_insert
            if scte35_time_signal_apos is not None:
                self._values["scte35_time_signal_apos"] = scte35_time_signal_apos

        @builtins.property
        def esam(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.EsamProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availsettings.html#cfn-medialive-channel-availsettings-esam
            '''
            result = self._values.get("esam")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.EsamProperty"]], result)

        @builtins.property
        def scte35_splice_insert(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Scte35SpliceInsertProperty"]]:
            '''The setup for SCTE-35 splice insert handling.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availsettings.html#cfn-medialive-channel-availsettings-scte35spliceinsert
            '''
            result = self._values.get("scte35_splice_insert")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Scte35SpliceInsertProperty"]], result)

        @builtins.property
        def scte35_time_signal_apos(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Scte35TimeSignalAposProperty"]]:
            '''The setup for SCTE-35 time signal APOS handling.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-availsettings.html#cfn-medialive-channel-availsettings-scte35timesignalapos
            '''
            result = self._values.get("scte35_time_signal_apos")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Scte35TimeSignalAposProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AvailSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.BlackoutSlateProperty",
        jsii_struct_bases=[],
        name_mapping={
            "blackout_slate_image": "blackoutSlateImage",
            "network_end_blackout": "networkEndBlackout",
            "network_end_blackout_image": "networkEndBlackoutImage",
            "network_id": "networkId",
            "state": "state",
        },
    )
    class BlackoutSlateProperty:
        def __init__(
            self,
            *,
            blackout_slate_image: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.InputLocationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            network_end_blackout: typing.Optional[builtins.str] = None,
            network_end_blackout_image: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.InputLocationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            network_id: typing.Optional[builtins.str] = None,
            state: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The settings for a blackout slate.

            The parent of this entity is EncoderSettings.

            :param blackout_slate_image: The blackout slate image to be used. Keep empty for solid black. Only .bmp and .png images are supported.
            :param network_end_blackout: Setting to enabled causes MediaLive to blackout the video, audio, and captions, and raise the "Network Blackout Image" slate when an SCTE104/35 Network End Segmentation Descriptor is encountered. The blackout is lifted when the Network Start Segmentation Descriptor is encountered. The Network End and Network Start descriptors must contain a network ID that matches the value entered in Network ID.
            :param network_end_blackout_image: The path to the local file to use as the Network End Blackout image. The image is scaled to fill the entire output raster.
            :param network_id: Provides a Network ID that matches EIDR ID format (for example, "10.XXXX/XXXX-XXXX-XXXX-XXXX-XXXX-C").
            :param state: When set to enabled, this causes video, audio, and captions to be blanked when indicated by program metadata.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-blackoutslate.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                blackout_slate_property = medialive.CfnChannel.BlackoutSlateProperty(
                    blackout_slate_image=medialive.CfnChannel.InputLocationProperty(
                        password_param="passwordParam",
                        uri="uri",
                        username="username"
                    ),
                    network_end_blackout="networkEndBlackout",
                    network_end_blackout_image=medialive.CfnChannel.InputLocationProperty(
                        password_param="passwordParam",
                        uri="uri",
                        username="username"
                    ),
                    network_id="networkId",
                    state="state"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__1c1452f91595e5e3b7268fdebee233e49d1afa2b24b9cbfb369014e647424b7b)
                check_type(argname="argument blackout_slate_image", value=blackout_slate_image, expected_type=type_hints["blackout_slate_image"])
                check_type(argname="argument network_end_blackout", value=network_end_blackout, expected_type=type_hints["network_end_blackout"])
                check_type(argname="argument network_end_blackout_image", value=network_end_blackout_image, expected_type=type_hints["network_end_blackout_image"])
                check_type(argname="argument network_id", value=network_id, expected_type=type_hints["network_id"])
                check_type(argname="argument state", value=state, expected_type=type_hints["state"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if blackout_slate_image is not None:
                self._values["blackout_slate_image"] = blackout_slate_image
            if network_end_blackout is not None:
                self._values["network_end_blackout"] = network_end_blackout
            if network_end_blackout_image is not None:
                self._values["network_end_blackout_image"] = network_end_blackout_image
            if network_id is not None:
                self._values["network_id"] = network_id
            if state is not None:
                self._values["state"] = state

        @builtins.property
        def blackout_slate_image(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputLocationProperty"]]:
            '''The blackout slate image to be used.

            Keep empty for solid black. Only .bmp and .png images are supported.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-blackoutslate.html#cfn-medialive-channel-blackoutslate-blackoutslateimage
            '''
            result = self._values.get("blackout_slate_image")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputLocationProperty"]], result)

        @builtins.property
        def network_end_blackout(self) -> typing.Optional[builtins.str]:
            '''Setting to enabled causes MediaLive to blackout the video, audio, and captions, and raise the "Network Blackout Image" slate when an SCTE104/35 Network End Segmentation Descriptor is encountered.

            The blackout is lifted when the Network Start Segmentation Descriptor is encountered. The Network End and Network Start descriptors must contain a network ID that matches the value entered in Network ID.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-blackoutslate.html#cfn-medialive-channel-blackoutslate-networkendblackout
            '''
            result = self._values.get("network_end_blackout")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def network_end_blackout_image(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputLocationProperty"]]:
            '''The path to the local file to use as the Network End Blackout image.

            The image is scaled to fill the entire output raster.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-blackoutslate.html#cfn-medialive-channel-blackoutslate-networkendblackoutimage
            '''
            result = self._values.get("network_end_blackout_image")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputLocationProperty"]], result)

        @builtins.property
        def network_id(self) -> typing.Optional[builtins.str]:
            '''Provides a Network ID that matches EIDR ID format (for example, "10.XXXX/XXXX-XXXX-XXXX-XXXX-XXXX-C").

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-blackoutslate.html#cfn-medialive-channel-blackoutslate-networkid
            '''
            result = self._values.get("network_id")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def state(self) -> typing.Optional[builtins.str]:
            '''When set to enabled, this causes video, audio, and captions to be blanked when indicated by program metadata.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-blackoutslate.html#cfn-medialive-channel-blackoutslate-state
            '''
            result = self._values.get("state")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "BlackoutSlateProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.BurnInDestinationSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "alignment": "alignment",
            "background_color": "backgroundColor",
            "background_opacity": "backgroundOpacity",
            "font": "font",
            "font_color": "fontColor",
            "font_opacity": "fontOpacity",
            "font_resolution": "fontResolution",
            "font_size": "fontSize",
            "outline_color": "outlineColor",
            "outline_size": "outlineSize",
            "shadow_color": "shadowColor",
            "shadow_opacity": "shadowOpacity",
            "shadow_x_offset": "shadowXOffset",
            "shadow_y_offset": "shadowYOffset",
            "teletext_grid_control": "teletextGridControl",
            "x_position": "xPosition",
            "y_position": "yPosition",
        },
    )
    class BurnInDestinationSettingsProperty:
        def __init__(
            self,
            *,
            alignment: typing.Optional[builtins.str] = None,
            background_color: typing.Optional[builtins.str] = None,
            background_opacity: typing.Optional[jsii.Number] = None,
            font: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.InputLocationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            font_color: typing.Optional[builtins.str] = None,
            font_opacity: typing.Optional[jsii.Number] = None,
            font_resolution: typing.Optional[jsii.Number] = None,
            font_size: typing.Optional[builtins.str] = None,
            outline_color: typing.Optional[builtins.str] = None,
            outline_size: typing.Optional[jsii.Number] = None,
            shadow_color: typing.Optional[builtins.str] = None,
            shadow_opacity: typing.Optional[jsii.Number] = None,
            shadow_x_offset: typing.Optional[jsii.Number] = None,
            shadow_y_offset: typing.Optional[jsii.Number] = None,
            teletext_grid_control: typing.Optional[builtins.str] = None,
            x_position: typing.Optional[jsii.Number] = None,
            y_position: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The settings for burn-in captions in the output.

            The parent of this entity is CaptionDestinationSettings.

            :param alignment: If no explicit xPosition or yPosition is provided, setting alignment to centered places the captions at the bottom center of the output. Similarly, setting a left alignment aligns captions to the bottom left of the output. If x and y positions are specified in conjunction with the alignment parameter, the font is justified (either left or centered) relative to those coordinates. Selecting "smart" justification left-justifies live subtitles and center-justifies pre-recorded subtitles. All burn-in and DVB-Sub font settings must match.
            :param background_color: Specifies the color of the rectangle behind the captions. All burn-in and DVB-Sub font settings must match.
            :param background_opacity: Specifies the opacity of the background rectangle. 255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it to 0 (transparent). All burn-in and DVB-Sub font settings must match.
            :param font: The external font file that is used for captions burn-in. The file extension must be .ttf or .tte. Although you can select output fonts for many different types of input captions, embedded, STL, and Teletext sources use a strict grid system. Using external fonts with these captions sources could cause an unexpected display of proportional fonts. All burn-in and DVB-Sub font settings must match.
            :param font_color: Specifies the color of the burned-in captions. This option is not valid for source captions that are STL, 608/embedded, or Teletext. These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must match.
            :param font_opacity: Specifies the opacity of the burned-in captions. 255 is opaque; 0 is transparent. All burn-in and DVB-Sub font settings must match.
            :param font_resolution: The font resolution in DPI (dots per inch). The default is 96 dpi. All burn-in and DVB-Sub font settings must match.
            :param font_size: When set to auto, fontSize scales depending on the size of the output. Providing a positive integer specifies the exact font size in points. All burn-in and DVB-Sub font settings must match.
            :param outline_color: Specifies the font outline color. This option is not valid for source captions that are either 608/embedded or Teletext. These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must match.
            :param outline_size: Specifies font outline size in pixels. This option is not valid for source captions that are either 608/embedded or Teletext. These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must match.
            :param shadow_color: Specifies the color of the shadow cast by the captions. All burn-in and DVB-Sub font settings must match.
            :param shadow_opacity: Specifies the opacity of the shadow. 255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it to 0 (transparent). All burn-in and DVB-Sub font settings must match.
            :param shadow_x_offset: Specifies the horizontal offset of the shadow that is relative to the captions in pixels. A value of -2 would result in a shadow offset 2 pixels to the left. All burn-in and DVB-Sub font settings must match.
            :param shadow_y_offset: Specifies the vertical offset of the shadow that is relative to the captions in pixels. A value of -2 would result in a shadow offset 2 pixels above the text. All burn-in and DVB-Sub font settings must match.
            :param teletext_grid_control: Controls whether a fixed grid size is used to generate the output subtitles bitmap. This applies only to Teletext inputs and DVB-Sub/Burn-in outputs.
            :param x_position: Specifies the horizontal position of the captions relative to the left side of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the left of the output. If no explicit xPosition is provided, the horizontal captions position is determined by the alignment parameter. All burn-in and DVB-Sub font settings must match.
            :param y_position: Specifies the vertical position of the captions relative to the top of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the top of the output. If no explicit yPosition is provided, the captions are positioned towards the bottom of the output. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                burn_in_destination_settings_property = medialive.CfnChannel.BurnInDestinationSettingsProperty(
                    alignment="alignment",
                    background_color="backgroundColor",
                    background_opacity=123,
                    font=medialive.CfnChannel.InputLocationProperty(
                        password_param="passwordParam",
                        uri="uri",
                        username="username"
                    ),
                    font_color="fontColor",
                    font_opacity=123,
                    font_resolution=123,
                    font_size="fontSize",
                    outline_color="outlineColor",
                    outline_size=123,
                    shadow_color="shadowColor",
                    shadow_opacity=123,
                    shadow_xOffset=123,
                    shadow_yOffset=123,
                    teletext_grid_control="teletextGridControl",
                    x_position=123,
                    y_position=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__33dec7d6f1bff74983258afde73011d8330c6183129c52e7873c9573a1ae48b1)
                check_type(argname="argument alignment", value=alignment, expected_type=type_hints["alignment"])
                check_type(argname="argument background_color", value=background_color, expected_type=type_hints["background_color"])
                check_type(argname="argument background_opacity", value=background_opacity, expected_type=type_hints["background_opacity"])
                check_type(argname="argument font", value=font, expected_type=type_hints["font"])
                check_type(argname="argument font_color", value=font_color, expected_type=type_hints["font_color"])
                check_type(argname="argument font_opacity", value=font_opacity, expected_type=type_hints["font_opacity"])
                check_type(argname="argument font_resolution", value=font_resolution, expected_type=type_hints["font_resolution"])
                check_type(argname="argument font_size", value=font_size, expected_type=type_hints["font_size"])
                check_type(argname="argument outline_color", value=outline_color, expected_type=type_hints["outline_color"])
                check_type(argname="argument outline_size", value=outline_size, expected_type=type_hints["outline_size"])
                check_type(argname="argument shadow_color", value=shadow_color, expected_type=type_hints["shadow_color"])
                check_type(argname="argument shadow_opacity", value=shadow_opacity, expected_type=type_hints["shadow_opacity"])
                check_type(argname="argument shadow_x_offset", value=shadow_x_offset, expected_type=type_hints["shadow_x_offset"])
                check_type(argname="argument shadow_y_offset", value=shadow_y_offset, expected_type=type_hints["shadow_y_offset"])
                check_type(argname="argument teletext_grid_control", value=teletext_grid_control, expected_type=type_hints["teletext_grid_control"])
                check_type(argname="argument x_position", value=x_position, expected_type=type_hints["x_position"])
                check_type(argname="argument y_position", value=y_position, expected_type=type_hints["y_position"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if alignment is not None:
                self._values["alignment"] = alignment
            if background_color is not None:
                self._values["background_color"] = background_color
            if background_opacity is not None:
                self._values["background_opacity"] = background_opacity
            if font is not None:
                self._values["font"] = font
            if font_color is not None:
                self._values["font_color"] = font_color
            if font_opacity is not None:
                self._values["font_opacity"] = font_opacity
            if font_resolution is not None:
                self._values["font_resolution"] = font_resolution
            if font_size is not None:
                self._values["font_size"] = font_size
            if outline_color is not None:
                self._values["outline_color"] = outline_color
            if outline_size is not None:
                self._values["outline_size"] = outline_size
            if shadow_color is not None:
                self._values["shadow_color"] = shadow_color
            if shadow_opacity is not None:
                self._values["shadow_opacity"] = shadow_opacity
            if shadow_x_offset is not None:
                self._values["shadow_x_offset"] = shadow_x_offset
            if shadow_y_offset is not None:
                self._values["shadow_y_offset"] = shadow_y_offset
            if teletext_grid_control is not None:
                self._values["teletext_grid_control"] = teletext_grid_control
            if x_position is not None:
                self._values["x_position"] = x_position
            if y_position is not None:
                self._values["y_position"] = y_position

        @builtins.property
        def alignment(self) -> typing.Optional[builtins.str]:
            '''If no explicit xPosition or yPosition is provided, setting alignment to centered places the captions at the bottom center of the output.

            Similarly, setting a left alignment aligns captions to the bottom left of the output. If x and y positions are specified in conjunction with the alignment parameter, the font is justified (either left or centered) relative to those coordinates. Selecting "smart" justification left-justifies live subtitles and center-justifies pre-recorded subtitles. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-alignment
            '''
            result = self._values.get("alignment")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def background_color(self) -> typing.Optional[builtins.str]:
            '''Specifies the color of the rectangle behind the captions.

            All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-backgroundcolor
            '''
            result = self._values.get("background_color")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def background_opacity(self) -> typing.Optional[jsii.Number]:
            '''Specifies the opacity of the background rectangle.

            255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it to 0 (transparent). All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-backgroundopacity
            '''
            result = self._values.get("background_opacity")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def font(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputLocationProperty"]]:
            '''The external font file that is used for captions burn-in.

            The file extension must be .ttf or .tte. Although you can select output fonts for many different types of input captions, embedded, STL, and Teletext sources use a strict grid system. Using external fonts with these captions sources could cause an unexpected display of proportional fonts. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-font
            '''
            result = self._values.get("font")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputLocationProperty"]], result)

        @builtins.property
        def font_color(self) -> typing.Optional[builtins.str]:
            '''Specifies the color of the burned-in captions.

            This option is not valid for source captions that are STL, 608/embedded, or Teletext. These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-fontcolor
            '''
            result = self._values.get("font_color")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def font_opacity(self) -> typing.Optional[jsii.Number]:
            '''Specifies the opacity of the burned-in captions.

            255 is opaque; 0 is transparent. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-fontopacity
            '''
            result = self._values.get("font_opacity")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def font_resolution(self) -> typing.Optional[jsii.Number]:
            '''The font resolution in DPI (dots per inch).

            The default is 96 dpi. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-fontresolution
            '''
            result = self._values.get("font_resolution")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def font_size(self) -> typing.Optional[builtins.str]:
            '''When set to auto, fontSize scales depending on the size of the output.

            Providing a positive integer specifies the exact font size in points. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-fontsize
            '''
            result = self._values.get("font_size")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def outline_color(self) -> typing.Optional[builtins.str]:
            '''Specifies the font outline color.

            This option is not valid for source captions that are either 608/embedded or Teletext. These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-outlinecolor
            '''
            result = self._values.get("outline_color")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def outline_size(self) -> typing.Optional[jsii.Number]:
            '''Specifies font outline size in pixels.

            This option is not valid for source captions that are either 608/embedded or Teletext. These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-outlinesize
            '''
            result = self._values.get("outline_size")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def shadow_color(self) -> typing.Optional[builtins.str]:
            '''Specifies the color of the shadow cast by the captions.

            All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-shadowcolor
            '''
            result = self._values.get("shadow_color")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def shadow_opacity(self) -> typing.Optional[jsii.Number]:
            '''Specifies the opacity of the shadow.

            255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it to 0 (transparent). All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-shadowopacity
            '''
            result = self._values.get("shadow_opacity")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def shadow_x_offset(self) -> typing.Optional[jsii.Number]:
            '''Specifies the horizontal offset of the shadow that is relative to the captions in pixels.

            A value of -2 would result in a shadow offset 2 pixels to the left. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-shadowxoffset
            '''
            result = self._values.get("shadow_x_offset")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def shadow_y_offset(self) -> typing.Optional[jsii.Number]:
            '''Specifies the vertical offset of the shadow that is relative to the captions in pixels.

            A value of -2 would result in a shadow offset 2 pixels above the text. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-shadowyoffset
            '''
            result = self._values.get("shadow_y_offset")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def teletext_grid_control(self) -> typing.Optional[builtins.str]:
            '''Controls whether a fixed grid size is used to generate the output subtitles bitmap.

            This applies only to Teletext inputs and DVB-Sub/Burn-in outputs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-teletextgridcontrol
            '''
            result = self._values.get("teletext_grid_control")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def x_position(self) -> typing.Optional[jsii.Number]:
            '''Specifies the horizontal position of the captions relative to the left side of the output in pixels.

            A value of 10 would result in the captions starting 10 pixels from the left of the output. If no explicit xPosition is provided, the horizontal captions position is determined by the alignment parameter. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-xposition
            '''
            result = self._values.get("x_position")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def y_position(self) -> typing.Optional[jsii.Number]:
            '''Specifies the vertical position of the captions relative to the top of the output in pixels.

            A value of 10 would result in the captions starting 10 pixels from the top of the output. If no explicit yPosition is provided, the captions are positioned towards the bottom of the output. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-burnindestinationsettings.html#cfn-medialive-channel-burnindestinationsettings-yposition
            '''
            result = self._values.get("y_position")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "BurnInDestinationSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.CaptionDescriptionProperty",
        jsii_struct_bases=[],
        name_mapping={
            "accessibility": "accessibility",
            "caption_selector_name": "captionSelectorName",
            "destination_settings": "destinationSettings",
            "language_code": "languageCode",
            "language_description": "languageDescription",
            "name": "name",
        },
    )
    class CaptionDescriptionProperty:
        def __init__(
            self,
            *,
            accessibility: typing.Optional[builtins.str] = None,
            caption_selector_name: typing.Optional[builtins.str] = None,
            destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.CaptionDestinationSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            language_code: typing.Optional[builtins.str] = None,
            language_description: typing.Optional[builtins.str] = None,
            name: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The encoding information for output captions.

            The parent of this entity is EncoderSettings.

            :param accessibility: 
            :param caption_selector_name: Specifies which input captions selector to use as a captions source when generating output captions. This field should match a captionSelector name.
            :param destination_settings: Additional settings for a captions destination that depend on the destination type.
            :param language_code: An ISO 639-2 three-digit code. For more information, see http://www.loc.gov/standards/iso639-2/.
            :param language_description: Human-readable information to indicate the captions that are available for players (for example, English or Spanish).
            :param name: The name of the captions description. The name is used to associate a captions description with an output. Names must be unique within a channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                caption_description_property = medialive.CfnChannel.CaptionDescriptionProperty(
                    accessibility="accessibility",
                    caption_selector_name="captionSelectorName",
                    destination_settings=medialive.CfnChannel.CaptionDestinationSettingsProperty(
                        arib_destination_settings=medialive.CfnChannel.AribDestinationSettingsProperty(),
                        burn_in_destination_settings=medialive.CfnChannel.BurnInDestinationSettingsProperty(
                            alignment="alignment",
                            background_color="backgroundColor",
                            background_opacity=123,
                            font=medialive.CfnChannel.InputLocationProperty(
                                password_param="passwordParam",
                                uri="uri",
                                username="username"
                            ),
                            font_color="fontColor",
                            font_opacity=123,
                            font_resolution=123,
                            font_size="fontSize",
                            outline_color="outlineColor",
                            outline_size=123,
                            shadow_color="shadowColor",
                            shadow_opacity=123,
                            shadow_xOffset=123,
                            shadow_yOffset=123,
                            teletext_grid_control="teletextGridControl",
                            x_position=123,
                            y_position=123
                        ),
                        dvb_sub_destination_settings=medialive.CfnChannel.DvbSubDestinationSettingsProperty(
                            alignment="alignment",
                            background_color="backgroundColor",
                            background_opacity=123,
                            font=medialive.CfnChannel.InputLocationProperty(
                                password_param="passwordParam",
                                uri="uri",
                                username="username"
                            ),
                            font_color="fontColor",
                            font_opacity=123,
                            font_resolution=123,
                            font_size="fontSize",
                            outline_color="outlineColor",
                            outline_size=123,
                            shadow_color="shadowColor",
                            shadow_opacity=123,
                            shadow_xOffset=123,
                            shadow_yOffset=123,
                            teletext_grid_control="teletextGridControl",
                            x_position=123,
                            y_position=123
                        ),
                        ebu_tt_dDestination_settings=medialive.CfnChannel.EbuTtDDestinationSettingsProperty(
                            copyright_holder="copyrightHolder",
                            fill_line_gap="fillLineGap",
                            font_family="fontFamily",
                            style_control="styleControl"
                        ),
                        embedded_destination_settings=medialive.CfnChannel.EmbeddedDestinationSettingsProperty(),
                        embedded_plus_scte20_destination_settings=medialive.CfnChannel.EmbeddedPlusScte20DestinationSettingsProperty(),
                        rtmp_caption_info_destination_settings=medialive.CfnChannel.RtmpCaptionInfoDestinationSettingsProperty(),
                        scte20_plus_embedded_destination_settings=medialive.CfnChannel.Scte20PlusEmbeddedDestinationSettingsProperty(),
                        scte27_destination_settings=medialive.CfnChannel.Scte27DestinationSettingsProperty(),
                        smpte_tt_destination_settings=medialive.CfnChannel.SmpteTtDestinationSettingsProperty(),
                        teletext_destination_settings=medialive.CfnChannel.TeletextDestinationSettingsProperty(),
                        ttml_destination_settings=medialive.CfnChannel.TtmlDestinationSettingsProperty(
                            style_control="styleControl"
                        ),
                        webvtt_destination_settings=medialive.CfnChannel.WebvttDestinationSettingsProperty(
                            style_control="styleControl"
                        )
                    ),
                    language_code="languageCode",
                    language_description="languageDescription",
                    name="name"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__4b5f4fcefb4c087827d3430996ba616b450c5ed8903530f29c2ee1ad68ef2a45)
                check_type(argname="argument accessibility", value=accessibility, expected_type=type_hints["accessibility"])
                check_type(argname="argument caption_selector_name", value=caption_selector_name, expected_type=type_hints["caption_selector_name"])
                check_type(argname="argument destination_settings", value=destination_settings, expected_type=type_hints["destination_settings"])
                check_type(argname="argument language_code", value=language_code, expected_type=type_hints["language_code"])
                check_type(argname="argument language_description", value=language_description, expected_type=type_hints["language_description"])
                check_type(argname="argument name", value=name, expected_type=type_hints["name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if accessibility is not None:
                self._values["accessibility"] = accessibility
            if caption_selector_name is not None:
                self._values["caption_selector_name"] = caption_selector_name
            if destination_settings is not None:
                self._values["destination_settings"] = destination_settings
            if language_code is not None:
                self._values["language_code"] = language_code
            if language_description is not None:
                self._values["language_description"] = language_description
            if name is not None:
                self._values["name"] = name

        @builtins.property
        def accessibility(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-accessibility
            '''
            result = self._values.get("accessibility")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def caption_selector_name(self) -> typing.Optional[builtins.str]:
            '''Specifies which input captions selector to use as a captions source when generating output captions.

            This field should match a captionSelector name.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-captionselectorname
            '''
            result = self._values.get("caption_selector_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def destination_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.CaptionDestinationSettingsProperty"]]:
            '''Additional settings for a captions destination that depend on the destination type.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-destinationsettings
            '''
            result = self._values.get("destination_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.CaptionDestinationSettingsProperty"]], result)

        @builtins.property
        def language_code(self) -> typing.Optional[builtins.str]:
            '''An ISO 639-2 three-digit code.

            For more information, see http://www.loc.gov/standards/iso639-2/.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-languagecode
            '''
            result = self._values.get("language_code")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def language_description(self) -> typing.Optional[builtins.str]:
            '''Human-readable information to indicate the captions that are available for players (for example, English or Spanish).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-languagedescription
            '''
            result = self._values.get("language_description")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def name(self) -> typing.Optional[builtins.str]:
            '''The name of the captions description.

            The name is used to associate a captions description with an output. Names must be unique within a channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondescription.html#cfn-medialive-channel-captiondescription-name
            '''
            result = self._values.get("name")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CaptionDescriptionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.CaptionDestinationSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "arib_destination_settings": "aribDestinationSettings",
            "burn_in_destination_settings": "burnInDestinationSettings",
            "dvb_sub_destination_settings": "dvbSubDestinationSettings",
            "ebu_tt_d_destination_settings": "ebuTtDDestinationSettings",
            "embedded_destination_settings": "embeddedDestinationSettings",
            "embedded_plus_scte20_destination_settings": "embeddedPlusScte20DestinationSettings",
            "rtmp_caption_info_destination_settings": "rtmpCaptionInfoDestinationSettings",
            "scte20_plus_embedded_destination_settings": "scte20PlusEmbeddedDestinationSettings",
            "scte27_destination_settings": "scte27DestinationSettings",
            "smpte_tt_destination_settings": "smpteTtDestinationSettings",
            "teletext_destination_settings": "teletextDestinationSettings",
            "ttml_destination_settings": "ttmlDestinationSettings",
            "webvtt_destination_settings": "webvttDestinationSettings",
        },
    )
    class CaptionDestinationSettingsProperty:
        def __init__(
            self,
            *,
            arib_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AribDestinationSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            burn_in_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.BurnInDestinationSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            dvb_sub_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.DvbSubDestinationSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            ebu_tt_d_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.EbuTtDDestinationSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            embedded_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.EmbeddedDestinationSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            embedded_plus_scte20_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.EmbeddedPlusScte20DestinationSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            rtmp_caption_info_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.RtmpCaptionInfoDestinationSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            scte20_plus_embedded_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.Scte20PlusEmbeddedDestinationSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            scte27_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.Scte27DestinationSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            smpte_tt_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.SmpteTtDestinationSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            teletext_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.TeletextDestinationSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            ttml_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.TtmlDestinationSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            webvtt_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.WebvttDestinationSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The configuration of one captions encode in the output.

            The parent of this entity is CaptionDescription.

            :param arib_destination_settings: The configuration of one ARIB captions encode in the output.
            :param burn_in_destination_settings: The configuration of one burn-in captions encode in the output.
            :param dvb_sub_destination_settings: The configuration of one DVB Sub captions encode in the output.
            :param ebu_tt_d_destination_settings: Settings for EBU-TT captions in the output.
            :param embedded_destination_settings: The configuration of one embedded captions encode in the output.
            :param embedded_plus_scte20_destination_settings: The configuration of one embedded plus SCTE-20 captions encode in the output.
            :param rtmp_caption_info_destination_settings: The configuration of one RTMPCaptionInfo captions encode in the output.
            :param scte20_plus_embedded_destination_settings: The configuration of one SCTE20 plus embedded captions encode in the output.
            :param scte27_destination_settings: The configuration of one SCTE-27 captions encode in the output.
            :param smpte_tt_destination_settings: The configuration of one SMPTE-TT captions encode in the output.
            :param teletext_destination_settings: The configuration of one Teletext captions encode in the output.
            :param ttml_destination_settings: The configuration of one TTML captions encode in the output.
            :param webvtt_destination_settings: The configuration of one WebVTT captions encode in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                caption_destination_settings_property = medialive.CfnChannel.CaptionDestinationSettingsProperty(
                    arib_destination_settings=medialive.CfnChannel.AribDestinationSettingsProperty(),
                    burn_in_destination_settings=medialive.CfnChannel.BurnInDestinationSettingsProperty(
                        alignment="alignment",
                        background_color="backgroundColor",
                        background_opacity=123,
                        font=medialive.CfnChannel.InputLocationProperty(
                            password_param="passwordParam",
                            uri="uri",
                            username="username"
                        ),
                        font_color="fontColor",
                        font_opacity=123,
                        font_resolution=123,
                        font_size="fontSize",
                        outline_color="outlineColor",
                        outline_size=123,
                        shadow_color="shadowColor",
                        shadow_opacity=123,
                        shadow_xOffset=123,
                        shadow_yOffset=123,
                        teletext_grid_control="teletextGridControl",
                        x_position=123,
                        y_position=123
                    ),
                    dvb_sub_destination_settings=medialive.CfnChannel.DvbSubDestinationSettingsProperty(
                        alignment="alignment",
                        background_color="backgroundColor",
                        background_opacity=123,
                        font=medialive.CfnChannel.InputLocationProperty(
                            password_param="passwordParam",
                            uri="uri",
                            username="username"
                        ),
                        font_color="fontColor",
                        font_opacity=123,
                        font_resolution=123,
                        font_size="fontSize",
                        outline_color="outlineColor",
                        outline_size=123,
                        shadow_color="shadowColor",
                        shadow_opacity=123,
                        shadow_xOffset=123,
                        shadow_yOffset=123,
                        teletext_grid_control="teletextGridControl",
                        x_position=123,
                        y_position=123
                    ),
                    ebu_tt_dDestination_settings=medialive.CfnChannel.EbuTtDDestinationSettingsProperty(
                        copyright_holder="copyrightHolder",
                        fill_line_gap="fillLineGap",
                        font_family="fontFamily",
                        style_control="styleControl"
                    ),
                    embedded_destination_settings=medialive.CfnChannel.EmbeddedDestinationSettingsProperty(),
                    embedded_plus_scte20_destination_settings=medialive.CfnChannel.EmbeddedPlusScte20DestinationSettingsProperty(),
                    rtmp_caption_info_destination_settings=medialive.CfnChannel.RtmpCaptionInfoDestinationSettingsProperty(),
                    scte20_plus_embedded_destination_settings=medialive.CfnChannel.Scte20PlusEmbeddedDestinationSettingsProperty(),
                    scte27_destination_settings=medialive.CfnChannel.Scte27DestinationSettingsProperty(),
                    smpte_tt_destination_settings=medialive.CfnChannel.SmpteTtDestinationSettingsProperty(),
                    teletext_destination_settings=medialive.CfnChannel.TeletextDestinationSettingsProperty(),
                    ttml_destination_settings=medialive.CfnChannel.TtmlDestinationSettingsProperty(
                        style_control="styleControl"
                    ),
                    webvtt_destination_settings=medialive.CfnChannel.WebvttDestinationSettingsProperty(
                        style_control="styleControl"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__61c85dee95017adc3ae53eb9a94efd42ced55a2350caff6ab98186ded8da0567)
                check_type(argname="argument arib_destination_settings", value=arib_destination_settings, expected_type=type_hints["arib_destination_settings"])
                check_type(argname="argument burn_in_destination_settings", value=burn_in_destination_settings, expected_type=type_hints["burn_in_destination_settings"])
                check_type(argname="argument dvb_sub_destination_settings", value=dvb_sub_destination_settings, expected_type=type_hints["dvb_sub_destination_settings"])
                check_type(argname="argument ebu_tt_d_destination_settings", value=ebu_tt_d_destination_settings, expected_type=type_hints["ebu_tt_d_destination_settings"])
                check_type(argname="argument embedded_destination_settings", value=embedded_destination_settings, expected_type=type_hints["embedded_destination_settings"])
                check_type(argname="argument embedded_plus_scte20_destination_settings", value=embedded_plus_scte20_destination_settings, expected_type=type_hints["embedded_plus_scte20_destination_settings"])
                check_type(argname="argument rtmp_caption_info_destination_settings", value=rtmp_caption_info_destination_settings, expected_type=type_hints["rtmp_caption_info_destination_settings"])
                check_type(argname="argument scte20_plus_embedded_destination_settings", value=scte20_plus_embedded_destination_settings, expected_type=type_hints["scte20_plus_embedded_destination_settings"])
                check_type(argname="argument scte27_destination_settings", value=scte27_destination_settings, expected_type=type_hints["scte27_destination_settings"])
                check_type(argname="argument smpte_tt_destination_settings", value=smpte_tt_destination_settings, expected_type=type_hints["smpte_tt_destination_settings"])
                check_type(argname="argument teletext_destination_settings", value=teletext_destination_settings, expected_type=type_hints["teletext_destination_settings"])
                check_type(argname="argument ttml_destination_settings", value=ttml_destination_settings, expected_type=type_hints["ttml_destination_settings"])
                check_type(argname="argument webvtt_destination_settings", value=webvtt_destination_settings, expected_type=type_hints["webvtt_destination_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if arib_destination_settings is not None:
                self._values["arib_destination_settings"] = arib_destination_settings
            if burn_in_destination_settings is not None:
                self._values["burn_in_destination_settings"] = burn_in_destination_settings
            if dvb_sub_destination_settings is not None:
                self._values["dvb_sub_destination_settings"] = dvb_sub_destination_settings
            if ebu_tt_d_destination_settings is not None:
                self._values["ebu_tt_d_destination_settings"] = ebu_tt_d_destination_settings
            if embedded_destination_settings is not None:
                self._values["embedded_destination_settings"] = embedded_destination_settings
            if embedded_plus_scte20_destination_settings is not None:
                self._values["embedded_plus_scte20_destination_settings"] = embedded_plus_scte20_destination_settings
            if rtmp_caption_info_destination_settings is not None:
                self._values["rtmp_caption_info_destination_settings"] = rtmp_caption_info_destination_settings
            if scte20_plus_embedded_destination_settings is not None:
                self._values["scte20_plus_embedded_destination_settings"] = scte20_plus_embedded_destination_settings
            if scte27_destination_settings is not None:
                self._values["scte27_destination_settings"] = scte27_destination_settings
            if smpte_tt_destination_settings is not None:
                self._values["smpte_tt_destination_settings"] = smpte_tt_destination_settings
            if teletext_destination_settings is not None:
                self._values["teletext_destination_settings"] = teletext_destination_settings
            if ttml_destination_settings is not None:
                self._values["ttml_destination_settings"] = ttml_destination_settings
            if webvtt_destination_settings is not None:
                self._values["webvtt_destination_settings"] = webvtt_destination_settings

        @builtins.property
        def arib_destination_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AribDestinationSettingsProperty"]]:
            '''The configuration of one ARIB captions encode in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-aribdestinationsettings
            '''
            result = self._values.get("arib_destination_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AribDestinationSettingsProperty"]], result)

        @builtins.property
        def burn_in_destination_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.BurnInDestinationSettingsProperty"]]:
            '''The configuration of one burn-in captions encode in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-burnindestinationsettings
            '''
            result = self._values.get("burn_in_destination_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.BurnInDestinationSettingsProperty"]], result)

        @builtins.property
        def dvb_sub_destination_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.DvbSubDestinationSettingsProperty"]]:
            '''The configuration of one DVB Sub captions encode in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-dvbsubdestinationsettings
            '''
            result = self._values.get("dvb_sub_destination_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.DvbSubDestinationSettingsProperty"]], result)

        @builtins.property
        def ebu_tt_d_destination_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.EbuTtDDestinationSettingsProperty"]]:
            '''Settings for EBU-TT captions in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-ebuttddestinationsettings
            '''
            result = self._values.get("ebu_tt_d_destination_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.EbuTtDDestinationSettingsProperty"]], result)

        @builtins.property
        def embedded_destination_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.EmbeddedDestinationSettingsProperty"]]:
            '''The configuration of one embedded captions encode in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-embeddeddestinationsettings
            '''
            result = self._values.get("embedded_destination_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.EmbeddedDestinationSettingsProperty"]], result)

        @builtins.property
        def embedded_plus_scte20_destination_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.EmbeddedPlusScte20DestinationSettingsProperty"]]:
            '''The configuration of one embedded plus SCTE-20 captions encode in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-embeddedplusscte20destinationsettings
            '''
            result = self._values.get("embedded_plus_scte20_destination_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.EmbeddedPlusScte20DestinationSettingsProperty"]], result)

        @builtins.property
        def rtmp_caption_info_destination_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.RtmpCaptionInfoDestinationSettingsProperty"]]:
            '''The configuration of one RTMPCaptionInfo captions encode in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-rtmpcaptioninfodestinationsettings
            '''
            result = self._values.get("rtmp_caption_info_destination_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.RtmpCaptionInfoDestinationSettingsProperty"]], result)

        @builtins.property
        def scte20_plus_embedded_destination_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Scte20PlusEmbeddedDestinationSettingsProperty"]]:
            '''The configuration of one SCTE20 plus embedded captions encode in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-scte20plusembeddeddestinationsettings
            '''
            result = self._values.get("scte20_plus_embedded_destination_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Scte20PlusEmbeddedDestinationSettingsProperty"]], result)

        @builtins.property
        def scte27_destination_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Scte27DestinationSettingsProperty"]]:
            '''The configuration of one SCTE-27 captions encode in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-scte27destinationsettings
            '''
            result = self._values.get("scte27_destination_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Scte27DestinationSettingsProperty"]], result)

        @builtins.property
        def smpte_tt_destination_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.SmpteTtDestinationSettingsProperty"]]:
            '''The configuration of one SMPTE-TT captions encode in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-smptettdestinationsettings
            '''
            result = self._values.get("smpte_tt_destination_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.SmpteTtDestinationSettingsProperty"]], result)

        @builtins.property
        def teletext_destination_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TeletextDestinationSettingsProperty"]]:
            '''The configuration of one Teletext captions encode in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-teletextdestinationsettings
            '''
            result = self._values.get("teletext_destination_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TeletextDestinationSettingsProperty"]], result)

        @builtins.property
        def ttml_destination_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TtmlDestinationSettingsProperty"]]:
            '''The configuration of one TTML captions encode in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-ttmldestinationsettings
            '''
            result = self._values.get("ttml_destination_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TtmlDestinationSettingsProperty"]], result)

        @builtins.property
        def webvtt_destination_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.WebvttDestinationSettingsProperty"]]:
            '''The configuration of one WebVTT captions encode in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captiondestinationsettings.html#cfn-medialive-channel-captiondestinationsettings-webvttdestinationsettings
            '''
            result = self._values.get("webvtt_destination_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.WebvttDestinationSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CaptionDestinationSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.CaptionLanguageMappingProperty",
        jsii_struct_bases=[],
        name_mapping={
            "caption_channel": "captionChannel",
            "language_code": "languageCode",
            "language_description": "languageDescription",
        },
    )
    class CaptionLanguageMappingProperty:
        def __init__(
            self,
            *,
            caption_channel: typing.Optional[jsii.Number] = None,
            language_code: typing.Optional[builtins.str] = None,
            language_description: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Maps a captions channel to an ISO 693-2 language code (http://www.loc.gov/standards/iso639-2), with an optional description.

            The parent of this entity is HlsGroupSettings.

            :param caption_channel: The closed caption channel being described by this CaptionLanguageMapping. Each channel mapping must have a unique channel number (maximum of 4).
            :param language_code: A three-character ISO 639-2 language code (see http://www.loc.gov/standards/iso639-2).
            :param language_description: The textual description of language.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionlanguagemapping.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                caption_language_mapping_property = medialive.CfnChannel.CaptionLanguageMappingProperty(
                    caption_channel=123,
                    language_code="languageCode",
                    language_description="languageDescription"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__3500d3b864981778889f7158994b2f8a259982afad60d9e6d858869f9ad7ba99)
                check_type(argname="argument caption_channel", value=caption_channel, expected_type=type_hints["caption_channel"])
                check_type(argname="argument language_code", value=language_code, expected_type=type_hints["language_code"])
                check_type(argname="argument language_description", value=language_description, expected_type=type_hints["language_description"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if caption_channel is not None:
                self._values["caption_channel"] = caption_channel
            if language_code is not None:
                self._values["language_code"] = language_code
            if language_description is not None:
                self._values["language_description"] = language_description

        @builtins.property
        def caption_channel(self) -> typing.Optional[jsii.Number]:
            '''The closed caption channel being described by this CaptionLanguageMapping.

            Each channel mapping must have a unique channel number (maximum of 4).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionlanguagemapping.html#cfn-medialive-channel-captionlanguagemapping-captionchannel
            '''
            result = self._values.get("caption_channel")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def language_code(self) -> typing.Optional[builtins.str]:
            '''A three-character ISO 639-2 language code (see http://www.loc.gov/standards/iso639-2).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionlanguagemapping.html#cfn-medialive-channel-captionlanguagemapping-languagecode
            '''
            result = self._values.get("language_code")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def language_description(self) -> typing.Optional[builtins.str]:
            '''The textual description of language.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionlanguagemapping.html#cfn-medialive-channel-captionlanguagemapping-languagedescription
            '''
            result = self._values.get("language_description")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CaptionLanguageMappingProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.CaptionRectangleProperty",
        jsii_struct_bases=[],
        name_mapping={
            "height": "height",
            "left_offset": "leftOffset",
            "top_offset": "topOffset",
            "width": "width",
        },
    )
    class CaptionRectangleProperty:
        def __init__(
            self,
            *,
            height: typing.Optional[jsii.Number] = None,
            left_offset: typing.Optional[jsii.Number] = None,
            top_offset: typing.Optional[jsii.Number] = None,
            width: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Settings to configure the caption rectangle for an output captions that will be created using this Teletext source captions.

            The parent of this entity is TeletextSourceSettings.

            :param height: See the description in leftOffset. For height, specify the entire height of the rectangle as a percentage of the underlying frame height. For example, "80" means the rectangle height is 80% of the underlying frame height. The topOffset and rectangleHeight must add up to 100% or less. This field corresponds to tts:extent - Y in the TTML standard.
            :param left_offset: Applies only if you plan to convert these source captions to EBU-TT-D or TTML in an output. (Make sure to leave the default if you don't have either of these formats in the output.) You can define a display rectangle for the captions that is smaller than the underlying video frame. You define the rectangle by specifying the position of the left edge, top edge, bottom edge, and right edge of the rectangle, all within the underlying video frame. The units for the measurements are percentages. If you specify a value for one of these fields, you must specify a value for all of them. For leftOffset, specify the position of the left edge of the rectangle, as a percentage of the underlying frame width, and relative to the left edge of the frame. For example, "10" means the measurement is 10% of the underlying frame width. The rectangle left edge starts at that position from the left edge of the frame. This field corresponds to tts:origin - X in the TTML standard.
            :param top_offset: See the description in leftOffset. For topOffset, specify the position of the top edge of the rectangle, as a percentage of the underlying frame height, and relative to the top edge of the frame. For example, "10" means the measurement is 10% of the underlying frame height. The rectangle top edge starts at that position from the top edge of the frame. This field corresponds to tts:origin - Y in the TTML standard.
            :param width: See the description in leftOffset. For width, specify the entire width of the rectangle as a percentage of the underlying frame width. For example, "80" means the rectangle width is 80% of the underlying frame width. The leftOffset and rectangleWidth must add up to 100% or less. This field corresponds to tts:extent - X in the TTML standard.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionrectangle.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                caption_rectangle_property = medialive.CfnChannel.CaptionRectangleProperty(
                    height=123,
                    left_offset=123,
                    top_offset=123,
                    width=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__f239c30c359371402894afa39556be4b336509d1ad885a24284a3fc096875f4e)
                check_type(argname="argument height", value=height, expected_type=type_hints["height"])
                check_type(argname="argument left_offset", value=left_offset, expected_type=type_hints["left_offset"])
                check_type(argname="argument top_offset", value=top_offset, expected_type=type_hints["top_offset"])
                check_type(argname="argument width", value=width, expected_type=type_hints["width"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if height is not None:
                self._values["height"] = height
            if left_offset is not None:
                self._values["left_offset"] = left_offset
            if top_offset is not None:
                self._values["top_offset"] = top_offset
            if width is not None:
                self._values["width"] = width

        @builtins.property
        def height(self) -> typing.Optional[jsii.Number]:
            '''See the description in leftOffset.

            For height, specify the entire height of the rectangle as a percentage of the underlying frame height. For example, "80" means the rectangle height is 80% of the underlying frame height. The topOffset and rectangleHeight must add up to 100% or less. This field corresponds to tts:extent - Y in the TTML standard.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionrectangle.html#cfn-medialive-channel-captionrectangle-height
            '''
            result = self._values.get("height")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def left_offset(self) -> typing.Optional[jsii.Number]:
            '''Applies only if you plan to convert these source captions to EBU-TT-D or TTML in an output.

            (Make sure to leave the default if you don't have either of these formats in the output.) You can define a display rectangle for the captions that is smaller than the underlying video frame. You define the rectangle by specifying the position of the left edge, top edge, bottom edge, and right edge of the rectangle, all within the underlying video frame. The units for the measurements are percentages. If you specify a value for one of these fields, you must specify a value for all of them.

            For leftOffset, specify the position of the left edge of the rectangle, as a percentage of the underlying frame width, and relative to the left edge of the frame. For example, "10" means the measurement is 10% of the underlying frame width. The rectangle left edge starts at that position from the left edge of the frame. This field corresponds to tts:origin - X in the TTML standard.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionrectangle.html#cfn-medialive-channel-captionrectangle-leftoffset
            '''
            result = self._values.get("left_offset")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def top_offset(self) -> typing.Optional[jsii.Number]:
            '''See the description in leftOffset.

            For topOffset, specify the position of the top edge of the rectangle, as a percentage of the underlying frame height, and relative to the top edge of the frame. For example, "10" means the measurement is 10% of the underlying frame height. The rectangle top edge starts at that position from the top edge of the frame. This field corresponds to tts:origin - Y in the TTML standard.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionrectangle.html#cfn-medialive-channel-captionrectangle-topoffset
            '''
            result = self._values.get("top_offset")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def width(self) -> typing.Optional[jsii.Number]:
            '''See the description in leftOffset.

            For width, specify the entire width of the rectangle as a percentage of the underlying frame width. For example, "80" means the rectangle width is 80% of the underlying frame width. The leftOffset and rectangleWidth must add up to 100% or less. This field corresponds to tts:extent - X in the TTML standard.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionrectangle.html#cfn-medialive-channel-captionrectangle-width
            '''
            result = self._values.get("width")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CaptionRectangleProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.CaptionSelectorProperty",
        jsii_struct_bases=[],
        name_mapping={
            "language_code": "languageCode",
            "name": "name",
            "selector_settings": "selectorSettings",
        },
    )
    class CaptionSelectorProperty:
        def __init__(
            self,
            *,
            language_code: typing.Optional[builtins.str] = None,
            name: typing.Optional[builtins.str] = None,
            selector_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.CaptionSelectorSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Information about one caption to extract from the input.

            The parent of this entity is InputSettings.

            :param language_code: When specified, this field indicates the three-letter language code of the captions track to extract from the source.
            :param name: The name identifier for a captions selector. This name is used to associate this captions selector with one or more captions descriptions. Names must be unique within a channel.
            :param selector_settings: Information about the specific audio to extract from the input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselector.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                caption_selector_property = medialive.CfnChannel.CaptionSelectorProperty(
                    language_code="languageCode",
                    name="name",
                    selector_settings=medialive.CfnChannel.CaptionSelectorSettingsProperty(
                        ancillary_source_settings=medialive.CfnChannel.AncillarySourceSettingsProperty(
                            source_ancillary_channel_number=123
                        ),
                        arib_source_settings=medialive.CfnChannel.AribSourceSettingsProperty(),
                        dvb_sub_source_settings=medialive.CfnChannel.DvbSubSourceSettingsProperty(
                            ocr_language="ocrLanguage",
                            pid=123
                        ),
                        embedded_source_settings=medialive.CfnChannel.EmbeddedSourceSettingsProperty(
                            convert608_to708="convert608To708",
                            scte20_detection="scte20Detection",
                            source608_channel_number=123,
                            source608_track_number=123
                        ),
                        scte20_source_settings=medialive.CfnChannel.Scte20SourceSettingsProperty(
                            convert608_to708="convert608To708",
                            source608_channel_number=123
                        ),
                        scte27_source_settings=medialive.CfnChannel.Scte27SourceSettingsProperty(
                            ocr_language="ocrLanguage",
                            pid=123
                        ),
                        teletext_source_settings=medialive.CfnChannel.TeletextSourceSettingsProperty(
                            output_rectangle=medialive.CfnChannel.CaptionRectangleProperty(
                                height=123,
                                left_offset=123,
                                top_offset=123,
                                width=123
                            ),
                            page_number="pageNumber"
                        )
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__b61575e6e3262cc0b5ddd8984204f4c5a132f940dba20386efe96fb9af97e48f)
                check_type(argname="argument language_code", value=language_code, expected_type=type_hints["language_code"])
                check_type(argname="argument name", value=name, expected_type=type_hints["name"])
                check_type(argname="argument selector_settings", value=selector_settings, expected_type=type_hints["selector_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if language_code is not None:
                self._values["language_code"] = language_code
            if name is not None:
                self._values["name"] = name
            if selector_settings is not None:
                self._values["selector_settings"] = selector_settings

        @builtins.property
        def language_code(self) -> typing.Optional[builtins.str]:
            '''When specified, this field indicates the three-letter language code of the captions track to extract from the source.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselector.html#cfn-medialive-channel-captionselector-languagecode
            '''
            result = self._values.get("language_code")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def name(self) -> typing.Optional[builtins.str]:
            '''The name identifier for a captions selector.

            This name is used to associate this captions selector with one or more captions descriptions. Names must be unique within a channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselector.html#cfn-medialive-channel-captionselector-name
            '''
            result = self._values.get("name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def selector_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.CaptionSelectorSettingsProperty"]]:
            '''Information about the specific audio to extract from the input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselector.html#cfn-medialive-channel-captionselector-selectorsettings
            '''
            result = self._values.get("selector_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.CaptionSelectorSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CaptionSelectorProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.CaptionSelectorSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "ancillary_source_settings": "ancillarySourceSettings",
            "arib_source_settings": "aribSourceSettings",
            "dvb_sub_source_settings": "dvbSubSourceSettings",
            "embedded_source_settings": "embeddedSourceSettings",
            "scte20_source_settings": "scte20SourceSettings",
            "scte27_source_settings": "scte27SourceSettings",
            "teletext_source_settings": "teletextSourceSettings",
        },
    )
    class CaptionSelectorSettingsProperty:
        def __init__(
            self,
            *,
            ancillary_source_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AncillarySourceSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            arib_source_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AribSourceSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            dvb_sub_source_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.DvbSubSourceSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            embedded_source_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.EmbeddedSourceSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            scte20_source_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.Scte20SourceSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            scte27_source_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.Scte27SourceSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            teletext_source_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.TeletextSourceSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Captions Selector Settings.

            The parent of this entity is CaptionSelector.

            :param ancillary_source_settings: Information about the ancillary captions to extract from the input.
            :param arib_source_settings: Information about the ARIB captions to extract from the input.
            :param dvb_sub_source_settings: Information about the DVB Sub captions to extract from the input.
            :param embedded_source_settings: Information about the embedded captions to extract from the input.
            :param scte20_source_settings: Information about the SCTE-20 captions to extract from the input.
            :param scte27_source_settings: Information about the SCTE-27 captions to extract from the input.
            :param teletext_source_settings: Information about the Teletext captions to extract from the input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                caption_selector_settings_property = medialive.CfnChannel.CaptionSelectorSettingsProperty(
                    ancillary_source_settings=medialive.CfnChannel.AncillarySourceSettingsProperty(
                        source_ancillary_channel_number=123
                    ),
                    arib_source_settings=medialive.CfnChannel.AribSourceSettingsProperty(),
                    dvb_sub_source_settings=medialive.CfnChannel.DvbSubSourceSettingsProperty(
                        ocr_language="ocrLanguage",
                        pid=123
                    ),
                    embedded_source_settings=medialive.CfnChannel.EmbeddedSourceSettingsProperty(
                        convert608_to708="convert608To708",
                        scte20_detection="scte20Detection",
                        source608_channel_number=123,
                        source608_track_number=123
                    ),
                    scte20_source_settings=medialive.CfnChannel.Scte20SourceSettingsProperty(
                        convert608_to708="convert608To708",
                        source608_channel_number=123
                    ),
                    scte27_source_settings=medialive.CfnChannel.Scte27SourceSettingsProperty(
                        ocr_language="ocrLanguage",
                        pid=123
                    ),
                    teletext_source_settings=medialive.CfnChannel.TeletextSourceSettingsProperty(
                        output_rectangle=medialive.CfnChannel.CaptionRectangleProperty(
                            height=123,
                            left_offset=123,
                            top_offset=123,
                            width=123
                        ),
                        page_number="pageNumber"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__9f5921966f5531402267983faa699d1d40cac1bdb60fc5826ff72330e98fce07)
                check_type(argname="argument ancillary_source_settings", value=ancillary_source_settings, expected_type=type_hints["ancillary_source_settings"])
                check_type(argname="argument arib_source_settings", value=arib_source_settings, expected_type=type_hints["arib_source_settings"])
                check_type(argname="argument dvb_sub_source_settings", value=dvb_sub_source_settings, expected_type=type_hints["dvb_sub_source_settings"])
                check_type(argname="argument embedded_source_settings", value=embedded_source_settings, expected_type=type_hints["embedded_source_settings"])
                check_type(argname="argument scte20_source_settings", value=scte20_source_settings, expected_type=type_hints["scte20_source_settings"])
                check_type(argname="argument scte27_source_settings", value=scte27_source_settings, expected_type=type_hints["scte27_source_settings"])
                check_type(argname="argument teletext_source_settings", value=teletext_source_settings, expected_type=type_hints["teletext_source_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if ancillary_source_settings is not None:
                self._values["ancillary_source_settings"] = ancillary_source_settings
            if arib_source_settings is not None:
                self._values["arib_source_settings"] = arib_source_settings
            if dvb_sub_source_settings is not None:
                self._values["dvb_sub_source_settings"] = dvb_sub_source_settings
            if embedded_source_settings is not None:
                self._values["embedded_source_settings"] = embedded_source_settings
            if scte20_source_settings is not None:
                self._values["scte20_source_settings"] = scte20_source_settings
            if scte27_source_settings is not None:
                self._values["scte27_source_settings"] = scte27_source_settings
            if teletext_source_settings is not None:
                self._values["teletext_source_settings"] = teletext_source_settings

        @builtins.property
        def ancillary_source_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AncillarySourceSettingsProperty"]]:
            '''Information about the ancillary captions to extract from the input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-ancillarysourcesettings
            '''
            result = self._values.get("ancillary_source_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AncillarySourceSettingsProperty"]], result)

        @builtins.property
        def arib_source_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AribSourceSettingsProperty"]]:
            '''Information about the ARIB captions to extract from the input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-aribsourcesettings
            '''
            result = self._values.get("arib_source_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AribSourceSettingsProperty"]], result)

        @builtins.property
        def dvb_sub_source_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.DvbSubSourceSettingsProperty"]]:
            '''Information about the DVB Sub captions to extract from the input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-dvbsubsourcesettings
            '''
            result = self._values.get("dvb_sub_source_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.DvbSubSourceSettingsProperty"]], result)

        @builtins.property
        def embedded_source_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.EmbeddedSourceSettingsProperty"]]:
            '''Information about the embedded captions to extract from the input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-embeddedsourcesettings
            '''
            result = self._values.get("embedded_source_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.EmbeddedSourceSettingsProperty"]], result)

        @builtins.property
        def scte20_source_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Scte20SourceSettingsProperty"]]:
            '''Information about the SCTE-20 captions to extract from the input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-scte20sourcesettings
            '''
            result = self._values.get("scte20_source_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Scte20SourceSettingsProperty"]], result)

        @builtins.property
        def scte27_source_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Scte27SourceSettingsProperty"]]:
            '''Information about the SCTE-27 captions to extract from the input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-scte27sourcesettings
            '''
            result = self._values.get("scte27_source_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Scte27SourceSettingsProperty"]], result)

        @builtins.property
        def teletext_source_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TeletextSourceSettingsProperty"]]:
            '''Information about the Teletext captions to extract from the input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-captionselectorsettings.html#cfn-medialive-channel-captionselectorsettings-teletextsourcesettings
            '''
            result = self._values.get("teletext_source_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TeletextSourceSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CaptionSelectorSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.CdiInputSpecificationProperty",
        jsii_struct_bases=[],
        name_mapping={"resolution": "resolution"},
    )
    class CdiInputSpecificationProperty:
        def __init__(self, *, resolution: typing.Optional[builtins.str] = None) -> None:
            '''The input specification for this channel.

            It specifies the key characteristics of CDI inputs for this channel, when those characteristics are different from other inputs.

            This entity is at the top level in the channel.

            :param resolution: Maximum CDI input resolution.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cdiinputspecification.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                cdi_input_specification_property = medialive.CfnChannel.CdiInputSpecificationProperty(
                    resolution="resolution"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__c2e5862f596156cbad2564b77122c4d4b9ce5bae1083042678e57d7cac0040ae)
                check_type(argname="argument resolution", value=resolution, expected_type=type_hints["resolution"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if resolution is not None:
                self._values["resolution"] = resolution

        @builtins.property
        def resolution(self) -> typing.Optional[builtins.str]:
            '''Maximum CDI input resolution.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-cdiinputspecification.html#cfn-medialive-channel-cdiinputspecification-resolution
            '''
            result = self._values.get("resolution")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CdiInputSpecificationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.ColorCorrectionProperty",
        jsii_struct_bases=[],
        name_mapping={
            "input_color_space": "inputColorSpace",
            "output_color_space": "outputColorSpace",
            "uri": "uri",
        },
    )
    class ColorCorrectionProperty:
        def __init__(
            self,
            *,
            input_color_space: typing.Optional[builtins.str] = None,
            output_color_space: typing.Optional[builtins.str] = None,
            uri: typing.Optional[builtins.str] = None,
        ) -> None:
            '''
            :param input_color_space: 
            :param output_color_space: 
            :param uri: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-colorcorrection.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                color_correction_property = medialive.CfnChannel.ColorCorrectionProperty(
                    input_color_space="inputColorSpace",
                    output_color_space="outputColorSpace",
                    uri="uri"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__8b62ed6aaafdef63c746b1b2a7a4cb11082ac71229b8cce59b11a12f61d825e5)
                check_type(argname="argument input_color_space", value=input_color_space, expected_type=type_hints["input_color_space"])
                check_type(argname="argument output_color_space", value=output_color_space, expected_type=type_hints["output_color_space"])
                check_type(argname="argument uri", value=uri, expected_type=type_hints["uri"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if input_color_space is not None:
                self._values["input_color_space"] = input_color_space
            if output_color_space is not None:
                self._values["output_color_space"] = output_color_space
            if uri is not None:
                self._values["uri"] = uri

        @builtins.property
        def input_color_space(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-colorcorrection.html#cfn-medialive-channel-colorcorrection-inputcolorspace
            '''
            result = self._values.get("input_color_space")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def output_color_space(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-colorcorrection.html#cfn-medialive-channel-colorcorrection-outputcolorspace
            '''
            result = self._values.get("output_color_space")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def uri(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-colorcorrection.html#cfn-medialive-channel-colorcorrection-uri
            '''
            result = self._values.get("uri")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ColorCorrectionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.ColorCorrectionSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"global_color_corrections": "globalColorCorrections"},
    )
    class ColorCorrectionSettingsProperty:
        def __init__(
            self,
            *,
            global_color_corrections: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.ColorCorrectionProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        ) -> None:
            '''
            :param global_color_corrections: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-colorcorrectionsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                color_correction_settings_property = medialive.CfnChannel.ColorCorrectionSettingsProperty(
                    global_color_corrections=[medialive.CfnChannel.ColorCorrectionProperty(
                        input_color_space="inputColorSpace",
                        output_color_space="outputColorSpace",
                        uri="uri"
                    )]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__5b163cf0a2805bc3b9ba83732ec2d31be65417627bae2ea0d1358c23777292cf)
                check_type(argname="argument global_color_corrections", value=global_color_corrections, expected_type=type_hints["global_color_corrections"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if global_color_corrections is not None:
                self._values["global_color_corrections"] = global_color_corrections

        @builtins.property
        def global_color_corrections(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.ColorCorrectionProperty"]]]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-colorcorrectionsettings.html#cfn-medialive-channel-colorcorrectionsettings-globalcolorcorrections
            '''
            result = self._values.get("global_color_corrections")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.ColorCorrectionProperty"]]]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ColorCorrectionSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.ColorSpacePassthroughSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={},
    )
    class ColorSpacePassthroughSettingsProperty:
        def __init__(self) -> None:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-colorspacepassthroughsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                color_space_passthrough_settings_property = medialive.CfnChannel.ColorSpacePassthroughSettingsProperty()
            '''
            self._values: typing.Dict[builtins.str, typing.Any] = {}

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ColorSpacePassthroughSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.DolbyVision81SettingsProperty",
        jsii_struct_bases=[],
        name_mapping={},
    )
    class DolbyVision81SettingsProperty:
        def __init__(self) -> None:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dolbyvision81settings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                dolby_vision81_settings_property = medialive.CfnChannel.DolbyVision81SettingsProperty()
            '''
            self._values: typing.Dict[builtins.str, typing.Any] = {}

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DolbyVision81SettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.DvbNitSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "network_id": "networkId",
            "network_name": "networkName",
            "rep_interval": "repInterval",
        },
    )
    class DvbNitSettingsProperty:
        def __init__(
            self,
            *,
            network_id: typing.Optional[jsii.Number] = None,
            network_name: typing.Optional[builtins.str] = None,
            rep_interval: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The configuration of DVB NIT.

            The parent of this entity is M2tsSettings.

            :param network_id: The numeric value placed in the Network Information Table (NIT).
            :param network_name: The network name text placed in the networkNameDescriptor inside the Network Information Table (NIT). The maximum length is 256 characters.
            :param rep_interval: The number of milliseconds between instances of this table in the output transport stream.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbnitsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                dvb_nit_settings_property = medialive.CfnChannel.DvbNitSettingsProperty(
                    network_id=123,
                    network_name="networkName",
                    rep_interval=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__8c7a3f1613fe89d29357c4daa238390bc68ba6f9f58fb2c7c5bb23bc31c3de9e)
                check_type(argname="argument network_id", value=network_id, expected_type=type_hints["network_id"])
                check_type(argname="argument network_name", value=network_name, expected_type=type_hints["network_name"])
                check_type(argname="argument rep_interval", value=rep_interval, expected_type=type_hints["rep_interval"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if network_id is not None:
                self._values["network_id"] = network_id
            if network_name is not None:
                self._values["network_name"] = network_name
            if rep_interval is not None:
                self._values["rep_interval"] = rep_interval

        @builtins.property
        def network_id(self) -> typing.Optional[jsii.Number]:
            '''The numeric value placed in the Network Information Table (NIT).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbnitsettings.html#cfn-medialive-channel-dvbnitsettings-networkid
            '''
            result = self._values.get("network_id")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def network_name(self) -> typing.Optional[builtins.str]:
            '''The network name text placed in the networkNameDescriptor inside the Network Information Table (NIT).

            The maximum length is 256 characters.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbnitsettings.html#cfn-medialive-channel-dvbnitsettings-networkname
            '''
            result = self._values.get("network_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def rep_interval(self) -> typing.Optional[jsii.Number]:
            '''The number of milliseconds between instances of this table in the output transport stream.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbnitsettings.html#cfn-medialive-channel-dvbnitsettings-repinterval
            '''
            result = self._values.get("rep_interval")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DvbNitSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.DvbSdtSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "output_sdt": "outputSdt",
            "rep_interval": "repInterval",
            "service_name": "serviceName",
            "service_provider_name": "serviceProviderName",
        },
    )
    class DvbSdtSettingsProperty:
        def __init__(
            self,
            *,
            output_sdt: typing.Optional[builtins.str] = None,
            rep_interval: typing.Optional[jsii.Number] = None,
            service_name: typing.Optional[builtins.str] = None,
            service_provider_name: typing.Optional[builtins.str] = None,
        ) -> None:
            '''A DVB Service Description Table (SDT).

            The parent of this entity is M2tsSettings.

            :param output_sdt: Selects a method of inserting SDT information into an output stream. The sdtFollow setting copies SDT information from input stream to output stream. The sdtFollowIfPresent setting copies SDT information from input stream to output stream if SDT information is present in the input. Otherwise, it falls back on the user-defined values. The sdtManual setting means that the user will enter the SDT information. The sdtNone setting means that the output stream will not contain SDT information.
            :param rep_interval: The number of milliseconds between instances of this table in the output transport stream.
            :param service_name: The service name placed in the serviceDescriptor in the Service Description Table (SDT). The maximum length is 256 characters.
            :param service_provider_name: The service provider name placed in the serviceDescriptor in the Service Description Table (SDT). The maximum length is 256 characters.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsdtsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                dvb_sdt_settings_property = medialive.CfnChannel.DvbSdtSettingsProperty(
                    output_sdt="outputSdt",
                    rep_interval=123,
                    service_name="serviceName",
                    service_provider_name="serviceProviderName"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__586c259322f0a4574022d587e4c353cd828f31a353b9f12c0d3f19321d337282)
                check_type(argname="argument output_sdt", value=output_sdt, expected_type=type_hints["output_sdt"])
                check_type(argname="argument rep_interval", value=rep_interval, expected_type=type_hints["rep_interval"])
                check_type(argname="argument service_name", value=service_name, expected_type=type_hints["service_name"])
                check_type(argname="argument service_provider_name", value=service_provider_name, expected_type=type_hints["service_provider_name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if output_sdt is not None:
                self._values["output_sdt"] = output_sdt
            if rep_interval is not None:
                self._values["rep_interval"] = rep_interval
            if service_name is not None:
                self._values["service_name"] = service_name
            if service_provider_name is not None:
                self._values["service_provider_name"] = service_provider_name

        @builtins.property
        def output_sdt(self) -> typing.Optional[builtins.str]:
            '''Selects a method of inserting SDT information into an output stream.

            The sdtFollow setting copies SDT information from input stream to output stream. The sdtFollowIfPresent setting copies SDT information from input stream to output stream if SDT information is present in the input. Otherwise, it falls back on the user-defined values. The sdtManual setting means that the user will enter the SDT information. The sdtNone setting means that the output stream will not contain SDT information.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsdtsettings.html#cfn-medialive-channel-dvbsdtsettings-outputsdt
            '''
            result = self._values.get("output_sdt")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def rep_interval(self) -> typing.Optional[jsii.Number]:
            '''The number of milliseconds between instances of this table in the output transport stream.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsdtsettings.html#cfn-medialive-channel-dvbsdtsettings-repinterval
            '''
            result = self._values.get("rep_interval")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def service_name(self) -> typing.Optional[builtins.str]:
            '''The service name placed in the serviceDescriptor in the Service Description Table (SDT).

            The maximum length is 256 characters.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsdtsettings.html#cfn-medialive-channel-dvbsdtsettings-servicename
            '''
            result = self._values.get("service_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def service_provider_name(self) -> typing.Optional[builtins.str]:
            '''The service provider name placed in the serviceDescriptor in the Service Description Table (SDT).

            The maximum length is 256 characters.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsdtsettings.html#cfn-medialive-channel-dvbsdtsettings-serviceprovidername
            '''
            result = self._values.get("service_provider_name")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DvbSdtSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.DvbSubDestinationSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "alignment": "alignment",
            "background_color": "backgroundColor",
            "background_opacity": "backgroundOpacity",
            "font": "font",
            "font_color": "fontColor",
            "font_opacity": "fontOpacity",
            "font_resolution": "fontResolution",
            "font_size": "fontSize",
            "outline_color": "outlineColor",
            "outline_size": "outlineSize",
            "shadow_color": "shadowColor",
            "shadow_opacity": "shadowOpacity",
            "shadow_x_offset": "shadowXOffset",
            "shadow_y_offset": "shadowYOffset",
            "teletext_grid_control": "teletextGridControl",
            "x_position": "xPosition",
            "y_position": "yPosition",
        },
    )
    class DvbSubDestinationSettingsProperty:
        def __init__(
            self,
            *,
            alignment: typing.Optional[builtins.str] = None,
            background_color: typing.Optional[builtins.str] = None,
            background_opacity: typing.Optional[jsii.Number] = None,
            font: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.InputLocationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            font_color: typing.Optional[builtins.str] = None,
            font_opacity: typing.Optional[jsii.Number] = None,
            font_resolution: typing.Optional[jsii.Number] = None,
            font_size: typing.Optional[builtins.str] = None,
            outline_color: typing.Optional[builtins.str] = None,
            outline_size: typing.Optional[jsii.Number] = None,
            shadow_color: typing.Optional[builtins.str] = None,
            shadow_opacity: typing.Optional[jsii.Number] = None,
            shadow_x_offset: typing.Optional[jsii.Number] = None,
            shadow_y_offset: typing.Optional[jsii.Number] = None,
            teletext_grid_control: typing.Optional[builtins.str] = None,
            x_position: typing.Optional[jsii.Number] = None,
            y_position: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The settings for DVB Sub captions in the output.

            The parent of this entity is CaptionDestinationSettings.

            :param alignment: If no explicit xPosition or yPosition is provided, setting the alignment to centered places the captions at the bottom center of the output. Similarly, setting a left alignment aligns captions to the bottom left of the output. If x and y positions are specified in conjunction with the alignment parameter, the font is justified (either left or centered) relative to those coordinates. Selecting "smart" justification left-justifies live subtitles and center-justifies pre-recorded subtitles. This option is not valid for source captions that are STL or 608/embedded. These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must match.
            :param background_color: Specifies the color of the rectangle behind the captions. All burn-in and DVB-Sub font settings must match.
            :param background_opacity: Specifies the opacity of the background rectangle. 255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it to 0 (transparent). All burn-in and DVB-Sub font settings must match.
            :param font: The external font file that is used for captions burn-in. The file extension must be .ttf or .tte. Although you can select output fonts for many different types of input captions, embedded, STL, and Teletext sources use a strict grid system. Using external fonts with these captions sources could cause an unexpected display of proportional fonts. All burn-in and DVB-Sub font settings must match.
            :param font_color: Specifies the color of the burned-in captions. This option is not valid for source captions that are STL, 608/embedded, or Teletext. These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must match.
            :param font_opacity: Specifies the opacity of the burned-in captions. 255 is opaque; 0 is transparent. All burn-in and DVB-Sub font settings must match.
            :param font_resolution: The font resolution in DPI (dots per inch). The default is 96 dpi. All burn-in and DVB-Sub font settings must match.
            :param font_size: When set to auto, fontSize scales depending on the size of the output. Providing a positive integer specifies the exact font size in points. All burn-in and DVB-Sub font settings must match.
            :param outline_color: Specifies the font outline color. This option is not valid for source captions that are either 608/embedded or Teletext. These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must match.
            :param outline_size: Specifies the font outline size in pixels. This option is not valid for source captions that are either 608/embedded or Teletext. These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must match.
            :param shadow_color: Specifies the color of the shadow that is cast by the captions. All burn-in and DVB-Sub font settings must match.
            :param shadow_opacity: Specifies the opacity of the shadow. 255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it to 0 (transparent). All burn-in and DVB-Sub font settings must match.
            :param shadow_x_offset: Specifies the horizontal offset of the shadow relative to the captions in pixels. A value of -2 would result in a shadow offset 2 pixels to the left. All burn-in and DVB-Sub font settings must match.
            :param shadow_y_offset: Specifies the vertical offset of the shadow relative to the captions in pixels. A value of -2 would result in a shadow offset 2 pixels above the text. All burn-in and DVB-Sub font settings must match.
            :param teletext_grid_control: Controls whether a fixed grid size is used to generate the output subtitles bitmap. This applies to only Teletext inputs and DVB-Sub/Burn-in outputs.
            :param x_position: Specifies the horizontal position of the captions relative to the left side of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the left of the output. If no explicit xPosition is provided, the horizontal captions position is determined by the alignment parameter. This option is not valid for source captions that are STL, 608/embedded, or Teletext. These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must match.
            :param y_position: Specifies the vertical position of the captions relative to the top of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the top of the output. If no explicit yPosition is provided, the captions are positioned towards the bottom of the output. This option is not valid for source captions that are STL, 608/embedded, or Teletext. These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                dvb_sub_destination_settings_property = medialive.CfnChannel.DvbSubDestinationSettingsProperty(
                    alignment="alignment",
                    background_color="backgroundColor",
                    background_opacity=123,
                    font=medialive.CfnChannel.InputLocationProperty(
                        password_param="passwordParam",
                        uri="uri",
                        username="username"
                    ),
                    font_color="fontColor",
                    font_opacity=123,
                    font_resolution=123,
                    font_size="fontSize",
                    outline_color="outlineColor",
                    outline_size=123,
                    shadow_color="shadowColor",
                    shadow_opacity=123,
                    shadow_xOffset=123,
                    shadow_yOffset=123,
                    teletext_grid_control="teletextGridControl",
                    x_position=123,
                    y_position=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__8d5d2ee13f6699d87c134941e50183ecf466b424e0dbd1cc71d92035d18ddb0a)
                check_type(argname="argument alignment", value=alignment, expected_type=type_hints["alignment"])
                check_type(argname="argument background_color", value=background_color, expected_type=type_hints["background_color"])
                check_type(argname="argument background_opacity", value=background_opacity, expected_type=type_hints["background_opacity"])
                check_type(argname="argument font", value=font, expected_type=type_hints["font"])
                check_type(argname="argument font_color", value=font_color, expected_type=type_hints["font_color"])
                check_type(argname="argument font_opacity", value=font_opacity, expected_type=type_hints["font_opacity"])
                check_type(argname="argument font_resolution", value=font_resolution, expected_type=type_hints["font_resolution"])
                check_type(argname="argument font_size", value=font_size, expected_type=type_hints["font_size"])
                check_type(argname="argument outline_color", value=outline_color, expected_type=type_hints["outline_color"])
                check_type(argname="argument outline_size", value=outline_size, expected_type=type_hints["outline_size"])
                check_type(argname="argument shadow_color", value=shadow_color, expected_type=type_hints["shadow_color"])
                check_type(argname="argument shadow_opacity", value=shadow_opacity, expected_type=type_hints["shadow_opacity"])
                check_type(argname="argument shadow_x_offset", value=shadow_x_offset, expected_type=type_hints["shadow_x_offset"])
                check_type(argname="argument shadow_y_offset", value=shadow_y_offset, expected_type=type_hints["shadow_y_offset"])
                check_type(argname="argument teletext_grid_control", value=teletext_grid_control, expected_type=type_hints["teletext_grid_control"])
                check_type(argname="argument x_position", value=x_position, expected_type=type_hints["x_position"])
                check_type(argname="argument y_position", value=y_position, expected_type=type_hints["y_position"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if alignment is not None:
                self._values["alignment"] = alignment
            if background_color is not None:
                self._values["background_color"] = background_color
            if background_opacity is not None:
                self._values["background_opacity"] = background_opacity
            if font is not None:
                self._values["font"] = font
            if font_color is not None:
                self._values["font_color"] = font_color
            if font_opacity is not None:
                self._values["font_opacity"] = font_opacity
            if font_resolution is not None:
                self._values["font_resolution"] = font_resolution
            if font_size is not None:
                self._values["font_size"] = font_size
            if outline_color is not None:
                self._values["outline_color"] = outline_color
            if outline_size is not None:
                self._values["outline_size"] = outline_size
            if shadow_color is not None:
                self._values["shadow_color"] = shadow_color
            if shadow_opacity is not None:
                self._values["shadow_opacity"] = shadow_opacity
            if shadow_x_offset is not None:
                self._values["shadow_x_offset"] = shadow_x_offset
            if shadow_y_offset is not None:
                self._values["shadow_y_offset"] = shadow_y_offset
            if teletext_grid_control is not None:
                self._values["teletext_grid_control"] = teletext_grid_control
            if x_position is not None:
                self._values["x_position"] = x_position
            if y_position is not None:
                self._values["y_position"] = y_position

        @builtins.property
        def alignment(self) -> typing.Optional[builtins.str]:
            '''If no explicit xPosition or yPosition is provided, setting the alignment to centered places the captions at the bottom center of the output.

            Similarly, setting a left alignment aligns captions to the bottom left of the output. If x and y positions are specified in conjunction with the alignment parameter, the font is justified (either left or centered) relative to those coordinates. Selecting "smart" justification left-justifies live subtitles and center-justifies pre-recorded subtitles. This option is not valid for source captions that are STL or 608/embedded. These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-alignment
            '''
            result = self._values.get("alignment")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def background_color(self) -> typing.Optional[builtins.str]:
            '''Specifies the color of the rectangle behind the captions.

            All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-backgroundcolor
            '''
            result = self._values.get("background_color")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def background_opacity(self) -> typing.Optional[jsii.Number]:
            '''Specifies the opacity of the background rectangle.

            255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it to 0 (transparent). All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-backgroundopacity
            '''
            result = self._values.get("background_opacity")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def font(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputLocationProperty"]]:
            '''The external font file that is used for captions burn-in.

            The file extension must be .ttf or .tte. Although you can select output fonts for many different types of input captions, embedded, STL, and Teletext sources use a strict grid system. Using external fonts with these captions sources could cause an unexpected display of proportional fonts. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-font
            '''
            result = self._values.get("font")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputLocationProperty"]], result)

        @builtins.property
        def font_color(self) -> typing.Optional[builtins.str]:
            '''Specifies the color of the burned-in captions.

            This option is not valid for source captions that are STL, 608/embedded, or Teletext. These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-fontcolor
            '''
            result = self._values.get("font_color")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def font_opacity(self) -> typing.Optional[jsii.Number]:
            '''Specifies the opacity of the burned-in captions.

            255 is opaque; 0 is transparent. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-fontopacity
            '''
            result = self._values.get("font_opacity")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def font_resolution(self) -> typing.Optional[jsii.Number]:
            '''The font resolution in DPI (dots per inch).

            The default is 96 dpi. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-fontresolution
            '''
            result = self._values.get("font_resolution")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def font_size(self) -> typing.Optional[builtins.str]:
            '''When set to auto, fontSize scales depending on the size of the output.

            Providing a positive integer specifies the exact font size in points. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-fontsize
            '''
            result = self._values.get("font_size")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def outline_color(self) -> typing.Optional[builtins.str]:
            '''Specifies the font outline color.

            This option is not valid for source captions that are either 608/embedded or Teletext. These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-outlinecolor
            '''
            result = self._values.get("outline_color")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def outline_size(self) -> typing.Optional[jsii.Number]:
            '''Specifies the font outline size in pixels.

            This option is not valid for source captions that are either 608/embedded or Teletext. These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-outlinesize
            '''
            result = self._values.get("outline_size")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def shadow_color(self) -> typing.Optional[builtins.str]:
            '''Specifies the color of the shadow that is cast by the captions.

            All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-shadowcolor
            '''
            result = self._values.get("shadow_color")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def shadow_opacity(self) -> typing.Optional[jsii.Number]:
            '''Specifies the opacity of the shadow.

            255 is opaque; 0 is transparent. Keeping this parameter blank is equivalent to setting it to 0 (transparent). All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-shadowopacity
            '''
            result = self._values.get("shadow_opacity")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def shadow_x_offset(self) -> typing.Optional[jsii.Number]:
            '''Specifies the horizontal offset of the shadow relative to the captions in pixels.

            A value of -2 would result in a shadow offset 2 pixels to the left. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-shadowxoffset
            '''
            result = self._values.get("shadow_x_offset")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def shadow_y_offset(self) -> typing.Optional[jsii.Number]:
            '''Specifies the vertical offset of the shadow relative to the captions in pixels.

            A value of -2 would result in a shadow offset 2 pixels above the text. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-shadowyoffset
            '''
            result = self._values.get("shadow_y_offset")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def teletext_grid_control(self) -> typing.Optional[builtins.str]:
            '''Controls whether a fixed grid size is used to generate the output subtitles bitmap.

            This applies to only Teletext inputs and DVB-Sub/Burn-in outputs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-teletextgridcontrol
            '''
            result = self._values.get("teletext_grid_control")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def x_position(self) -> typing.Optional[jsii.Number]:
            '''Specifies the horizontal position of the captions relative to the left side of the output in pixels.

            A value of 10 would result in the captions starting 10 pixels from the left of the output. If no explicit xPosition is provided, the horizontal captions position is determined by the alignment parameter. This option is not valid for source captions that are STL, 608/embedded, or Teletext. These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-xposition
            '''
            result = self._values.get("x_position")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def y_position(self) -> typing.Optional[jsii.Number]:
            '''Specifies the vertical position of the captions relative to the top of the output in pixels.

            A value of 10 would result in the captions starting 10 pixels from the top of the output. If no explicit yPosition is provided, the captions are positioned towards the bottom of the output. This option is not valid for source captions that are STL, 608/embedded, or Teletext. These source settings are already pre-defined by the captions stream. All burn-in and DVB-Sub font settings must match.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubdestinationsettings.html#cfn-medialive-channel-dvbsubdestinationsettings-yposition
            '''
            result = self._values.get("y_position")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DvbSubDestinationSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.DvbSubSourceSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"ocr_language": "ocrLanguage", "pid": "pid"},
    )
    class DvbSubSourceSettingsProperty:
        def __init__(
            self,
            *,
            ocr_language: typing.Optional[builtins.str] = None,
            pid: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Information about the DVB Sub captions to extract from the input.

            The parent of this entity is CaptionSelectorSettings.

            :param ocr_language: If you will configure a WebVTT caption description that references this caption selector, use this field to provide the language to consider when translating the image-based source to text.
            :param pid: When using DVB-Sub with burn-in or SMPTE-TT, use this PID for the source content. It is unused for DVB-Sub passthrough. All DVB-Sub content is passed through, regardless of selectors.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubsourcesettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                dvb_sub_source_settings_property = medialive.CfnChannel.DvbSubSourceSettingsProperty(
                    ocr_language="ocrLanguage",
                    pid=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__5df610eef3af6974cf8b17fa0075b3634ab5c04fb0d9b5b7b624223844f9273f)
                check_type(argname="argument ocr_language", value=ocr_language, expected_type=type_hints["ocr_language"])
                check_type(argname="argument pid", value=pid, expected_type=type_hints["pid"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if ocr_language is not None:
                self._values["ocr_language"] = ocr_language
            if pid is not None:
                self._values["pid"] = pid

        @builtins.property
        def ocr_language(self) -> typing.Optional[builtins.str]:
            '''If you will configure a WebVTT caption description that references this caption selector, use this field to provide the language to consider when translating the image-based source to text.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubsourcesettings.html#cfn-medialive-channel-dvbsubsourcesettings-ocrlanguage
            '''
            result = self._values.get("ocr_language")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def pid(self) -> typing.Optional[jsii.Number]:
            '''When using DVB-Sub with burn-in or SMPTE-TT, use this PID for the source content.

            It is unused for DVB-Sub passthrough. All DVB-Sub content is passed through, regardless of selectors.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbsubsourcesettings.html#cfn-medialive-channel-dvbsubsourcesettings-pid
            '''
            result = self._values.get("pid")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DvbSubSourceSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.DvbTdtSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"rep_interval": "repInterval"},
    )
    class DvbTdtSettingsProperty:
        def __init__(
            self,
            *,
            rep_interval: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The DVB Time and Date Table (TDT).

            The parent of this entity is M2tsSettings.

            :param rep_interval: The number of milliseconds between instances of this table in the output transport stream.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbtdtsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                dvb_tdt_settings_property = medialive.CfnChannel.DvbTdtSettingsProperty(
                    rep_interval=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__c3f0bf712ba88ce8f102f0f9602385f6b73428708b606c2d1c2b40b9cadc9279)
                check_type(argname="argument rep_interval", value=rep_interval, expected_type=type_hints["rep_interval"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if rep_interval is not None:
                self._values["rep_interval"] = rep_interval

        @builtins.property
        def rep_interval(self) -> typing.Optional[jsii.Number]:
            '''The number of milliseconds between instances of this table in the output transport stream.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-dvbtdtsettings.html#cfn-medialive-channel-dvbtdtsettings-repinterval
            '''
            result = self._values.get("rep_interval")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DvbTdtSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.Eac3AtmosSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "bitrate": "bitrate",
            "coding_mode": "codingMode",
            "dialnorm": "dialnorm",
            "drc_line": "drcLine",
            "drc_rf": "drcRf",
            "height_trim": "heightTrim",
            "surround_trim": "surroundTrim",
        },
    )
    class Eac3AtmosSettingsProperty:
        def __init__(
            self,
            *,
            bitrate: typing.Optional[jsii.Number] = None,
            coding_mode: typing.Optional[builtins.str] = None,
            dialnorm: typing.Optional[jsii.Number] = None,
            drc_line: typing.Optional[builtins.str] = None,
            drc_rf: typing.Optional[builtins.str] = None,
            height_trim: typing.Optional[jsii.Number] = None,
            surround_trim: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''
            :param bitrate: 
            :param coding_mode: 
            :param dialnorm: 
            :param drc_line: 
            :param drc_rf: 
            :param height_trim: 
            :param surround_trim: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                eac3_atmos_settings_property = medialive.CfnChannel.Eac3AtmosSettingsProperty(
                    bitrate=123,
                    coding_mode="codingMode",
                    dialnorm=123,
                    drc_line="drcLine",
                    drc_rf="drcRf",
                    height_trim=123,
                    surround_trim=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__8ba9f0987329aa19db775891708ed058305bd3c7f27ba631973ab915799bba9f)
                check_type(argname="argument bitrate", value=bitrate, expected_type=type_hints["bitrate"])
                check_type(argname="argument coding_mode", value=coding_mode, expected_type=type_hints["coding_mode"])
                check_type(argname="argument dialnorm", value=dialnorm, expected_type=type_hints["dialnorm"])
                check_type(argname="argument drc_line", value=drc_line, expected_type=type_hints["drc_line"])
                check_type(argname="argument drc_rf", value=drc_rf, expected_type=type_hints["drc_rf"])
                check_type(argname="argument height_trim", value=height_trim, expected_type=type_hints["height_trim"])
                check_type(argname="argument surround_trim", value=surround_trim, expected_type=type_hints["surround_trim"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if bitrate is not None:
                self._values["bitrate"] = bitrate
            if coding_mode is not None:
                self._values["coding_mode"] = coding_mode
            if dialnorm is not None:
                self._values["dialnorm"] = dialnorm
            if drc_line is not None:
                self._values["drc_line"] = drc_line
            if drc_rf is not None:
                self._values["drc_rf"] = drc_rf
            if height_trim is not None:
                self._values["height_trim"] = height_trim
            if surround_trim is not None:
                self._values["surround_trim"] = surround_trim

        @builtins.property
        def bitrate(self) -> typing.Optional[jsii.Number]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-bitrate
            '''
            result = self._values.get("bitrate")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def coding_mode(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-codingmode
            '''
            result = self._values.get("coding_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def dialnorm(self) -> typing.Optional[jsii.Number]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-dialnorm
            '''
            result = self._values.get("dialnorm")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def drc_line(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-drcline
            '''
            result = self._values.get("drc_line")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def drc_rf(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-drcrf
            '''
            result = self._values.get("drc_rf")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def height_trim(self) -> typing.Optional[jsii.Number]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-heighttrim
            '''
            result = self._values.get("height_trim")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def surround_trim(self) -> typing.Optional[jsii.Number]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3atmossettings.html#cfn-medialive-channel-eac3atmossettings-surroundtrim
            '''
            result = self._values.get("surround_trim")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "Eac3AtmosSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.Eac3SettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "attenuation_control": "attenuationControl",
            "bitrate": "bitrate",
            "bitstream_mode": "bitstreamMode",
            "coding_mode": "codingMode",
            "dc_filter": "dcFilter",
            "dialnorm": "dialnorm",
            "drc_line": "drcLine",
            "drc_rf": "drcRf",
            "lfe_control": "lfeControl",
            "lfe_filter": "lfeFilter",
            "lo_ro_center_mix_level": "loRoCenterMixLevel",
            "lo_ro_surround_mix_level": "loRoSurroundMixLevel",
            "lt_rt_center_mix_level": "ltRtCenterMixLevel",
            "lt_rt_surround_mix_level": "ltRtSurroundMixLevel",
            "metadata_control": "metadataControl",
            "passthrough_control": "passthroughControl",
            "phase_control": "phaseControl",
            "stereo_downmix": "stereoDownmix",
            "surround_ex_mode": "surroundExMode",
            "surround_mode": "surroundMode",
        },
    )
    class Eac3SettingsProperty:
        def __init__(
            self,
            *,
            attenuation_control: typing.Optional[builtins.str] = None,
            bitrate: typing.Optional[jsii.Number] = None,
            bitstream_mode: typing.Optional[builtins.str] = None,
            coding_mode: typing.Optional[builtins.str] = None,
            dc_filter: typing.Optional[builtins.str] = None,
            dialnorm: typing.Optional[jsii.Number] = None,
            drc_line: typing.Optional[builtins.str] = None,
            drc_rf: typing.Optional[builtins.str] = None,
            lfe_control: typing.Optional[builtins.str] = None,
            lfe_filter: typing.Optional[builtins.str] = None,
            lo_ro_center_mix_level: typing.Optional[jsii.Number] = None,
            lo_ro_surround_mix_level: typing.Optional[jsii.Number] = None,
            lt_rt_center_mix_level: typing.Optional[jsii.Number] = None,
            lt_rt_surround_mix_level: typing.Optional[jsii.Number] = None,
            metadata_control: typing.Optional[builtins.str] = None,
            passthrough_control: typing.Optional[builtins.str] = None,
            phase_control: typing.Optional[builtins.str] = None,
            stereo_downmix: typing.Optional[builtins.str] = None,
            surround_ex_mode: typing.Optional[builtins.str] = None,
            surround_mode: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The settings for an EAC3 audio encode in the output.

            The parent of this entity is AudioCodecSettings.

            :param attenuation_control: When set to attenuate3Db, applies a 3 dB attenuation to the surround channels. Used only for the 3/2 coding mode.
            :param bitrate: The average bitrate in bits/second. Valid bitrates depend on the coding mode.
            :param bitstream_mode: Specifies the bitstream mode (bsmod) for the emitted E-AC-3 stream. For more information, see ATSC A/52-2012 (Annex E).
            :param coding_mode: The Dolby Digital Plus coding mode. This mode determines the number of channels.
            :param dc_filter: When set to enabled, activates a DC highpass filter for all input channels.
            :param dialnorm: Sets the dialnorm for the output. If blank and the input audio is Dolby Digital Plus, dialnorm will be passed through.
            :param drc_line: Sets the Dolby dynamic range compression profile.
            :param drc_rf: Sets the profile for heavy Dolby dynamic range compression, ensuring that the instantaneous signal peaks do not exceed specified levels.
            :param lfe_control: When encoding 3/2 audio, setting to lfe enables the LFE channel.
            :param lfe_filter: When set to enabled, applies a 120Hz lowpass filter to the LFE channel prior to encoding. Valid only with a codingMode32 coding mode.
            :param lo_ro_center_mix_level: The Left only/Right only center mix level. Used only for the 3/2 coding mode.
            :param lo_ro_surround_mix_level: The Left only/Right only surround mix level. Used only for a 3/2 coding mode.
            :param lt_rt_center_mix_level: The Left total/Right total center mix level. Used only for a 3/2 coding mode.
            :param lt_rt_surround_mix_level: The Left total/Right total surround mix level. Used only for the 3/2 coding mode.
            :param metadata_control: When set to followInput, encoder metadata is sourced from the DD, DD+, or DolbyE decoder that supplies this audio data. If the audio is not supplied from one of these streams, then the static metadata settings are used.
            :param passthrough_control: When set to whenPossible, input DD+ audio will be passed through if it is present on the input. This detection is dynamic over the life of the transcode. Inputs that alternate between DD+ and non-DD+ content will have a consistent DD+ output as the system alternates between passthrough and encoding.
            :param phase_control: When set to shift90Degrees, applies a 90-degree phase shift to the surround channels. Used only for a 3/2 coding mode.
            :param stereo_downmix: A stereo downmix preference. Used only for the 3/2 coding mode.
            :param surround_ex_mode: When encoding 3/2 audio, sets whether an extra center back surround channel is matrix encoded into the left and right surround channels.
            :param surround_mode: When encoding 2/0 audio, sets whether Dolby Surround is matrix-encoded into the two channels.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                eac3_settings_property = medialive.CfnChannel.Eac3SettingsProperty(
                    attenuation_control="attenuationControl",
                    bitrate=123,
                    bitstream_mode="bitstreamMode",
                    coding_mode="codingMode",
                    dc_filter="dcFilter",
                    dialnorm=123,
                    drc_line="drcLine",
                    drc_rf="drcRf",
                    lfe_control="lfeControl",
                    lfe_filter="lfeFilter",
                    lo_ro_center_mix_level=123,
                    lo_ro_surround_mix_level=123,
                    lt_rt_center_mix_level=123,
                    lt_rt_surround_mix_level=123,
                    metadata_control="metadataControl",
                    passthrough_control="passthroughControl",
                    phase_control="phaseControl",
                    stereo_downmix="stereoDownmix",
                    surround_ex_mode="surroundExMode",
                    surround_mode="surroundMode"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__30da58edd55c00e12f81eb8c75da493d94499c43fc797241342b62224ac1da61)
                check_type(argname="argument attenuation_control", value=attenuation_control, expected_type=type_hints["attenuation_control"])
                check_type(argname="argument bitrate", value=bitrate, expected_type=type_hints["bitrate"])
                check_type(argname="argument bitstream_mode", value=bitstream_mode, expected_type=type_hints["bitstream_mode"])
                check_type(argname="argument coding_mode", value=coding_mode, expected_type=type_hints["coding_mode"])
                check_type(argname="argument dc_filter", value=dc_filter, expected_type=type_hints["dc_filter"])
                check_type(argname="argument dialnorm", value=dialnorm, expected_type=type_hints["dialnorm"])
                check_type(argname="argument drc_line", value=drc_line, expected_type=type_hints["drc_line"])
                check_type(argname="argument drc_rf", value=drc_rf, expected_type=type_hints["drc_rf"])
                check_type(argname="argument lfe_control", value=lfe_control, expected_type=type_hints["lfe_control"])
                check_type(argname="argument lfe_filter", value=lfe_filter, expected_type=type_hints["lfe_filter"])
                check_type(argname="argument lo_ro_center_mix_level", value=lo_ro_center_mix_level, expected_type=type_hints["lo_ro_center_mix_level"])
                check_type(argname="argument lo_ro_surround_mix_level", value=lo_ro_surround_mix_level, expected_type=type_hints["lo_ro_surround_mix_level"])
                check_type(argname="argument lt_rt_center_mix_level", value=lt_rt_center_mix_level, expected_type=type_hints["lt_rt_center_mix_level"])
                check_type(argname="argument lt_rt_surround_mix_level", value=lt_rt_surround_mix_level, expected_type=type_hints["lt_rt_surround_mix_level"])
                check_type(argname="argument metadata_control", value=metadata_control, expected_type=type_hints["metadata_control"])
                check_type(argname="argument passthrough_control", value=passthrough_control, expected_type=type_hints["passthrough_control"])
                check_type(argname="argument phase_control", value=phase_control, expected_type=type_hints["phase_control"])
                check_type(argname="argument stereo_downmix", value=stereo_downmix, expected_type=type_hints["stereo_downmix"])
                check_type(argname="argument surround_ex_mode", value=surround_ex_mode, expected_type=type_hints["surround_ex_mode"])
                check_type(argname="argument surround_mode", value=surround_mode, expected_type=type_hints["surround_mode"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if attenuation_control is not None:
                self._values["attenuation_control"] = attenuation_control
            if bitrate is not None:
                self._values["bitrate"] = bitrate
            if bitstream_mode is not None:
                self._values["bitstream_mode"] = bitstream_mode
            if coding_mode is not None:
                self._values["coding_mode"] = coding_mode
            if dc_filter is not None:
                self._values["dc_filter"] = dc_filter
            if dialnorm is not None:
                self._values["dialnorm"] = dialnorm
            if drc_line is not None:
                self._values["drc_line"] = drc_line
            if drc_rf is not None:
                self._values["drc_rf"] = drc_rf
            if lfe_control is not None:
                self._values["lfe_control"] = lfe_control
            if lfe_filter is not None:
                self._values["lfe_filter"] = lfe_filter
            if lo_ro_center_mix_level is not None:
                self._values["lo_ro_center_mix_level"] = lo_ro_center_mix_level
            if lo_ro_surround_mix_level is not None:
                self._values["lo_ro_surround_mix_level"] = lo_ro_surround_mix_level
            if lt_rt_center_mix_level is not None:
                self._values["lt_rt_center_mix_level"] = lt_rt_center_mix_level
            if lt_rt_surround_mix_level is not None:
                self._values["lt_rt_surround_mix_level"] = lt_rt_surround_mix_level
            if metadata_control is not None:
                self._values["metadata_control"] = metadata_control
            if passthrough_control is not None:
                self._values["passthrough_control"] = passthrough_control
            if phase_control is not None:
                self._values["phase_control"] = phase_control
            if stereo_downmix is not None:
                self._values["stereo_downmix"] = stereo_downmix
            if surround_ex_mode is not None:
                self._values["surround_ex_mode"] = surround_ex_mode
            if surround_mode is not None:
                self._values["surround_mode"] = surround_mode

        @builtins.property
        def attenuation_control(self) -> typing.Optional[builtins.str]:
            '''When set to attenuate3Db, applies a 3 dB attenuation to the surround channels.

            Used only for the 3/2 coding mode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-attenuationcontrol
            '''
            result = self._values.get("attenuation_control")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def bitrate(self) -> typing.Optional[jsii.Number]:
            '''The average bitrate in bits/second.

            Valid bitrates depend on the coding mode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-bitrate
            '''
            result = self._values.get("bitrate")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def bitstream_mode(self) -> typing.Optional[builtins.str]:
            '''Specifies the bitstream mode (bsmod) for the emitted E-AC-3 stream.

            For more information, see ATSC A/52-2012 (Annex E).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-bitstreammode
            '''
            result = self._values.get("bitstream_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def coding_mode(self) -> typing.Optional[builtins.str]:
            '''The Dolby Digital Plus coding mode.

            This mode determines the number of channels.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-codingmode
            '''
            result = self._values.get("coding_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def dc_filter(self) -> typing.Optional[builtins.str]:
            '''When set to enabled, activates a DC highpass filter for all input channels.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-dcfilter
            '''
            result = self._values.get("dc_filter")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def dialnorm(self) -> typing.Optional[jsii.Number]:
            '''Sets the dialnorm for the output.

            If blank and the input audio is Dolby Digital Plus, dialnorm will be passed through.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-dialnorm
            '''
            result = self._values.get("dialnorm")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def drc_line(self) -> typing.Optional[builtins.str]:
            '''Sets the Dolby dynamic range compression profile.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-drcline
            '''
            result = self._values.get("drc_line")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def drc_rf(self) -> typing.Optional[builtins.str]:
            '''Sets the profile for heavy Dolby dynamic range compression, ensuring that the instantaneous signal peaks do not exceed specified levels.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-drcrf
            '''
            result = self._values.get("drc_rf")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def lfe_control(self) -> typing.Optional[builtins.str]:
            '''When encoding 3/2 audio, setting to lfe enables the LFE channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-lfecontrol
            '''
            result = self._values.get("lfe_control")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def lfe_filter(self) -> typing.Optional[builtins.str]:
            '''When set to enabled, applies a 120Hz lowpass filter to the LFE channel prior to encoding.

            Valid only with a codingMode32 coding mode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-lfefilter
            '''
            result = self._values.get("lfe_filter")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def lo_ro_center_mix_level(self) -> typing.Optional[jsii.Number]:
            '''The Left only/Right only center mix level.

            Used only for the 3/2 coding mode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-lorocentermixlevel
            '''
            result = self._values.get("lo_ro_center_mix_level")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def lo_ro_surround_mix_level(self) -> typing.Optional[jsii.Number]:
            '''The Left only/Right only surround mix level.

            Used only for a 3/2 coding mode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-lorosurroundmixlevel
            '''
            result = self._values.get("lo_ro_surround_mix_level")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def lt_rt_center_mix_level(self) -> typing.Optional[jsii.Number]:
            '''The Left total/Right total center mix level.

            Used only for a 3/2 coding mode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-ltrtcentermixlevel
            '''
            result = self._values.get("lt_rt_center_mix_level")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def lt_rt_surround_mix_level(self) -> typing.Optional[jsii.Number]:
            '''The Left total/Right total surround mix level.

            Used only for the 3/2 coding mode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-ltrtsurroundmixlevel
            '''
            result = self._values.get("lt_rt_surround_mix_level")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def metadata_control(self) -> typing.Optional[builtins.str]:
            '''When set to followInput, encoder metadata is sourced from the DD, DD+, or DolbyE decoder that supplies this audio data.

            If the audio is not supplied from one of these streams, then the static metadata settings are used.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-metadatacontrol
            '''
            result = self._values.get("metadata_control")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def passthrough_control(self) -> typing.Optional[builtins.str]:
            '''When set to whenPossible, input DD+ audio will be passed through if it is present on the input.

            This detection is dynamic over the life of the transcode. Inputs that alternate between DD+ and non-DD+ content will have a consistent DD+ output as the system alternates between passthrough and encoding.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-passthroughcontrol
            '''
            result = self._values.get("passthrough_control")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def phase_control(self) -> typing.Optional[builtins.str]:
            '''When set to shift90Degrees, applies a 90-degree phase shift to the surround channels.

            Used only for a 3/2 coding mode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-phasecontrol
            '''
            result = self._values.get("phase_control")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def stereo_downmix(self) -> typing.Optional[builtins.str]:
            '''A stereo downmix preference.

            Used only for the 3/2 coding mode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-stereodownmix
            '''
            result = self._values.get("stereo_downmix")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def surround_ex_mode(self) -> typing.Optional[builtins.str]:
            '''When encoding 3/2 audio, sets whether an extra center back surround channel is matrix encoded into the left and right surround channels.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-surroundexmode
            '''
            result = self._values.get("surround_ex_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def surround_mode(self) -> typing.Optional[builtins.str]:
            '''When encoding 2/0 audio, sets whether Dolby Surround is matrix-encoded into the two channels.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-eac3settings.html#cfn-medialive-channel-eac3settings-surroundmode
            '''
            result = self._values.get("surround_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "Eac3SettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.EbuTtDDestinationSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "copyright_holder": "copyrightHolder",
            "fill_line_gap": "fillLineGap",
            "font_family": "fontFamily",
            "style_control": "styleControl",
        },
    )
    class EbuTtDDestinationSettingsProperty:
        def __init__(
            self,
            *,
            copyright_holder: typing.Optional[builtins.str] = None,
            fill_line_gap: typing.Optional[builtins.str] = None,
            font_family: typing.Optional[builtins.str] = None,
            style_control: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Settings for EBU-TT captions in the output.

            The parent of this entity is CaptionDestinationSettings.

            :param copyright_holder: Applies only if you plan to convert these source captions to EBU-TT-D or TTML in an output. Complete this field if you want to include the name of the copyright holder in the copyright metadata tag in the TTML
            :param fill_line_gap: Specifies how to handle the gap between the lines (in multi-line captions). - enabled: Fill with the captions background color (as specified in the input captions). - disabled: Leave the gap unfilled.
            :param font_family: Specifies the font family to include in the font data attached to the EBU-TT captions. Valid only if styleControl is set to include. If you leave this field empty, the font family is set to "monospaced". (If styleControl is set to exclude, the font family is always set to "monospaced".) You specify only the font family. All other style information (color, bold, position and so on) is copied from the input captions. The size is always set to 100% to allow the downstream player to choose the size. - Enter a list of font families, as a comma-separated list of font names, in order of preference. The name can be a font family (such as “Arial”), or a generic font family (such as “serif”), or “default” (to let the downstream player choose the font). - Leave blank to set the family to “monospace”.
            :param style_control: Specifies the style information (font color, font position, and so on) to include in the font data that is attached to the EBU-TT captions. - include: Take the style information (font color, font position, and so on) from the source captions and include that information in the font data attached to the EBU-TT captions. This option is valid only if the source captions are Embedded or Teletext. - exclude: In the font data attached to the EBU-TT captions, set the font family to "monospaced". Do not include any other style information.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ebuttddestinationsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                ebu_tt_dDestination_settings_property = medialive.CfnChannel.EbuTtDDestinationSettingsProperty(
                    copyright_holder="copyrightHolder",
                    fill_line_gap="fillLineGap",
                    font_family="fontFamily",
                    style_control="styleControl"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__23559d0249cfbe262bfbd93ab48605fd9c25886b289f89b7e6b86a893ae4c78b)
                check_type(argname="argument copyright_holder", value=copyright_holder, expected_type=type_hints["copyright_holder"])
                check_type(argname="argument fill_line_gap", value=fill_line_gap, expected_type=type_hints["fill_line_gap"])
                check_type(argname="argument font_family", value=font_family, expected_type=type_hints["font_family"])
                check_type(argname="argument style_control", value=style_control, expected_type=type_hints["style_control"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if copyright_holder is not None:
                self._values["copyright_holder"] = copyright_holder
            if fill_line_gap is not None:
                self._values["fill_line_gap"] = fill_line_gap
            if font_family is not None:
                self._values["font_family"] = font_family
            if style_control is not None:
                self._values["style_control"] = style_control

        @builtins.property
        def copyright_holder(self) -> typing.Optional[builtins.str]:
            '''Applies only if you plan to convert these source captions to EBU-TT-D or TTML in an output.

            Complete this field if you want to include the name of the copyright holder in the copyright metadata tag in the TTML

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ebuttddestinationsettings.html#cfn-medialive-channel-ebuttddestinationsettings-copyrightholder
            '''
            result = self._values.get("copyright_holder")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def fill_line_gap(self) -> typing.Optional[builtins.str]:
            '''Specifies how to handle the gap between the lines (in multi-line captions).

            - enabled: Fill with the captions background color (as specified in the input captions).
            - disabled: Leave the gap unfilled.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ebuttddestinationsettings.html#cfn-medialive-channel-ebuttddestinationsettings-filllinegap
            '''
            result = self._values.get("fill_line_gap")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def font_family(self) -> typing.Optional[builtins.str]:
            '''Specifies the font family to include in the font data attached to the EBU-TT captions.

            Valid only if styleControl is set to include. If you leave this field empty, the font family is set to "monospaced". (If styleControl is set to exclude, the font family is always set to "monospaced".) You specify only the font family. All other style information (color, bold, position and so on) is copied from the input captions. The size is always set to 100% to allow the downstream player to choose the size. - Enter a list of font families, as a comma-separated list of font names, in order of preference. The name can be a font family (such as “Arial”), or a generic font family (such as “serif”), or “default” (to let the downstream player choose the font).

            - Leave blank to set the family to “monospace”.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ebuttddestinationsettings.html#cfn-medialive-channel-ebuttddestinationsettings-fontfamily
            '''
            result = self._values.get("font_family")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def style_control(self) -> typing.Optional[builtins.str]:
            '''Specifies the style information (font color, font position, and so on) to include in the font data that is attached to the EBU-TT captions.

            - include: Take the style information (font color, font position, and so on) from the source captions and include that information in the font data attached to the EBU-TT captions. This option is valid only if the source captions are Embedded or Teletext.
            - exclude: In the font data attached to the EBU-TT captions, set the font family to "monospaced". Do not include any other style information.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ebuttddestinationsettings.html#cfn-medialive-channel-ebuttddestinationsettings-stylecontrol
            '''
            result = self._values.get("style_control")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "EbuTtDDestinationSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.EmbeddedDestinationSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={},
    )
    class EmbeddedDestinationSettingsProperty:
        def __init__(self) -> None:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-embeddeddestinationsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                embedded_destination_settings_property = medialive.CfnChannel.EmbeddedDestinationSettingsProperty()
            '''
            self._values: typing.Dict[builtins.str, typing.Any] = {}

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "EmbeddedDestinationSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.EmbeddedPlusScte20DestinationSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={},
    )
    class EmbeddedPlusScte20DestinationSettingsProperty:
        def __init__(self) -> None:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-embeddedplusscte20destinationsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                embedded_plus_scte20_destination_settings_property = medialive.CfnChannel.EmbeddedPlusScte20DestinationSettingsProperty()
            '''
            self._values: typing.Dict[builtins.str, typing.Any] = {}

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "EmbeddedPlusScte20DestinationSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.EmbeddedSourceSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "convert608_to708": "convert608To708",
            "scte20_detection": "scte20Detection",
            "source608_channel_number": "source608ChannelNumber",
            "source608_track_number": "source608TrackNumber",
        },
    )
    class EmbeddedSourceSettingsProperty:
        def __init__(
            self,
            *,
            convert608_to708: typing.Optional[builtins.str] = None,
            scte20_detection: typing.Optional[builtins.str] = None,
            source608_channel_number: typing.Optional[jsii.Number] = None,
            source608_track_number: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Information about the embedded captions to extract from the input.

            The parent of this entity is CaptionSelectorSettings.

            :param convert608_to708: If this is upconvert, 608 data is both passed through the "608 compatibility bytes" fields of the 708 wrapper as well as translated into 708. If 708 data is present in the source content, it is discarded.
            :param scte20_detection: Set to "auto" to handle streams with intermittent or non-aligned SCTE-20 and embedded captions.
            :param source608_channel_number: Specifies the 608/708 channel number within the video track from which to extract captions. This is unused for passthrough.
            :param source608_track_number: This field is unused and deprecated.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-embeddedsourcesettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                embedded_source_settings_property = medialive.CfnChannel.EmbeddedSourceSettingsProperty(
                    convert608_to708="convert608To708",
                    scte20_detection="scte20Detection",
                    source608_channel_number=123,
                    source608_track_number=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__a5c32ccb3bb8518fb0dc08096320003c5a911953ab7ee23e451f5c5bdec2ddaa)
                check_type(argname="argument convert608_to708", value=convert608_to708, expected_type=type_hints["convert608_to708"])
                check_type(argname="argument scte20_detection", value=scte20_detection, expected_type=type_hints["scte20_detection"])
                check_type(argname="argument source608_channel_number", value=source608_channel_number, expected_type=type_hints["source608_channel_number"])
                check_type(argname="argument source608_track_number", value=source608_track_number, expected_type=type_hints["source608_track_number"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if convert608_to708 is not None:
                self._values["convert608_to708"] = convert608_to708
            if scte20_detection is not None:
                self._values["scte20_detection"] = scte20_detection
            if source608_channel_number is not None:
                self._values["source608_channel_number"] = source608_channel_number
            if source608_track_number is not None:
                self._values["source608_track_number"] = source608_track_number

        @builtins.property
        def convert608_to708(self) -> typing.Optional[builtins.str]:
            '''If this is upconvert, 608 data is both passed through the "608 compatibility bytes" fields of the 708 wrapper as well as translated into 708.

            If 708 data is present in the source content, it is discarded.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-embeddedsourcesettings.html#cfn-medialive-channel-embeddedsourcesettings-convert608to708
            '''
            result = self._values.get("convert608_to708")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def scte20_detection(self) -> typing.Optional[builtins.str]:
            '''Set to "auto" to handle streams with intermittent or non-aligned SCTE-20 and embedded captions.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-embeddedsourcesettings.html#cfn-medialive-channel-embeddedsourcesettings-scte20detection
            '''
            result = self._values.get("scte20_detection")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def source608_channel_number(self) -> typing.Optional[jsii.Number]:
            '''Specifies the 608/708 channel number within the video track from which to extract captions.

            This is unused for passthrough.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-embeddedsourcesettings.html#cfn-medialive-channel-embeddedsourcesettings-source608channelnumber
            '''
            result = self._values.get("source608_channel_number")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def source608_track_number(self) -> typing.Optional[jsii.Number]:
            '''This field is unused and deprecated.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-embeddedsourcesettings.html#cfn-medialive-channel-embeddedsourcesettings-source608tracknumber
            '''
            result = self._values.get("source608_track_number")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "EmbeddedSourceSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.EncoderSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "audio_descriptions": "audioDescriptions",
            "avail_blanking": "availBlanking",
            "avail_configuration": "availConfiguration",
            "blackout_slate": "blackoutSlate",
            "caption_descriptions": "captionDescriptions",
            "color_correction_settings": "colorCorrectionSettings",
            "feature_activations": "featureActivations",
            "global_configuration": "globalConfiguration",
            "motion_graphics_configuration": "motionGraphicsConfiguration",
            "nielsen_configuration": "nielsenConfiguration",
            "output_groups": "outputGroups",
            "thumbnail_configuration": "thumbnailConfiguration",
            "timecode_config": "timecodeConfig",
            "video_descriptions": "videoDescriptions",
        },
    )
    class EncoderSettingsProperty:
        def __init__(
            self,
            *,
            audio_descriptions: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AudioDescriptionProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            avail_blanking: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AvailBlankingProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            avail_configuration: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AvailConfigurationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            blackout_slate: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.BlackoutSlateProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            caption_descriptions: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.CaptionDescriptionProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            color_correction_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.ColorCorrectionSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            feature_activations: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.FeatureActivationsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            global_configuration: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.GlobalConfigurationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            motion_graphics_configuration: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.MotionGraphicsConfigurationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            nielsen_configuration: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.NielsenConfigurationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            output_groups: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.OutputGroupProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            thumbnail_configuration: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.ThumbnailConfigurationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            timecode_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.TimecodeConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            video_descriptions: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.VideoDescriptionProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        ) -> None:
            '''The settings for the encoding of outputs.

            This entity is at the top level in the channel.

            :param audio_descriptions: The encoding information for output audio.
            :param avail_blanking: The settings for ad avail blanking.
            :param avail_configuration: The configuration settings for the ad avail handling.
            :param blackout_slate: The settings for the blackout slate.
            :param caption_descriptions: The encoding information for output captions.
            :param color_correction_settings: 
            :param feature_activations: Settings to enable specific features.
            :param global_configuration: The configuration settings that apply to the entire channel.
            :param motion_graphics_configuration: Settings to enable and configure the motion graphics overlay feature in the channel.
            :param nielsen_configuration: The settings to configure Nielsen watermarks.
            :param output_groups: The settings for the output groups in the channel.
            :param thumbnail_configuration: 
            :param timecode_config: Contains settings used to acquire and adjust timecode information from the inputs.
            :param video_descriptions: The encoding information for output videos.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html
            :exampleMetadata: fixture=_generated

            Example::

                
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__1550473612e113e3bb9a6bc779aa44db3880446b6c6df662b82051f73e740b89)
                check_type(argname="argument audio_descriptions", value=audio_descriptions, expected_type=type_hints["audio_descriptions"])
                check_type(argname="argument avail_blanking", value=avail_blanking, expected_type=type_hints["avail_blanking"])
                check_type(argname="argument avail_configuration", value=avail_configuration, expected_type=type_hints["avail_configuration"])
                check_type(argname="argument blackout_slate", value=blackout_slate, expected_type=type_hints["blackout_slate"])
                check_type(argname="argument caption_descriptions", value=caption_descriptions, expected_type=type_hints["caption_descriptions"])
                check_type(argname="argument color_correction_settings", value=color_correction_settings, expected_type=type_hints["color_correction_settings"])
                check_type(argname="argument feature_activations", value=feature_activations, expected_type=type_hints["feature_activations"])
                check_type(argname="argument global_configuration", value=global_configuration, expected_type=type_hints["global_configuration"])
                check_type(argname="argument motion_graphics_configuration", value=motion_graphics_configuration, expected_type=type_hints["motion_graphics_configuration"])
                check_type(argname="argument nielsen_configuration", value=nielsen_configuration, expected_type=type_hints["nielsen_configuration"])
                check_type(argname="argument output_groups", value=output_groups, expected_type=type_hints["output_groups"])
                check_type(argname="argument thumbnail_configuration", value=thumbnail_configuration, expected_type=type_hints["thumbnail_configuration"])
                check_type(argname="argument timecode_config", value=timecode_config, expected_type=type_hints["timecode_config"])
                check_type(argname="argument video_descriptions", value=video_descriptions, expected_type=type_hints["video_descriptions"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if audio_descriptions is not None:
                self._values["audio_descriptions"] = audio_descriptions
            if avail_blanking is not None:
                self._values["avail_blanking"] = avail_blanking
            if avail_configuration is not None:
                self._values["avail_configuration"] = avail_configuration
            if blackout_slate is not None:
                self._values["blackout_slate"] = blackout_slate
            if caption_descriptions is not None:
                self._values["caption_descriptions"] = caption_descriptions
            if color_correction_settings is not None:
                self._values["color_correction_settings"] = color_correction_settings
            if feature_activations is not None:
                self._values["feature_activations"] = feature_activations
            if global_configuration is not None:
                self._values["global_configuration"] = global_configuration
            if motion_graphics_configuration is not None:
                self._values["motion_graphics_configuration"] = motion_graphics_configuration
            if nielsen_configuration is not None:
                self._values["nielsen_configuration"] = nielsen_configuration
            if output_groups is not None:
                self._values["output_groups"] = output_groups
            if thumbnail_configuration is not None:
                self._values["thumbnail_configuration"] = thumbnail_configuration
            if timecode_config is not None:
                self._values["timecode_config"] = timecode_config
            if video_descriptions is not None:
                self._values["video_descriptions"] = video_descriptions

        @builtins.property
        def audio_descriptions(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioDescriptionProperty"]]]]:
            '''The encoding information for output audio.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-audiodescriptions
            '''
            result = self._values.get("audio_descriptions")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioDescriptionProperty"]]]], result)

        @builtins.property
        def avail_blanking(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AvailBlankingProperty"]]:
            '''The settings for ad avail blanking.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-availblanking
            '''
            result = self._values.get("avail_blanking")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AvailBlankingProperty"]], result)

        @builtins.property
        def avail_configuration(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AvailConfigurationProperty"]]:
            '''The configuration settings for the ad avail handling.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-availconfiguration
            '''
            result = self._values.get("avail_configuration")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AvailConfigurationProperty"]], result)

        @builtins.property
        def blackout_slate(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.BlackoutSlateProperty"]]:
            '''The settings for the blackout slate.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-blackoutslate
            '''
            result = self._values.get("blackout_slate")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.BlackoutSlateProperty"]], result)

        @builtins.property
        def caption_descriptions(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.CaptionDescriptionProperty"]]]]:
            '''The encoding information for output captions.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-captiondescriptions
            '''
            result = self._values.get("caption_descriptions")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.CaptionDescriptionProperty"]]]], result)

        @builtins.property
        def color_correction_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.ColorCorrectionSettingsProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-colorcorrectionsettings
            '''
            result = self._values.get("color_correction_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.ColorCorrectionSettingsProperty"]], result)

        @builtins.property
        def feature_activations(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.FeatureActivationsProperty"]]:
            '''Settings to enable specific features.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-featureactivations
            '''
            result = self._values.get("feature_activations")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.FeatureActivationsProperty"]], result)

        @builtins.property
        def global_configuration(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.GlobalConfigurationProperty"]]:
            '''The configuration settings that apply to the entire channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-globalconfiguration
            '''
            result = self._values.get("global_configuration")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.GlobalConfigurationProperty"]], result)

        @builtins.property
        def motion_graphics_configuration(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MotionGraphicsConfigurationProperty"]]:
            '''Settings to enable and configure the motion graphics overlay feature in the channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-motiongraphicsconfiguration
            '''
            result = self._values.get("motion_graphics_configuration")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MotionGraphicsConfigurationProperty"]], result)

        @builtins.property
        def nielsen_configuration(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.NielsenConfigurationProperty"]]:
            '''The settings to configure Nielsen watermarks.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-nielsenconfiguration
            '''
            result = self._values.get("nielsen_configuration")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.NielsenConfigurationProperty"]], result)

        @builtins.property
        def output_groups(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputGroupProperty"]]]]:
            '''The settings for the output groups in the channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-outputgroups
            '''
            result = self._values.get("output_groups")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputGroupProperty"]]]], result)

        @builtins.property
        def thumbnail_configuration(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.ThumbnailConfigurationProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-thumbnailconfiguration
            '''
            result = self._values.get("thumbnail_configuration")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.ThumbnailConfigurationProperty"]], result)

        @builtins.property
        def timecode_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TimecodeConfigProperty"]]:
            '''Contains settings used to acquire and adjust timecode information from the inputs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-timecodeconfig
            '''
            result = self._values.get("timecode_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TimecodeConfigProperty"]], result)

        @builtins.property
        def video_descriptions(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.VideoDescriptionProperty"]]]]:
            '''The encoding information for output videos.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-encodersettings.html#cfn-medialive-channel-encodersettings-videodescriptions
            '''
            result = self._values.get("video_descriptions")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.VideoDescriptionProperty"]]]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "EncoderSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.EpochLockingSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"custom_epoch": "customEpoch", "jam_sync_time": "jamSyncTime"},
    )
    class EpochLockingSettingsProperty:
        def __init__(
            self,
            *,
            custom_epoch: typing.Optional[builtins.str] = None,
            jam_sync_time: typing.Optional[builtins.str] = None,
        ) -> None:
            '''
            :param custom_epoch: 
            :param jam_sync_time: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-epochlockingsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                epoch_locking_settings_property = medialive.CfnChannel.EpochLockingSettingsProperty(
                    custom_epoch="customEpoch",
                    jam_sync_time="jamSyncTime"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__fb6d37850c7ce928ab79e708afb2c3e1d2b3c39ba631a755e1e8cc45f51423c0)
                check_type(argname="argument custom_epoch", value=custom_epoch, expected_type=type_hints["custom_epoch"])
                check_type(argname="argument jam_sync_time", value=jam_sync_time, expected_type=type_hints["jam_sync_time"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if custom_epoch is not None:
                self._values["custom_epoch"] = custom_epoch
            if jam_sync_time is not None:
                self._values["jam_sync_time"] = jam_sync_time

        @builtins.property
        def custom_epoch(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-epochlockingsettings.html#cfn-medialive-channel-epochlockingsettings-customepoch
            '''
            result = self._values.get("custom_epoch")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def jam_sync_time(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-epochlockingsettings.html#cfn-medialive-channel-epochlockingsettings-jamsynctime
            '''
            result = self._values.get("jam_sync_time")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "EpochLockingSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.EsamProperty",
        jsii_struct_bases=[],
        name_mapping={
            "acquisition_point_id": "acquisitionPointId",
            "ad_avail_offset": "adAvailOffset",
            "password_param": "passwordParam",
            "pois_endpoint": "poisEndpoint",
            "username": "username",
            "zone_identity": "zoneIdentity",
        },
    )
    class EsamProperty:
        def __init__(
            self,
            *,
            acquisition_point_id: typing.Optional[builtins.str] = None,
            ad_avail_offset: typing.Optional[jsii.Number] = None,
            password_param: typing.Optional[builtins.str] = None,
            pois_endpoint: typing.Optional[builtins.str] = None,
            username: typing.Optional[builtins.str] = None,
            zone_identity: typing.Optional[builtins.str] = None,
        ) -> None:
            '''
            :param acquisition_point_id: 
            :param ad_avail_offset: 
            :param password_param: 
            :param pois_endpoint: 
            :param username: 
            :param zone_identity: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-esam.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                esam_property = medialive.CfnChannel.EsamProperty(
                    acquisition_point_id="acquisitionPointId",
                    ad_avail_offset=123,
                    password_param="passwordParam",
                    pois_endpoint="poisEndpoint",
                    username="username",
                    zone_identity="zoneIdentity"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__4077ad1492a38ea5a8fa0a0c0d5ce9bd642323f24d366b8d6bb581fd5a6f7a00)
                check_type(argname="argument acquisition_point_id", value=acquisition_point_id, expected_type=type_hints["acquisition_point_id"])
                check_type(argname="argument ad_avail_offset", value=ad_avail_offset, expected_type=type_hints["ad_avail_offset"])
                check_type(argname="argument password_param", value=password_param, expected_type=type_hints["password_param"])
                check_type(argname="argument pois_endpoint", value=pois_endpoint, expected_type=type_hints["pois_endpoint"])
                check_type(argname="argument username", value=username, expected_type=type_hints["username"])
                check_type(argname="argument zone_identity", value=zone_identity, expected_type=type_hints["zone_identity"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if acquisition_point_id is not None:
                self._values["acquisition_point_id"] = acquisition_point_id
            if ad_avail_offset is not None:
                self._values["ad_avail_offset"] = ad_avail_offset
            if password_param is not None:
                self._values["password_param"] = password_param
            if pois_endpoint is not None:
                self._values["pois_endpoint"] = pois_endpoint
            if username is not None:
                self._values["username"] = username
            if zone_identity is not None:
                self._values["zone_identity"] = zone_identity

        @builtins.property
        def acquisition_point_id(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-esam.html#cfn-medialive-channel-esam-acquisitionpointid
            '''
            result = self._values.get("acquisition_point_id")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def ad_avail_offset(self) -> typing.Optional[jsii.Number]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-esam.html#cfn-medialive-channel-esam-adavailoffset
            '''
            result = self._values.get("ad_avail_offset")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def password_param(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-esam.html#cfn-medialive-channel-esam-passwordparam
            '''
            result = self._values.get("password_param")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def pois_endpoint(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-esam.html#cfn-medialive-channel-esam-poisendpoint
            '''
            result = self._values.get("pois_endpoint")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def username(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-esam.html#cfn-medialive-channel-esam-username
            '''
            result = self._values.get("username")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def zone_identity(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-esam.html#cfn-medialive-channel-esam-zoneidentity
            '''
            result = self._values.get("zone_identity")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "EsamProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.FailoverConditionProperty",
        jsii_struct_bases=[],
        name_mapping={"failover_condition_settings": "failoverConditionSettings"},
    )
    class FailoverConditionProperty:
        def __init__(
            self,
            *,
            failover_condition_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.FailoverConditionSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Failover Condition settings. There can be multiple failover conditions inside AutomaticInputFailoverSettings.

            The parent of this entity is AutomaticInputFailoverSettings.

            :param failover_condition_settings: Settings for a specific failover condition.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failovercondition.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                failover_condition_property = medialive.CfnChannel.FailoverConditionProperty(
                    failover_condition_settings=medialive.CfnChannel.FailoverConditionSettingsProperty(
                        audio_silence_settings=medialive.CfnChannel.AudioSilenceFailoverSettingsProperty(
                            audio_selector_name="audioSelectorName",
                            audio_silence_threshold_msec=123
                        ),
                        input_loss_settings=medialive.CfnChannel.InputLossFailoverSettingsProperty(
                            input_loss_threshold_msec=123
                        ),
                        video_black_settings=medialive.CfnChannel.VideoBlackFailoverSettingsProperty(
                            black_detect_threshold=123,
                            video_black_threshold_msec=123
                        )
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__b86ab0f1872a24213fd950f22416c7914d75d909d5ac3cdd0fbf2a47ff4c5da5)
                check_type(argname="argument failover_condition_settings", value=failover_condition_settings, expected_type=type_hints["failover_condition_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if failover_condition_settings is not None:
                self._values["failover_condition_settings"] = failover_condition_settings

        @builtins.property
        def failover_condition_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.FailoverConditionSettingsProperty"]]:
            '''Settings for a specific failover condition.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failovercondition.html#cfn-medialive-channel-failovercondition-failoverconditionsettings
            '''
            result = self._values.get("failover_condition_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.FailoverConditionSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "FailoverConditionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.FailoverConditionSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "audio_silence_settings": "audioSilenceSettings",
            "input_loss_settings": "inputLossSettings",
            "video_black_settings": "videoBlackSettings",
        },
    )
    class FailoverConditionSettingsProperty:
        def __init__(
            self,
            *,
            audio_silence_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AudioSilenceFailoverSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            input_loss_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.InputLossFailoverSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            video_black_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.VideoBlackFailoverSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Settings for one failover condition.

            The parent of this entity is FailoverCondition.

            :param audio_silence_settings: MediaLive will perform a failover if the specified audio selector is silent for the specified period.
            :param input_loss_settings: MediaLive will perform a failover if content is not detected in this input for the specified period.
            :param video_black_settings: MediaLive will perform a failover if content is considered black for the specified period.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failoverconditionsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                failover_condition_settings_property = medialive.CfnChannel.FailoverConditionSettingsProperty(
                    audio_silence_settings=medialive.CfnChannel.AudioSilenceFailoverSettingsProperty(
                        audio_selector_name="audioSelectorName",
                        audio_silence_threshold_msec=123
                    ),
                    input_loss_settings=medialive.CfnChannel.InputLossFailoverSettingsProperty(
                        input_loss_threshold_msec=123
                    ),
                    video_black_settings=medialive.CfnChannel.VideoBlackFailoverSettingsProperty(
                        black_detect_threshold=123,
                        video_black_threshold_msec=123
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__481ff97a24b04c9b69ab7346a30a4565f6f6010ddc1eed7f00215b2ed1974efb)
                check_type(argname="argument audio_silence_settings", value=audio_silence_settings, expected_type=type_hints["audio_silence_settings"])
                check_type(argname="argument input_loss_settings", value=input_loss_settings, expected_type=type_hints["input_loss_settings"])
                check_type(argname="argument video_black_settings", value=video_black_settings, expected_type=type_hints["video_black_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if audio_silence_settings is not None:
                self._values["audio_silence_settings"] = audio_silence_settings
            if input_loss_settings is not None:
                self._values["input_loss_settings"] = input_loss_settings
            if video_black_settings is not None:
                self._values["video_black_settings"] = video_black_settings

        @builtins.property
        def audio_silence_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioSilenceFailoverSettingsProperty"]]:
            '''MediaLive will perform a failover if the specified audio selector is silent for the specified period.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failoverconditionsettings.html#cfn-medialive-channel-failoverconditionsettings-audiosilencesettings
            '''
            result = self._values.get("audio_silence_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioSilenceFailoverSettingsProperty"]], result)

        @builtins.property
        def input_loss_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputLossFailoverSettingsProperty"]]:
            '''MediaLive will perform a failover if content is not detected in this input for the specified period.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failoverconditionsettings.html#cfn-medialive-channel-failoverconditionsettings-inputlosssettings
            '''
            result = self._values.get("input_loss_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputLossFailoverSettingsProperty"]], result)

        @builtins.property
        def video_black_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.VideoBlackFailoverSettingsProperty"]]:
            '''MediaLive will perform a failover if content is considered black for the specified period.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-failoverconditionsettings.html#cfn-medialive-channel-failoverconditionsettings-videoblacksettings
            '''
            result = self._values.get("video_black_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.VideoBlackFailoverSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "FailoverConditionSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.FeatureActivationsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "input_prepare_schedule_actions": "inputPrepareScheduleActions",
            "output_static_image_overlay_schedule_actions": "outputStaticImageOverlayScheduleActions",
        },
    )
    class FeatureActivationsProperty:
        def __init__(
            self,
            *,
            input_prepare_schedule_actions: typing.Optional[builtins.str] = None,
            output_static_image_overlay_schedule_actions: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Settings to enable specific features. You can't configure these features until you have enabled them in the channel.

            The parent of this entity is EncoderSettings.

            :param input_prepare_schedule_actions: Enables the Input Prepare feature. You can create Input Prepare actions in the schedule only if this feature is enabled. If you disable the feature on an existing schedule, make sure that you first delete all input prepare actions from the schedule.
            :param output_static_image_overlay_schedule_actions: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-featureactivations.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                feature_activations_property = medialive.CfnChannel.FeatureActivationsProperty(
                    input_prepare_schedule_actions="inputPrepareScheduleActions",
                    output_static_image_overlay_schedule_actions="outputStaticImageOverlayScheduleActions"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__a6b1cf0a0942395d620c3188a0c9d1eff2b7dd224fa2c918240797d5f448b0ee)
                check_type(argname="argument input_prepare_schedule_actions", value=input_prepare_schedule_actions, expected_type=type_hints["input_prepare_schedule_actions"])
                check_type(argname="argument output_static_image_overlay_schedule_actions", value=output_static_image_overlay_schedule_actions, expected_type=type_hints["output_static_image_overlay_schedule_actions"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if input_prepare_schedule_actions is not None:
                self._values["input_prepare_schedule_actions"] = input_prepare_schedule_actions
            if output_static_image_overlay_schedule_actions is not None:
                self._values["output_static_image_overlay_schedule_actions"] = output_static_image_overlay_schedule_actions

        @builtins.property
        def input_prepare_schedule_actions(self) -> typing.Optional[builtins.str]:
            '''Enables the Input Prepare feature.

            You can create Input Prepare actions in the schedule only if this feature is enabled.
            If you disable the feature on an existing schedule, make sure that you first delete all input prepare actions from the schedule.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-featureactivations.html#cfn-medialive-channel-featureactivations-inputpreparescheduleactions
            '''
            result = self._values.get("input_prepare_schedule_actions")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def output_static_image_overlay_schedule_actions(
            self,
        ) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-featureactivations.html#cfn-medialive-channel-featureactivations-outputstaticimageoverlayscheduleactions
            '''
            result = self._values.get("output_static_image_overlay_schedule_actions")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "FeatureActivationsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.FecOutputSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "column_depth": "columnDepth",
            "include_fec": "includeFec",
            "row_length": "rowLength",
        },
    )
    class FecOutputSettingsProperty:
        def __init__(
            self,
            *,
            column_depth: typing.Optional[jsii.Number] = None,
            include_fec: typing.Optional[builtins.str] = None,
            row_length: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The settings for FEC.

            The parent of this entity is UdpOutputSettings.

            :param column_depth: The parameter D from SMPTE 2022-1. The height of the FEC protection matrix. The number of transport stream packets per column error correction packet. The number must be between 4 and 20, inclusive.
            :param include_fec: Enables column only or column and row-based FEC.
            :param row_length: The parameter L from SMPTE 2022-1. The width of the FEC protection matrix. Must be between 1 and 20, inclusive. If only Column FEC is used, then larger values increase robustness. If Row FEC is used, then this is the number of transport stream packets per row error correction packet, and the value must be between 4 and 20, inclusive, if includeFec is columnAndRow. If includeFec is column, this value must be 1 to 20, inclusive.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fecoutputsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                fec_output_settings_property = medialive.CfnChannel.FecOutputSettingsProperty(
                    column_depth=123,
                    include_fec="includeFec",
                    row_length=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__fb8c892060c0565904005165c09191e9e3f9077cd1fb12bac08e574d8227f37c)
                check_type(argname="argument column_depth", value=column_depth, expected_type=type_hints["column_depth"])
                check_type(argname="argument include_fec", value=include_fec, expected_type=type_hints["include_fec"])
                check_type(argname="argument row_length", value=row_length, expected_type=type_hints["row_length"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if column_depth is not None:
                self._values["column_depth"] = column_depth
            if include_fec is not None:
                self._values["include_fec"] = include_fec
            if row_length is not None:
                self._values["row_length"] = row_length

        @builtins.property
        def column_depth(self) -> typing.Optional[jsii.Number]:
            '''The parameter D from SMPTE 2022-1.

            The height of the FEC protection matrix. The number of transport stream packets per column error correction packet. The number must be between 4 and 20, inclusive.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fecoutputsettings.html#cfn-medialive-channel-fecoutputsettings-columndepth
            '''
            result = self._values.get("column_depth")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def include_fec(self) -> typing.Optional[builtins.str]:
            '''Enables column only or column and row-based FEC.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fecoutputsettings.html#cfn-medialive-channel-fecoutputsettings-includefec
            '''
            result = self._values.get("include_fec")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def row_length(self) -> typing.Optional[jsii.Number]:
            '''The parameter L from SMPTE 2022-1.

            The width of the FEC protection matrix. Must be between 1 and 20, inclusive. If only Column FEC is used, then larger values increase robustness. If Row FEC is used, then this is the number of transport stream packets per row error correction packet, and the value must be between 4 and 20, inclusive, if includeFec is columnAndRow. If includeFec is column, this value must be 1 to 20, inclusive.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fecoutputsettings.html#cfn-medialive-channel-fecoutputsettings-rowlength
            '''
            result = self._values.get("row_length")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "FecOutputSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.Fmp4HlsSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "audio_rendition_sets": "audioRenditionSets",
            "nielsen_id3_behavior": "nielsenId3Behavior",
            "timed_metadata_behavior": "timedMetadataBehavior",
        },
    )
    class Fmp4HlsSettingsProperty:
        def __init__(
            self,
            *,
            audio_rendition_sets: typing.Optional[builtins.str] = None,
            nielsen_id3_behavior: typing.Optional[builtins.str] = None,
            timed_metadata_behavior: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Settings for the fMP4 containers.

            The parent of this entity is HlsSettings.

            :param audio_rendition_sets: List all the audio groups that are used with the video output stream. Input all the audio GROUP-IDs that are associated to the video, separate by ','.
            :param nielsen_id3_behavior: If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.
            :param timed_metadata_behavior: When set to passthrough, timed metadata is passed through from input to output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fmp4hlssettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                fmp4_hls_settings_property = medialive.CfnChannel.Fmp4HlsSettingsProperty(
                    audio_rendition_sets="audioRenditionSets",
                    nielsen_id3_behavior="nielsenId3Behavior",
                    timed_metadata_behavior="timedMetadataBehavior"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__083543bbfcc983933dcd032f2995caa7a42e85e15332719207408bfbbbe5f43e)
                check_type(argname="argument audio_rendition_sets", value=audio_rendition_sets, expected_type=type_hints["audio_rendition_sets"])
                check_type(argname="argument nielsen_id3_behavior", value=nielsen_id3_behavior, expected_type=type_hints["nielsen_id3_behavior"])
                check_type(argname="argument timed_metadata_behavior", value=timed_metadata_behavior, expected_type=type_hints["timed_metadata_behavior"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if audio_rendition_sets is not None:
                self._values["audio_rendition_sets"] = audio_rendition_sets
            if nielsen_id3_behavior is not None:
                self._values["nielsen_id3_behavior"] = nielsen_id3_behavior
            if timed_metadata_behavior is not None:
                self._values["timed_metadata_behavior"] = timed_metadata_behavior

        @builtins.property
        def audio_rendition_sets(self) -> typing.Optional[builtins.str]:
            '''List all the audio groups that are used with the video output stream.

            Input all the audio GROUP-IDs that are associated to the video, separate by ','.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fmp4hlssettings.html#cfn-medialive-channel-fmp4hlssettings-audiorenditionsets
            '''
            result = self._values.get("audio_rendition_sets")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def nielsen_id3_behavior(self) -> typing.Optional[builtins.str]:
            '''If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fmp4hlssettings.html#cfn-medialive-channel-fmp4hlssettings-nielsenid3behavior
            '''
            result = self._values.get("nielsen_id3_behavior")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def timed_metadata_behavior(self) -> typing.Optional[builtins.str]:
            '''When set to passthrough, timed metadata is passed through from input to output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-fmp4hlssettings.html#cfn-medialive-channel-fmp4hlssettings-timedmetadatabehavior
            '''
            result = self._values.get("timed_metadata_behavior")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "Fmp4HlsSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.FrameCaptureCdnSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"frame_capture_s3_settings": "frameCaptureS3Settings"},
    )
    class FrameCaptureCdnSettingsProperty:
        def __init__(
            self,
            *,
            frame_capture_s3_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.FrameCaptureS3SettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Settings to configure the destination of a Frame Capture output.

            The parent of this entity is FrameCaptureGroupSettings.

            :param frame_capture_s3_settings: Sets up Amazon S3 as the destination for this Frame Capture output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturecdnsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                frame_capture_cdn_settings_property = medialive.CfnChannel.FrameCaptureCdnSettingsProperty(
                    frame_capture_s3_settings=medialive.CfnChannel.FrameCaptureS3SettingsProperty(
                        canned_acl="cannedAcl"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__02bd05ffdb6de2491773d7ccb53d8d6f9ffc22520b2423f14dcefad239054595)
                check_type(argname="argument frame_capture_s3_settings", value=frame_capture_s3_settings, expected_type=type_hints["frame_capture_s3_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if frame_capture_s3_settings is not None:
                self._values["frame_capture_s3_settings"] = frame_capture_s3_settings

        @builtins.property
        def frame_capture_s3_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.FrameCaptureS3SettingsProperty"]]:
            '''Sets up Amazon S3 as the destination for this Frame Capture output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturecdnsettings.html#cfn-medialive-channel-framecapturecdnsettings-framecaptures3settings
            '''
            result = self._values.get("frame_capture_s3_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.FrameCaptureS3SettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "FrameCaptureCdnSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.FrameCaptureGroupSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "destination": "destination",
            "frame_capture_cdn_settings": "frameCaptureCdnSettings",
        },
    )
    class FrameCaptureGroupSettingsProperty:
        def __init__(
            self,
            *,
            destination: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.OutputLocationRefProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            frame_capture_cdn_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.FrameCaptureCdnSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The settings for a frame capture output group.

            The parent of this entity is OutputGroupSettings.

            :param destination: The destination for the frame capture files. The destination is either the URI for an Amazon S3 bucket and object, plus a file name prefix (for example, s3ssl://sportsDelivery/highlights/20180820/curling_) or the URI for a MediaStore container, plus a file name prefix (for example, mediastoressl://sportsDelivery/20180820/curling_). The final file names consist of the prefix from the destination field (for example, "curling_") + name modifier + the counter (5 digits, starting from 00001) + extension (which is always .jpg). For example, curlingLow.00001.jpg.
            :param frame_capture_cdn_settings: Settings to configure the destination of a Frame Capture output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturegroupsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                frame_capture_group_settings_property = medialive.CfnChannel.FrameCaptureGroupSettingsProperty(
                    destination=medialive.CfnChannel.OutputLocationRefProperty(
                        destination_ref_id="destinationRefId"
                    ),
                    frame_capture_cdn_settings=medialive.CfnChannel.FrameCaptureCdnSettingsProperty(
                        frame_capture_s3_settings=medialive.CfnChannel.FrameCaptureS3SettingsProperty(
                            canned_acl="cannedAcl"
                        )
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__4b76f4b037adac2a57466315cd669974766577e9b0a38e09879d3d0962aa0c0a)
                check_type(argname="argument destination", value=destination, expected_type=type_hints["destination"])
                check_type(argname="argument frame_capture_cdn_settings", value=frame_capture_cdn_settings, expected_type=type_hints["frame_capture_cdn_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if destination is not None:
                self._values["destination"] = destination
            if frame_capture_cdn_settings is not None:
                self._values["frame_capture_cdn_settings"] = frame_capture_cdn_settings

        @builtins.property
        def destination(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputLocationRefProperty"]]:
            '''The destination for the frame capture files.

            The destination is either the URI for an Amazon S3 bucket and object, plus a file name prefix (for example, s3ssl://sportsDelivery/highlights/20180820/curling_) or the URI for a MediaStore container, plus a file name prefix (for example, mediastoressl://sportsDelivery/20180820/curling_). The final file names consist of the prefix from the destination field (for example, "curling_") + name modifier + the counter (5 digits, starting from 00001) + extension (which is always .jpg). For example, curlingLow.00001.jpg.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturegroupsettings.html#cfn-medialive-channel-framecapturegroupsettings-destination
            '''
            result = self._values.get("destination")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputLocationRefProperty"]], result)

        @builtins.property
        def frame_capture_cdn_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.FrameCaptureCdnSettingsProperty"]]:
            '''Settings to configure the destination of a Frame Capture output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturegroupsettings.html#cfn-medialive-channel-framecapturegroupsettings-framecapturecdnsettings
            '''
            result = self._values.get("frame_capture_cdn_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.FrameCaptureCdnSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "FrameCaptureGroupSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.FrameCaptureHlsSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={},
    )
    class FrameCaptureHlsSettingsProperty:
        def __init__(self) -> None:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturehlssettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                frame_capture_hls_settings_property = medialive.CfnChannel.FrameCaptureHlsSettingsProperty()
            '''
            self._values: typing.Dict[builtins.str, typing.Any] = {}

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "FrameCaptureHlsSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.FrameCaptureOutputSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"name_modifier": "nameModifier"},
    )
    class FrameCaptureOutputSettingsProperty:
        def __init__(
            self,
            *,
            name_modifier: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The frame capture output settings.

            The parent of this entity is OutputSettings.

            :param name_modifier: Required if the output group contains more than one output. This modifier forms part of the output file name.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecaptureoutputsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                frame_capture_output_settings_property = medialive.CfnChannel.FrameCaptureOutputSettingsProperty(
                    name_modifier="nameModifier"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__93ac417742c559eba667f579a6de8baf86fa48ae5dca653af1bf8bc7f0116b5e)
                check_type(argname="argument name_modifier", value=name_modifier, expected_type=type_hints["name_modifier"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if name_modifier is not None:
                self._values["name_modifier"] = name_modifier

        @builtins.property
        def name_modifier(self) -> typing.Optional[builtins.str]:
            '''Required if the output group contains more than one output.

            This modifier forms part of the output file name.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecaptureoutputsettings.html#cfn-medialive-channel-framecaptureoutputsettings-namemodifier
            '''
            result = self._values.get("name_modifier")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "FrameCaptureOutputSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.FrameCaptureS3SettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"canned_acl": "cannedAcl"},
    )
    class FrameCaptureS3SettingsProperty:
        def __init__(self, *, canned_acl: typing.Optional[builtins.str] = None) -> None:
            '''Sets up Amazon S3 as the destination for this Frame Capture output.

            The parent of this entity is FrameCaptureCdnSettings.

            :param canned_acl: Specify the canned ACL to apply to each S3 request. Defaults to none.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecaptures3settings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                frame_capture_s3_settings_property = medialive.CfnChannel.FrameCaptureS3SettingsProperty(
                    canned_acl="cannedAcl"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__608cd69ff6cb082c405345ebf0958c0d9d97f729ccdc8085fb167d4650e84b95)
                check_type(argname="argument canned_acl", value=canned_acl, expected_type=type_hints["canned_acl"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if canned_acl is not None:
                self._values["canned_acl"] = canned_acl

        @builtins.property
        def canned_acl(self) -> typing.Optional[builtins.str]:
            '''Specify the canned ACL to apply to each S3 request.

            Defaults to none.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecaptures3settings.html#cfn-medialive-channel-framecaptures3settings-cannedacl
            '''
            result = self._values.get("canned_acl")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "FrameCaptureS3SettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.FrameCaptureSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "capture_interval": "captureInterval",
            "capture_interval_units": "captureIntervalUnits",
            "timecode_burnin_settings": "timecodeBurninSettings",
        },
    )
    class FrameCaptureSettingsProperty:
        def __init__(
            self,
            *,
            capture_interval: typing.Optional[jsii.Number] = None,
            capture_interval_units: typing.Optional[builtins.str] = None,
            timecode_burnin_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.TimecodeBurninSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The frame capture settings.

            The parent of this entity is VideoCodecSettings.

            :param capture_interval: The frequency, in seconds, for capturing frames for inclusion in the output. For example, "10" means capture a frame every 10 seconds.
            :param capture_interval_units: Unit for the frame capture interval.
            :param timecode_burnin_settings: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturesettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                frame_capture_settings_property = medialive.CfnChannel.FrameCaptureSettingsProperty(
                    capture_interval=123,
                    capture_interval_units="captureIntervalUnits",
                    timecode_burnin_settings=medialive.CfnChannel.TimecodeBurninSettingsProperty(
                        font_size="fontSize",
                        position="position",
                        prefix="prefix"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__19e41af5678ca6e9b78017305d8b8af9d6f40b8a22c5045148bcb6f53e81f182)
                check_type(argname="argument capture_interval", value=capture_interval, expected_type=type_hints["capture_interval"])
                check_type(argname="argument capture_interval_units", value=capture_interval_units, expected_type=type_hints["capture_interval_units"])
                check_type(argname="argument timecode_burnin_settings", value=timecode_burnin_settings, expected_type=type_hints["timecode_burnin_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if capture_interval is not None:
                self._values["capture_interval"] = capture_interval
            if capture_interval_units is not None:
                self._values["capture_interval_units"] = capture_interval_units
            if timecode_burnin_settings is not None:
                self._values["timecode_burnin_settings"] = timecode_burnin_settings

        @builtins.property
        def capture_interval(self) -> typing.Optional[jsii.Number]:
            '''The frequency, in seconds, for capturing frames for inclusion in the output.

            For example, "10" means capture a frame every 10 seconds.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturesettings.html#cfn-medialive-channel-framecapturesettings-captureinterval
            '''
            result = self._values.get("capture_interval")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def capture_interval_units(self) -> typing.Optional[builtins.str]:
            '''Unit for the frame capture interval.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturesettings.html#cfn-medialive-channel-framecapturesettings-captureintervalunits
            '''
            result = self._values.get("capture_interval_units")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def timecode_burnin_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TimecodeBurninSettingsProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-framecapturesettings.html#cfn-medialive-channel-framecapturesettings-timecodeburninsettings
            '''
            result = self._values.get("timecode_burnin_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TimecodeBurninSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "FrameCaptureSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.GlobalConfigurationProperty",
        jsii_struct_bases=[],
        name_mapping={
            "initial_audio_gain": "initialAudioGain",
            "input_end_action": "inputEndAction",
            "input_loss_behavior": "inputLossBehavior",
            "output_locking_mode": "outputLockingMode",
            "output_locking_settings": "outputLockingSettings",
            "output_timing_source": "outputTimingSource",
            "support_low_framerate_inputs": "supportLowFramerateInputs",
        },
    )
    class GlobalConfigurationProperty:
        def __init__(
            self,
            *,
            initial_audio_gain: typing.Optional[jsii.Number] = None,
            input_end_action: typing.Optional[builtins.str] = None,
            input_loss_behavior: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.InputLossBehaviorProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            output_locking_mode: typing.Optional[builtins.str] = None,
            output_locking_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.OutputLockingSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            output_timing_source: typing.Optional[builtins.str] = None,
            support_low_framerate_inputs: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The configuration settings that apply to the entire channel.

            The parent of this entity is EncoderSettings.

            :param initial_audio_gain: The value to set the initial audio gain for the channel.
            :param input_end_action: Indicates the action to take when the current input completes (for example, end-of-file). When switchAndLoopInputs is configured, MediaLive restarts at the beginning of the first input. When "none" is configured, MediaLive transcodes either black, a solid color, or a user-specified slate images per the "Input Loss Behavior" configuration until the next input switch occurs (which is controlled through the Channel Schedule API).
            :param input_loss_behavior: The settings for system actions when the input is lost.
            :param output_locking_mode: Indicates how MediaLive pipelines are synchronized. PIPELINELOCKING - MediaLive attempts to synchronize the output of each pipeline to the other. EPOCHLOCKING - MediaLive attempts to synchronize the output of each pipeline to the Unix epoch.
            :param output_locking_settings: 
            :param output_timing_source: Indicates whether the rate of frames emitted by the Live encoder should be paced by its system clock (which optionally might be locked to another source through NTP) or should be locked to the clock of the source that is providing the input stream.
            :param support_low_framerate_inputs: Adjusts the video input buffer for streams with very low video frame rates. This is commonly set to enabled for music channels with less than one video frame per second.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                # pipeline_locking_settings: Any
                
                global_configuration_property = medialive.CfnChannel.GlobalConfigurationProperty(
                    initial_audio_gain=123,
                    input_end_action="inputEndAction",
                    input_loss_behavior=medialive.CfnChannel.InputLossBehaviorProperty(
                        black_frame_msec=123,
                        input_loss_image_color="inputLossImageColor",
                        input_loss_image_slate=medialive.CfnChannel.InputLocationProperty(
                            password_param="passwordParam",
                            uri="uri",
                            username="username"
                        ),
                        input_loss_image_type="inputLossImageType",
                        repeat_frame_msec=123
                    ),
                    output_locking_mode="outputLockingMode",
                    output_locking_settings=medialive.CfnChannel.OutputLockingSettingsProperty(
                        epoch_locking_settings=medialive.CfnChannel.EpochLockingSettingsProperty(
                            custom_epoch="customEpoch",
                            jam_sync_time="jamSyncTime"
                        ),
                        pipeline_locking_settings=pipeline_locking_settings
                    ),
                    output_timing_source="outputTimingSource",
                    support_low_framerate_inputs="supportLowFramerateInputs"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__f8cce87a889df7c5926d69bd953074e577505afe215533702a0374206f2b3678)
                check_type(argname="argument initial_audio_gain", value=initial_audio_gain, expected_type=type_hints["initial_audio_gain"])
                check_type(argname="argument input_end_action", value=input_end_action, expected_type=type_hints["input_end_action"])
                check_type(argname="argument input_loss_behavior", value=input_loss_behavior, expected_type=type_hints["input_loss_behavior"])
                check_type(argname="argument output_locking_mode", value=output_locking_mode, expected_type=type_hints["output_locking_mode"])
                check_type(argname="argument output_locking_settings", value=output_locking_settings, expected_type=type_hints["output_locking_settings"])
                check_type(argname="argument output_timing_source", value=output_timing_source, expected_type=type_hints["output_timing_source"])
                check_type(argname="argument support_low_framerate_inputs", value=support_low_framerate_inputs, expected_type=type_hints["support_low_framerate_inputs"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if initial_audio_gain is not None:
                self._values["initial_audio_gain"] = initial_audio_gain
            if input_end_action is not None:
                self._values["input_end_action"] = input_end_action
            if input_loss_behavior is not None:
                self._values["input_loss_behavior"] = input_loss_behavior
            if output_locking_mode is not None:
                self._values["output_locking_mode"] = output_locking_mode
            if output_locking_settings is not None:
                self._values["output_locking_settings"] = output_locking_settings
            if output_timing_source is not None:
                self._values["output_timing_source"] = output_timing_source
            if support_low_framerate_inputs is not None:
                self._values["support_low_framerate_inputs"] = support_low_framerate_inputs

        @builtins.property
        def initial_audio_gain(self) -> typing.Optional[jsii.Number]:
            '''The value to set the initial audio gain for the channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-initialaudiogain
            '''
            result = self._values.get("initial_audio_gain")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def input_end_action(self) -> typing.Optional[builtins.str]:
            '''Indicates the action to take when the current input completes (for example, end-of-file).

            When switchAndLoopInputs is configured, MediaLive restarts at the beginning of the first input. When "none" is configured, MediaLive transcodes either black, a solid color, or a user-specified slate images per the "Input Loss Behavior" configuration until the next input switch occurs (which is controlled through the Channel Schedule API).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-inputendaction
            '''
            result = self._values.get("input_end_action")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def input_loss_behavior(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputLossBehaviorProperty"]]:
            '''The settings for system actions when the input is lost.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-inputlossbehavior
            '''
            result = self._values.get("input_loss_behavior")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputLossBehaviorProperty"]], result)

        @builtins.property
        def output_locking_mode(self) -> typing.Optional[builtins.str]:
            '''Indicates how MediaLive pipelines are synchronized.

            PIPELINELOCKING - MediaLive attempts to synchronize the output of each pipeline to the other. EPOCHLOCKING - MediaLive attempts to synchronize the output of each pipeline to the Unix epoch.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-outputlockingmode
            '''
            result = self._values.get("output_locking_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def output_locking_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputLockingSettingsProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-outputlockingsettings
            '''
            result = self._values.get("output_locking_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputLockingSettingsProperty"]], result)

        @builtins.property
        def output_timing_source(self) -> typing.Optional[builtins.str]:
            '''Indicates whether the rate of frames emitted by the Live encoder should be paced by its system clock (which optionally might be locked to another source through NTP) or should be locked to the clock of the source that is providing the input stream.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-outputtimingsource
            '''
            result = self._values.get("output_timing_source")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def support_low_framerate_inputs(self) -> typing.Optional[builtins.str]:
            '''Adjusts the video input buffer for streams with very low video frame rates.

            This is commonly set to enabled for music channels with less than one video frame per second.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-globalconfiguration.html#cfn-medialive-channel-globalconfiguration-supportlowframerateinputs
            '''
            result = self._values.get("support_low_framerate_inputs")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "GlobalConfigurationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.H264ColorSpaceSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "color_space_passthrough_settings": "colorSpacePassthroughSettings",
            "rec601_settings": "rec601Settings",
            "rec709_settings": "rec709Settings",
        },
    )
    class H264ColorSpaceSettingsProperty:
        def __init__(
            self,
            *,
            color_space_passthrough_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.ColorSpacePassthroughSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            rec601_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.Rec601SettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            rec709_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.Rec709SettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Settings for configuring color space in an H264 video encode.

            The parent of this entity is H264Settings.

            :param color_space_passthrough_settings: Passthrough applies no color space conversion to the output.
            :param rec601_settings: Settings to configure the handling of Rec601 color space.
            :param rec709_settings: Settings to configure the handling of Rec709 color space.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264colorspacesettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                h264_color_space_settings_property = medialive.CfnChannel.H264ColorSpaceSettingsProperty(
                    color_space_passthrough_settings=medialive.CfnChannel.ColorSpacePassthroughSettingsProperty(),
                    rec601_settings=medialive.CfnChannel.Rec601SettingsProperty(),
                    rec709_settings=medialive.CfnChannel.Rec709SettingsProperty()
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__0e32bc47e7ddcd61047642a385041b1f9668d31b165231f430f01e2b91b1d087)
                check_type(argname="argument color_space_passthrough_settings", value=color_space_passthrough_settings, expected_type=type_hints["color_space_passthrough_settings"])
                check_type(argname="argument rec601_settings", value=rec601_settings, expected_type=type_hints["rec601_settings"])
                check_type(argname="argument rec709_settings", value=rec709_settings, expected_type=type_hints["rec709_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if color_space_passthrough_settings is not None:
                self._values["color_space_passthrough_settings"] = color_space_passthrough_settings
            if rec601_settings is not None:
                self._values["rec601_settings"] = rec601_settings
            if rec709_settings is not None:
                self._values["rec709_settings"] = rec709_settings

        @builtins.property
        def color_space_passthrough_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.ColorSpacePassthroughSettingsProperty"]]:
            '''Passthrough applies no color space conversion to the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264colorspacesettings.html#cfn-medialive-channel-h264colorspacesettings-colorspacepassthroughsettings
            '''
            result = self._values.get("color_space_passthrough_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.ColorSpacePassthroughSettingsProperty"]], result)

        @builtins.property
        def rec601_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Rec601SettingsProperty"]]:
            '''Settings to configure the handling of Rec601 color space.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264colorspacesettings.html#cfn-medialive-channel-h264colorspacesettings-rec601settings
            '''
            result = self._values.get("rec601_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Rec601SettingsProperty"]], result)

        @builtins.property
        def rec709_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Rec709SettingsProperty"]]:
            '''Settings to configure the handling of Rec709 color space.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264colorspacesettings.html#cfn-medialive-channel-h264colorspacesettings-rec709settings
            '''
            result = self._values.get("rec709_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Rec709SettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "H264ColorSpaceSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.H264FilterSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"temporal_filter_settings": "temporalFilterSettings"},
    )
    class H264FilterSettingsProperty:
        def __init__(
            self,
            *,
            temporal_filter_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.TemporalFilterSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Settings to configure video filters that apply to the H264 codec.

            The parent of this entity is H264Settings.

            :param temporal_filter_settings: Settings for applying the temporal filter to the video.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264filtersettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                h264_filter_settings_property = medialive.CfnChannel.H264FilterSettingsProperty(
                    temporal_filter_settings=medialive.CfnChannel.TemporalFilterSettingsProperty(
                        post_filter_sharpening="postFilterSharpening",
                        strength="strength"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__3cb4c4dca99a161d3102f1d8f1c337fcb22715a5dcf9f2603a771d9b285530a9)
                check_type(argname="argument temporal_filter_settings", value=temporal_filter_settings, expected_type=type_hints["temporal_filter_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if temporal_filter_settings is not None:
                self._values["temporal_filter_settings"] = temporal_filter_settings

        @builtins.property
        def temporal_filter_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TemporalFilterSettingsProperty"]]:
            '''Settings for applying the temporal filter to the video.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264filtersettings.html#cfn-medialive-channel-h264filtersettings-temporalfiltersettings
            '''
            result = self._values.get("temporal_filter_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TemporalFilterSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "H264FilterSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.H264SettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "adaptive_quantization": "adaptiveQuantization",
            "afd_signaling": "afdSignaling",
            "bitrate": "bitrate",
            "buf_fill_pct": "bufFillPct",
            "buf_size": "bufSize",
            "color_metadata": "colorMetadata",
            "color_space_settings": "colorSpaceSettings",
            "entropy_encoding": "entropyEncoding",
            "filter_settings": "filterSettings",
            "fixed_afd": "fixedAfd",
            "flicker_aq": "flickerAq",
            "force_field_pictures": "forceFieldPictures",
            "framerate_control": "framerateControl",
            "framerate_denominator": "framerateDenominator",
            "framerate_numerator": "framerateNumerator",
            "gop_b_reference": "gopBReference",
            "gop_closed_cadence": "gopClosedCadence",
            "gop_num_b_frames": "gopNumBFrames",
            "gop_size": "gopSize",
            "gop_size_units": "gopSizeUnits",
            "level": "level",
            "look_ahead_rate_control": "lookAheadRateControl",
            "max_bitrate": "maxBitrate",
            "min_i_interval": "minIInterval",
            "num_ref_frames": "numRefFrames",
            "par_control": "parControl",
            "par_denominator": "parDenominator",
            "par_numerator": "parNumerator",
            "profile": "profile",
            "quality_level": "qualityLevel",
            "qvbr_quality_level": "qvbrQualityLevel",
            "rate_control_mode": "rateControlMode",
            "scan_type": "scanType",
            "scene_change_detect": "sceneChangeDetect",
            "slices": "slices",
            "softness": "softness",
            "spatial_aq": "spatialAq",
            "subgop_length": "subgopLength",
            "syntax": "syntax",
            "temporal_aq": "temporalAq",
            "timecode_burnin_settings": "timecodeBurninSettings",
            "timecode_insertion": "timecodeInsertion",
        },
    )
    class H264SettingsProperty:
        def __init__(
            self,
            *,
            adaptive_quantization: typing.Optional[builtins.str] = None,
            afd_signaling: typing.Optional[builtins.str] = None,
            bitrate: typing.Optional[jsii.Number] = None,
            buf_fill_pct: typing.Optional[jsii.Number] = None,
            buf_size: typing.Optional[jsii.Number] = None,
            color_metadata: typing.Optional[builtins.str] = None,
            color_space_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.H264ColorSpaceSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            entropy_encoding: typing.Optional[builtins.str] = None,
            filter_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.H264FilterSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            fixed_afd: typing.Optional[builtins.str] = None,
            flicker_aq: typing.Optional[builtins.str] = None,
            force_field_pictures: typing.Optional[builtins.str] = None,
            framerate_control: typing.Optional[builtins.str] = None,
            framerate_denominator: typing.Optional[jsii.Number] = None,
            framerate_numerator: typing.Optional[jsii.Number] = None,
            gop_b_reference: typing.Optional[builtins.str] = None,
            gop_closed_cadence: typing.Optional[jsii.Number] = None,
            gop_num_b_frames: typing.Optional[jsii.Number] = None,
            gop_size: typing.Optional[jsii.Number] = None,
            gop_size_units: typing.Optional[builtins.str] = None,
            level: typing.Optional[builtins.str] = None,
            look_ahead_rate_control: typing.Optional[builtins.str] = None,
            max_bitrate: typing.Optional[jsii.Number] = None,
            min_i_interval: typing.Optional[jsii.Number] = None,
            num_ref_frames: typing.Optional[jsii.Number] = None,
            par_control: typing.Optional[builtins.str] = None,
            par_denominator: typing.Optional[jsii.Number] = None,
            par_numerator: typing.Optional[jsii.Number] = None,
            profile: typing.Optional[builtins.str] = None,
            quality_level: typing.Optional[builtins.str] = None,
            qvbr_quality_level: typing.Optional[jsii.Number] = None,
            rate_control_mode: typing.Optional[builtins.str] = None,
            scan_type: typing.Optional[builtins.str] = None,
            scene_change_detect: typing.Optional[builtins.str] = None,
            slices: typing.Optional[jsii.Number] = None,
            softness: typing.Optional[jsii.Number] = None,
            spatial_aq: typing.Optional[builtins.str] = None,
            subgop_length: typing.Optional[builtins.str] = None,
            syntax: typing.Optional[builtins.str] = None,
            temporal_aq: typing.Optional[builtins.str] = None,
            timecode_burnin_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.TimecodeBurninSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            timecode_insertion: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The settings for the H.264 codec in the output.

            The parent of this entity is VideoCodecSettings.

            :param adaptive_quantization: The adaptive quantization. This allows intra-frame quantizers to vary to improve visual quality.
            :param afd_signaling: Indicates that AFD values will be written into the output stream. If afdSignaling is auto, the system tries to preserve the input AFD value (in cases where multiple AFD values are valid). If set to fixed, the AFD value is the value configured in the fixedAfd parameter.
            :param bitrate: The average bitrate in bits/second. This is required when the rate control mode is VBR or CBR. It isn't used for QVBR. In a Microsoft Smooth output group, each output must have a unique value when its bitrate is rounded down to the nearest multiple of 1000.
            :param buf_fill_pct: The percentage of the buffer that should initially be filled (HRD buffer model).
            :param buf_size: The size of the buffer (HRD buffer model) in bits/second.
            :param color_metadata: Includes color space metadata in the output.
            :param color_space_settings: Settings to configure the color space handling for the video.
            :param entropy_encoding: The entropy encoding mode. Use cabac (must be in Main or High profile) or cavlc.
            :param filter_settings: Optional filters that you can apply to an encode.
            :param fixed_afd: A four-bit AFD value to write on all frames of video in the output stream. Valid only when afdSignaling is set to Fixed.
            :param flicker_aq: If set to enabled, adjusts the quantization within each frame to reduce flicker or pop on I-frames.
            :param force_field_pictures: This setting applies only when scan type is "interlaced." It controls whether coding is performed on a field basis or on a frame basis. (When the video is progressive, the coding is always performed on a frame basis.) enabled: Force MediaLive to code on a field basis, so that odd and even sets of fields are coded separately. disabled: Code the two sets of fields separately (on a field basis) or together (on a frame basis using PAFF), depending on what is most appropriate for the content.
            :param framerate_control: Indicates how the output video frame rate is specified. If you select "specified," the output video frame rate is determined by framerateNumerator and framerateDenominator. If you select "initializeFromSource," the output video frame rate is set equal to the input video frame rate of the first input.
            :param framerate_denominator: The frame rate denominator.
            :param framerate_numerator: The frame rate numerator. The frame rate is a fraction, for example, 24000/1001 = 23.976 fps.
            :param gop_b_reference: If enabled, uses reference B frames for GOP structures that have B frames > 1.
            :param gop_closed_cadence: The frequency of closed GOPs. In streaming applications, we recommend that you set this to 1 so that a decoder joining mid-stream will receive an IDR frame as quickly as possible. Setting this value to 0 will break output segmenting.
            :param gop_num_b_frames: The number of B-frames between reference frames.
            :param gop_size: The GOP size (keyframe interval) in units of either frames or seconds per gopSizeUnits. The value must be greater than zero.
            :param gop_size_units: Indicates if the gopSize is specified in frames or seconds. If seconds, the system converts the gopSize into a frame count at runtime.
            :param level: The H.264 level.
            :param look_ahead_rate_control: The amount of lookahead. A value of low can decrease latency and memory usage, while high can produce better quality for certain content.
            :param max_bitrate: For QVBR: See the tooltip for Quality level. For VBR: Set the maximum bitrate in order to accommodate expected spikes in the complexity of the video.
            :param min_i_interval: Meaningful only if sceneChangeDetect is set to enabled. This setting enforces separation between repeated (cadence) I-frames and I-frames inserted by Scene Change Detection. If a scene change I-frame is within I-interval frames of a cadence I-frame, the GOP is shrunk or stretched to the scene change I-frame. GOP stretch requires enabling lookahead as well as setting the I-interval. The normal cadence resumes for the next GOP. Note that the maximum GOP stretch = GOP size + Min-I-interval - 1.
            :param num_ref_frames: The number of reference frames to use. The encoder might use more than requested if you use B-frames or interlaced encoding.
            :param par_control: Indicates how the output pixel aspect ratio is specified. If "specified" is selected, the output video pixel aspect ratio is determined by parNumerator and parDenominator. If "initializeFromSource" is selected, the output pixels aspect ratio will be set equal to the input video pixel aspect ratio of the first input.
            :param par_denominator: The Pixel Aspect Ratio denominator.
            :param par_numerator: The Pixel Aspect Ratio numerator.
            :param profile: An H.264 profile.
            :param quality_level: Leave as STANDARD_QUALITY or choose a different value (which might result in additional costs to run the channel). - ENHANCED_QUALITY: Produces a slightly better video quality without an increase in the bitrate. Has an effect only when the Rate control mode is QVBR or CBR. If this channel is in a MediaLive multiplex, the value must be ENHANCED_QUALITY. - STANDARD_QUALITY: Valid for any Rate control mode.
            :param qvbr_quality_level: Controls the target quality for the video encode. This applies only when the rate control mode is QVBR. Set values for the QVBR quality level field and Max bitrate field that suit your most important viewing devices. Recommended values are: - Primary screen: Quality level: 8 to 10. Max bitrate: 4M - PC or tablet: Quality level: 7. Max bitrate: 1.5M to 3M - Smartphone: Quality level: 6. Max bitrate: 1M to 1.5M.
            :param rate_control_mode: The rate control mode. QVBR: The quality will match the specified quality level except when it is constrained by the maximum bitrate. We recommend this if you or your viewers pay for bandwidth. VBR: The quality and bitrate vary, depending on the video complexity. We recommend this instead of QVBR if you want to maintain a specific average bitrate over the duration of the channel. CBR: The quality varies, depending on the video complexity. We recommend this only if you distribute your assets to devices that can't handle variable bitrates.
            :param scan_type: Sets the scan type of the output to progressive or top-field-first interlaced.
            :param scene_change_detect: The scene change detection. On: inserts I-frames when the scene change is detected. Off: does not force an I-frame when the scene change is detected.
            :param slices: The number of slices per picture. The number must be less than or equal to the number of macroblock rows for progressive pictures, and less than or equal to half the number of macroblock rows for interlaced pictures. This field is optional. If you don't specify a value, MediaLive chooses the number of slices based on the encode resolution.
            :param softness: Softness. Selects a quantizer matrix. Larger values reduce high-frequency content in the encoded image.
            :param spatial_aq: If set to enabled, adjusts quantization within each frame based on the spatial variation of content complexity.
            :param subgop_length: If set to fixed, uses gopNumBFrames B-frames per sub-GOP. If set to dynamic, optimizes the number of B-frames used for each sub-GOP to improve visual quality.
            :param syntax: Produces a bitstream that is compliant with SMPTE RP-2027.
            :param temporal_aq: If set to enabled, adjusts quantization within each frame based on the temporal variation of content complexity.
            :param timecode_burnin_settings: 
            :param timecode_insertion: Determines how timecodes should be inserted into the video elementary stream. disabled: don't include timecodes. picTimingSei: pass through picture timing SEI messages from the source specified in Timecode Config.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                h264_settings_property = medialive.CfnChannel.H264SettingsProperty(
                    adaptive_quantization="adaptiveQuantization",
                    afd_signaling="afdSignaling",
                    bitrate=123,
                    buf_fill_pct=123,
                    buf_size=123,
                    color_metadata="colorMetadata",
                    color_space_settings=medialive.CfnChannel.H264ColorSpaceSettingsProperty(
                        color_space_passthrough_settings=medialive.CfnChannel.ColorSpacePassthroughSettingsProperty(),
                        rec601_settings=medialive.CfnChannel.Rec601SettingsProperty(),
                        rec709_settings=medialive.CfnChannel.Rec709SettingsProperty()
                    ),
                    entropy_encoding="entropyEncoding",
                    filter_settings=medialive.CfnChannel.H264FilterSettingsProperty(
                        temporal_filter_settings=medialive.CfnChannel.TemporalFilterSettingsProperty(
                            post_filter_sharpening="postFilterSharpening",
                            strength="strength"
                        )
                    ),
                    fixed_afd="fixedAfd",
                    flicker_aq="flickerAq",
                    force_field_pictures="forceFieldPictures",
                    framerate_control="framerateControl",
                    framerate_denominator=123,
                    framerate_numerator=123,
                    gop_bReference="gopBReference",
                    gop_closed_cadence=123,
                    gop_num_bFrames=123,
                    gop_size=123,
                    gop_size_units="gopSizeUnits",
                    level="level",
                    look_ahead_rate_control="lookAheadRateControl",
                    max_bitrate=123,
                    min_iInterval=123,
                    num_ref_frames=123,
                    par_control="parControl",
                    par_denominator=123,
                    par_numerator=123,
                    profile="profile",
                    quality_level="qualityLevel",
                    qvbr_quality_level=123,
                    rate_control_mode="rateControlMode",
                    scan_type="scanType",
                    scene_change_detect="sceneChangeDetect",
                    slices=123,
                    softness=123,
                    spatial_aq="spatialAq",
                    subgop_length="subgopLength",
                    syntax="syntax",
                    temporal_aq="temporalAq",
                    timecode_burnin_settings=medialive.CfnChannel.TimecodeBurninSettingsProperty(
                        font_size="fontSize",
                        position="position",
                        prefix="prefix"
                    ),
                    timecode_insertion="timecodeInsertion"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__b5cab7f49556648d7d963fdbb4cfd87845bc6a70172808b1847d7a21857a62c5)
                check_type(argname="argument adaptive_quantization", value=adaptive_quantization, expected_type=type_hints["adaptive_quantization"])
                check_type(argname="argument afd_signaling", value=afd_signaling, expected_type=type_hints["afd_signaling"])
                check_type(argname="argument bitrate", value=bitrate, expected_type=type_hints["bitrate"])
                check_type(argname="argument buf_fill_pct", value=buf_fill_pct, expected_type=type_hints["buf_fill_pct"])
                check_type(argname="argument buf_size", value=buf_size, expected_type=type_hints["buf_size"])
                check_type(argname="argument color_metadata", value=color_metadata, expected_type=type_hints["color_metadata"])
                check_type(argname="argument color_space_settings", value=color_space_settings, expected_type=type_hints["color_space_settings"])
                check_type(argname="argument entropy_encoding", value=entropy_encoding, expected_type=type_hints["entropy_encoding"])
                check_type(argname="argument filter_settings", value=filter_settings, expected_type=type_hints["filter_settings"])
                check_type(argname="argument fixed_afd", value=fixed_afd, expected_type=type_hints["fixed_afd"])
                check_type(argname="argument flicker_aq", value=flicker_aq, expected_type=type_hints["flicker_aq"])
                check_type(argname="argument force_field_pictures", value=force_field_pictures, expected_type=type_hints["force_field_pictures"])
                check_type(argname="argument framerate_control", value=framerate_control, expected_type=type_hints["framerate_control"])
                check_type(argname="argument framerate_denominator", value=framerate_denominator, expected_type=type_hints["framerate_denominator"])
                check_type(argname="argument framerate_numerator", value=framerate_numerator, expected_type=type_hints["framerate_numerator"])
                check_type(argname="argument gop_b_reference", value=gop_b_reference, expected_type=type_hints["gop_b_reference"])
                check_type(argname="argument gop_closed_cadence", value=gop_closed_cadence, expected_type=type_hints["gop_closed_cadence"])
                check_type(argname="argument gop_num_b_frames", value=gop_num_b_frames, expected_type=type_hints["gop_num_b_frames"])
                check_type(argname="argument gop_size", value=gop_size, expected_type=type_hints["gop_size"])
                check_type(argname="argument gop_size_units", value=gop_size_units, expected_type=type_hints["gop_size_units"])
                check_type(argname="argument level", value=level, expected_type=type_hints["level"])
                check_type(argname="argument look_ahead_rate_control", value=look_ahead_rate_control, expected_type=type_hints["look_ahead_rate_control"])
                check_type(argname="argument max_bitrate", value=max_bitrate, expected_type=type_hints["max_bitrate"])
                check_type(argname="argument min_i_interval", value=min_i_interval, expected_type=type_hints["min_i_interval"])
                check_type(argname="argument num_ref_frames", value=num_ref_frames, expected_type=type_hints["num_ref_frames"])
                check_type(argname="argument par_control", value=par_control, expected_type=type_hints["par_control"])
                check_type(argname="argument par_denominator", value=par_denominator, expected_type=type_hints["par_denominator"])
                check_type(argname="argument par_numerator", value=par_numerator, expected_type=type_hints["par_numerator"])
                check_type(argname="argument profile", value=profile, expected_type=type_hints["profile"])
                check_type(argname="argument quality_level", value=quality_level, expected_type=type_hints["quality_level"])
                check_type(argname="argument qvbr_quality_level", value=qvbr_quality_level, expected_type=type_hints["qvbr_quality_level"])
                check_type(argname="argument rate_control_mode", value=rate_control_mode, expected_type=type_hints["rate_control_mode"])
                check_type(argname="argument scan_type", value=scan_type, expected_type=type_hints["scan_type"])
                check_type(argname="argument scene_change_detect", value=scene_change_detect, expected_type=type_hints["scene_change_detect"])
                check_type(argname="argument slices", value=slices, expected_type=type_hints["slices"])
                check_type(argname="argument softness", value=softness, expected_type=type_hints["softness"])
                check_type(argname="argument spatial_aq", value=spatial_aq, expected_type=type_hints["spatial_aq"])
                check_type(argname="argument subgop_length", value=subgop_length, expected_type=type_hints["subgop_length"])
                check_type(argname="argument syntax", value=syntax, expected_type=type_hints["syntax"])
                check_type(argname="argument temporal_aq", value=temporal_aq, expected_type=type_hints["temporal_aq"])
                check_type(argname="argument timecode_burnin_settings", value=timecode_burnin_settings, expected_type=type_hints["timecode_burnin_settings"])
                check_type(argname="argument timecode_insertion", value=timecode_insertion, expected_type=type_hints["timecode_insertion"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if adaptive_quantization is not None:
                self._values["adaptive_quantization"] = adaptive_quantization
            if afd_signaling is not None:
                self._values["afd_signaling"] = afd_signaling
            if bitrate is not None:
                self._values["bitrate"] = bitrate
            if buf_fill_pct is not None:
                self._values["buf_fill_pct"] = buf_fill_pct
            if buf_size is not None:
                self._values["buf_size"] = buf_size
            if color_metadata is not None:
                self._values["color_metadata"] = color_metadata
            if color_space_settings is not None:
                self._values["color_space_settings"] = color_space_settings
            if entropy_encoding is not None:
                self._values["entropy_encoding"] = entropy_encoding
            if filter_settings is not None:
                self._values["filter_settings"] = filter_settings
            if fixed_afd is not None:
                self._values["fixed_afd"] = fixed_afd
            if flicker_aq is not None:
                self._values["flicker_aq"] = flicker_aq
            if force_field_pictures is not None:
                self._values["force_field_pictures"] = force_field_pictures
            if framerate_control is not None:
                self._values["framerate_control"] = framerate_control
            if framerate_denominator is not None:
                self._values["framerate_denominator"] = framerate_denominator
            if framerate_numerator is not None:
                self._values["framerate_numerator"] = framerate_numerator
            if gop_b_reference is not None:
                self._values["gop_b_reference"] = gop_b_reference
            if gop_closed_cadence is not None:
                self._values["gop_closed_cadence"] = gop_closed_cadence
            if gop_num_b_frames is not None:
                self._values["gop_num_b_frames"] = gop_num_b_frames
            if gop_size is not None:
                self._values["gop_size"] = gop_size
            if gop_size_units is not None:
                self._values["gop_size_units"] = gop_size_units
            if level is not None:
                self._values["level"] = level
            if look_ahead_rate_control is not None:
                self._values["look_ahead_rate_control"] = look_ahead_rate_control
            if max_bitrate is not None:
                self._values["max_bitrate"] = max_bitrate
            if min_i_interval is not None:
                self._values["min_i_interval"] = min_i_interval
            if num_ref_frames is not None:
                self._values["num_ref_frames"] = num_ref_frames
            if par_control is not None:
                self._values["par_control"] = par_control
            if par_denominator is not None:
                self._values["par_denominator"] = par_denominator
            if par_numerator is not None:
                self._values["par_numerator"] = par_numerator
            if profile is not None:
                self._values["profile"] = profile
            if quality_level is not None:
                self._values["quality_level"] = quality_level
            if qvbr_quality_level is not None:
                self._values["qvbr_quality_level"] = qvbr_quality_level
            if rate_control_mode is not None:
                self._values["rate_control_mode"] = rate_control_mode
            if scan_type is not None:
                self._values["scan_type"] = scan_type
            if scene_change_detect is not None:
                self._values["scene_change_detect"] = scene_change_detect
            if slices is not None:
                self._values["slices"] = slices
            if softness is not None:
                self._values["softness"] = softness
            if spatial_aq is not None:
                self._values["spatial_aq"] = spatial_aq
            if subgop_length is not None:
                self._values["subgop_length"] = subgop_length
            if syntax is not None:
                self._values["syntax"] = syntax
            if temporal_aq is not None:
                self._values["temporal_aq"] = temporal_aq
            if timecode_burnin_settings is not None:
                self._values["timecode_burnin_settings"] = timecode_burnin_settings
            if timecode_insertion is not None:
                self._values["timecode_insertion"] = timecode_insertion

        @builtins.property
        def adaptive_quantization(self) -> typing.Optional[builtins.str]:
            '''The adaptive quantization.

            This allows intra-frame quantizers to vary to improve visual quality.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-adaptivequantization
            '''
            result = self._values.get("adaptive_quantization")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def afd_signaling(self) -> typing.Optional[builtins.str]:
            '''Indicates that AFD values will be written into the output stream.

            If afdSignaling is auto, the system tries to preserve the input AFD value (in cases where multiple AFD values are valid). If set to fixed, the AFD value is the value configured in the fixedAfd parameter.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-afdsignaling
            '''
            result = self._values.get("afd_signaling")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def bitrate(self) -> typing.Optional[jsii.Number]:
            '''The average bitrate in bits/second.

            This is required when the rate control mode is VBR or CBR. It isn't used for QVBR. In a Microsoft Smooth output group, each output must have a unique value when its bitrate is rounded down to the nearest multiple of 1000.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-bitrate
            '''
            result = self._values.get("bitrate")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def buf_fill_pct(self) -> typing.Optional[jsii.Number]:
            '''The percentage of the buffer that should initially be filled (HRD buffer model).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-buffillpct
            '''
            result = self._values.get("buf_fill_pct")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def buf_size(self) -> typing.Optional[jsii.Number]:
            '''The size of the buffer (HRD buffer model) in bits/second.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-bufsize
            '''
            result = self._values.get("buf_size")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def color_metadata(self) -> typing.Optional[builtins.str]:
            '''Includes color space metadata in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-colormetadata
            '''
            result = self._values.get("color_metadata")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def color_space_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.H264ColorSpaceSettingsProperty"]]:
            '''Settings to configure the color space handling for the video.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-colorspacesettings
            '''
            result = self._values.get("color_space_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.H264ColorSpaceSettingsProperty"]], result)

        @builtins.property
        def entropy_encoding(self) -> typing.Optional[builtins.str]:
            '''The entropy encoding mode.

            Use cabac (must be in Main or High profile) or cavlc.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-entropyencoding
            '''
            result = self._values.get("entropy_encoding")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def filter_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.H264FilterSettingsProperty"]]:
            '''Optional filters that you can apply to an encode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-filtersettings
            '''
            result = self._values.get("filter_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.H264FilterSettingsProperty"]], result)

        @builtins.property
        def fixed_afd(self) -> typing.Optional[builtins.str]:
            '''A four-bit AFD value to write on all frames of video in the output stream.

            Valid only when afdSignaling is set to Fixed.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-fixedafd
            '''
            result = self._values.get("fixed_afd")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def flicker_aq(self) -> typing.Optional[builtins.str]:
            '''If set to enabled, adjusts the quantization within each frame to reduce flicker or pop on I-frames.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-flickeraq
            '''
            result = self._values.get("flicker_aq")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def force_field_pictures(self) -> typing.Optional[builtins.str]:
            '''This setting applies only when scan type is "interlaced." It controls whether coding is performed on a field basis or on a frame basis. (When the video is progressive, the coding is always performed on a frame basis.) enabled: Force MediaLive to code on a field basis, so that odd and even sets of fields are coded separately. disabled: Code the two sets of fields separately (on a field basis) or together (on a frame basis using PAFF), depending on what is most appropriate for the content.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-forcefieldpictures
            '''
            result = self._values.get("force_field_pictures")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def framerate_control(self) -> typing.Optional[builtins.str]:
            '''Indicates how the output video frame rate is specified.

            If you select "specified," the output video frame rate is determined by framerateNumerator and framerateDenominator. If you select "initializeFromSource," the output video frame rate is set equal to the input video frame rate of the first input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-frameratecontrol
            '''
            result = self._values.get("framerate_control")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def framerate_denominator(self) -> typing.Optional[jsii.Number]:
            '''The frame rate denominator.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-frameratedenominator
            '''
            result = self._values.get("framerate_denominator")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def framerate_numerator(self) -> typing.Optional[jsii.Number]:
            '''The frame rate numerator.

            The frame rate is a fraction, for example, 24000/1001 = 23.976 fps.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-frameratenumerator
            '''
            result = self._values.get("framerate_numerator")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def gop_b_reference(self) -> typing.Optional[builtins.str]:
            '''If enabled, uses reference B frames for GOP structures that have B frames > 1.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-gopbreference
            '''
            result = self._values.get("gop_b_reference")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def gop_closed_cadence(self) -> typing.Optional[jsii.Number]:
            '''The frequency of closed GOPs.

            In streaming applications, we recommend that you set this to 1 so that a decoder joining mid-stream will receive an IDR frame as quickly as possible. Setting this value to 0 will break output segmenting.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-gopclosedcadence
            '''
            result = self._values.get("gop_closed_cadence")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def gop_num_b_frames(self) -> typing.Optional[jsii.Number]:
            '''The number of B-frames between reference frames.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-gopnumbframes
            '''
            result = self._values.get("gop_num_b_frames")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def gop_size(self) -> typing.Optional[jsii.Number]:
            '''The GOP size (keyframe interval) in units of either frames or seconds per gopSizeUnits.

            The value must be greater than zero.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-gopsize
            '''
            result = self._values.get("gop_size")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def gop_size_units(self) -> typing.Optional[builtins.str]:
            '''Indicates if the gopSize is specified in frames or seconds.

            If seconds, the system converts the gopSize into a frame count at runtime.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-gopsizeunits
            '''
            result = self._values.get("gop_size_units")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def level(self) -> typing.Optional[builtins.str]:
            '''The H.264 level.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-level
            '''
            result = self._values.get("level")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def look_ahead_rate_control(self) -> typing.Optional[builtins.str]:
            '''The amount of lookahead.

            A value of low can decrease latency and memory usage, while high can produce better quality for certain content.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-lookaheadratecontrol
            '''
            result = self._values.get("look_ahead_rate_control")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def max_bitrate(self) -> typing.Optional[jsii.Number]:
            '''For QVBR: See the tooltip for Quality level.

            For VBR: Set the maximum bitrate in order to accommodate expected spikes in the complexity of the video.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-maxbitrate
            '''
            result = self._values.get("max_bitrate")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def min_i_interval(self) -> typing.Optional[jsii.Number]:
            '''Meaningful only if sceneChangeDetect is set to enabled.

            This setting enforces separation between repeated (cadence) I-frames and I-frames inserted by Scene Change Detection. If a scene change I-frame is within I-interval frames of a cadence I-frame, the GOP is shrunk or stretched to the scene change I-frame. GOP stretch requires enabling lookahead as well as setting the I-interval. The normal cadence resumes for the next GOP. Note that the maximum GOP stretch = GOP size + Min-I-interval - 1.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-miniinterval
            '''
            result = self._values.get("min_i_interval")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def num_ref_frames(self) -> typing.Optional[jsii.Number]:
            '''The number of reference frames to use.

            The encoder might use more than requested if you use B-frames or interlaced encoding.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-numrefframes
            '''
            result = self._values.get("num_ref_frames")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def par_control(self) -> typing.Optional[builtins.str]:
            '''Indicates how the output pixel aspect ratio is specified.

            If "specified" is selected, the output video pixel aspect ratio is determined by parNumerator and parDenominator. If "initializeFromSource" is selected, the output pixels aspect ratio will be set equal to the input video pixel aspect ratio of the first input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-parcontrol
            '''
            result = self._values.get("par_control")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def par_denominator(self) -> typing.Optional[jsii.Number]:
            '''The Pixel Aspect Ratio denominator.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-pardenominator
            '''
            result = self._values.get("par_denominator")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def par_numerator(self) -> typing.Optional[jsii.Number]:
            '''The Pixel Aspect Ratio numerator.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-parnumerator
            '''
            result = self._values.get("par_numerator")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def profile(self) -> typing.Optional[builtins.str]:
            '''An H.264 profile.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-profile
            '''
            result = self._values.get("profile")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def quality_level(self) -> typing.Optional[builtins.str]:
            '''Leave as STANDARD_QUALITY or choose a different value (which might result in additional costs to run the channel).

            - ENHANCED_QUALITY: Produces a slightly better video quality without an increase in the bitrate. Has an effect only when the Rate control mode is QVBR or CBR. If this channel is in a MediaLive multiplex, the value must be ENHANCED_QUALITY.
            - STANDARD_QUALITY: Valid for any Rate control mode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-qualitylevel
            '''
            result = self._values.get("quality_level")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def qvbr_quality_level(self) -> typing.Optional[jsii.Number]:
            '''Controls the target quality for the video encode.

            This applies only when the rate control mode is QVBR. Set values for the QVBR quality level field and Max bitrate field that suit your most important viewing devices. Recommended values are: - Primary screen: Quality level: 8 to 10. Max bitrate: 4M - PC or tablet: Quality level: 7. Max bitrate: 1.5M to 3M - Smartphone: Quality level: 6. Max bitrate: 1M to 1.5M.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-qvbrqualitylevel
            '''
            result = self._values.get("qvbr_quality_level")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def rate_control_mode(self) -> typing.Optional[builtins.str]:
            '''The rate control mode.

            QVBR: The quality will match the specified quality level except when it is constrained by the maximum bitrate. We recommend this if you or your viewers pay for bandwidth. VBR: The quality and bitrate vary, depending on the video complexity. We recommend this instead of QVBR if you want to maintain a specific average bitrate over the duration of the channel. CBR: The quality varies, depending on the video complexity. We recommend this only if you distribute your assets to devices that can't handle variable bitrates.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-ratecontrolmode
            '''
            result = self._values.get("rate_control_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def scan_type(self) -> typing.Optional[builtins.str]:
            '''Sets the scan type of the output to progressive or top-field-first interlaced.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-scantype
            '''
            result = self._values.get("scan_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def scene_change_detect(self) -> typing.Optional[builtins.str]:
            '''The scene change detection.

            On: inserts I-frames when the scene change is detected. Off: does not force an I-frame when the scene change is detected.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-scenechangedetect
            '''
            result = self._values.get("scene_change_detect")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def slices(self) -> typing.Optional[jsii.Number]:
            '''The number of slices per picture.

            The number must be less than or equal to the number of macroblock rows for progressive pictures, and less than or equal to half the number of macroblock rows for interlaced pictures. This field is optional. If you don't specify a value, MediaLive chooses the number of slices based on the encode resolution.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-slices
            '''
            result = self._values.get("slices")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def softness(self) -> typing.Optional[jsii.Number]:
            '''Softness.

            Selects a quantizer matrix. Larger values reduce high-frequency content in the encoded image.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-softness
            '''
            result = self._values.get("softness")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def spatial_aq(self) -> typing.Optional[builtins.str]:
            '''If set to enabled, adjusts quantization within each frame based on the spatial variation of content complexity.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-spatialaq
            '''
            result = self._values.get("spatial_aq")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def subgop_length(self) -> typing.Optional[builtins.str]:
            '''If set to fixed, uses gopNumBFrames B-frames per sub-GOP.

            If set to dynamic, optimizes the number of B-frames used for each sub-GOP to improve visual quality.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-subgoplength
            '''
            result = self._values.get("subgop_length")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def syntax(self) -> typing.Optional[builtins.str]:
            '''Produces a bitstream that is compliant with SMPTE RP-2027.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-syntax
            '''
            result = self._values.get("syntax")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def temporal_aq(self) -> typing.Optional[builtins.str]:
            '''If set to enabled, adjusts quantization within each frame based on the temporal variation of content complexity.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-temporalaq
            '''
            result = self._values.get("temporal_aq")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def timecode_burnin_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TimecodeBurninSettingsProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-timecodeburninsettings
            '''
            result = self._values.get("timecode_burnin_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TimecodeBurninSettingsProperty"]], result)

        @builtins.property
        def timecode_insertion(self) -> typing.Optional[builtins.str]:
            '''Determines how timecodes should be inserted into the video elementary stream.

            disabled: don't include timecodes. picTimingSei: pass through picture timing SEI messages from the source specified in Timecode Config.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h264settings.html#cfn-medialive-channel-h264settings-timecodeinsertion
            '''
            result = self._values.get("timecode_insertion")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "H264SettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.H265ColorSpaceSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "color_space_passthrough_settings": "colorSpacePassthroughSettings",
            "dolby_vision81_settings": "dolbyVision81Settings",
            "hdr10_settings": "hdr10Settings",
            "rec601_settings": "rec601Settings",
            "rec709_settings": "rec709Settings",
        },
    )
    class H265ColorSpaceSettingsProperty:
        def __init__(
            self,
            *,
            color_space_passthrough_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.ColorSpacePassthroughSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            dolby_vision81_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.DolbyVision81SettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            hdr10_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.Hdr10SettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            rec601_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.Rec601SettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            rec709_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.Rec709SettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''H265 Color Space Settings.

            The parent of this entity is H265Settings.

            :param color_space_passthrough_settings: Passthrough applies no color space conversion to the output.
            :param dolby_vision81_settings: 
            :param hdr10_settings: Settings to configure the handling of HDR10 color space.
            :param rec601_settings: Settings to configure the handling of Rec601 color space.
            :param rec709_settings: Settings to configure the handling of Rec709 color space.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265colorspacesettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                h265_color_space_settings_property = medialive.CfnChannel.H265ColorSpaceSettingsProperty(
                    color_space_passthrough_settings=medialive.CfnChannel.ColorSpacePassthroughSettingsProperty(),
                    dolby_vision81_settings=medialive.CfnChannel.DolbyVision81SettingsProperty(),
                    hdr10_settings=medialive.CfnChannel.Hdr10SettingsProperty(
                        max_cll=123,
                        max_fall=123
                    ),
                    rec601_settings=medialive.CfnChannel.Rec601SettingsProperty(),
                    rec709_settings=medialive.CfnChannel.Rec709SettingsProperty()
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__32abe461f10992cf69e1043984b274ff5499daba5fe0817221cfab579c9f9c3b)
                check_type(argname="argument color_space_passthrough_settings", value=color_space_passthrough_settings, expected_type=type_hints["color_space_passthrough_settings"])
                check_type(argname="argument dolby_vision81_settings", value=dolby_vision81_settings, expected_type=type_hints["dolby_vision81_settings"])
                check_type(argname="argument hdr10_settings", value=hdr10_settings, expected_type=type_hints["hdr10_settings"])
                check_type(argname="argument rec601_settings", value=rec601_settings, expected_type=type_hints["rec601_settings"])
                check_type(argname="argument rec709_settings", value=rec709_settings, expected_type=type_hints["rec709_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if color_space_passthrough_settings is not None:
                self._values["color_space_passthrough_settings"] = color_space_passthrough_settings
            if dolby_vision81_settings is not None:
                self._values["dolby_vision81_settings"] = dolby_vision81_settings
            if hdr10_settings is not None:
                self._values["hdr10_settings"] = hdr10_settings
            if rec601_settings is not None:
                self._values["rec601_settings"] = rec601_settings
            if rec709_settings is not None:
                self._values["rec709_settings"] = rec709_settings

        @builtins.property
        def color_space_passthrough_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.ColorSpacePassthroughSettingsProperty"]]:
            '''Passthrough applies no color space conversion to the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265colorspacesettings.html#cfn-medialive-channel-h265colorspacesettings-colorspacepassthroughsettings
            '''
            result = self._values.get("color_space_passthrough_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.ColorSpacePassthroughSettingsProperty"]], result)

        @builtins.property
        def dolby_vision81_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.DolbyVision81SettingsProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265colorspacesettings.html#cfn-medialive-channel-h265colorspacesettings-dolbyvision81settings
            '''
            result = self._values.get("dolby_vision81_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.DolbyVision81SettingsProperty"]], result)

        @builtins.property
        def hdr10_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Hdr10SettingsProperty"]]:
            '''Settings to configure the handling of HDR10 color space.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265colorspacesettings.html#cfn-medialive-channel-h265colorspacesettings-hdr10settings
            '''
            result = self._values.get("hdr10_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Hdr10SettingsProperty"]], result)

        @builtins.property
        def rec601_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Rec601SettingsProperty"]]:
            '''Settings to configure the handling of Rec601 color space.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265colorspacesettings.html#cfn-medialive-channel-h265colorspacesettings-rec601settings
            '''
            result = self._values.get("rec601_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Rec601SettingsProperty"]], result)

        @builtins.property
        def rec709_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Rec709SettingsProperty"]]:
            '''Settings to configure the handling of Rec709 color space.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265colorspacesettings.html#cfn-medialive-channel-h265colorspacesettings-rec709settings
            '''
            result = self._values.get("rec709_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Rec709SettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "H265ColorSpaceSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.H265FilterSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"temporal_filter_settings": "temporalFilterSettings"},
    )
    class H265FilterSettingsProperty:
        def __init__(
            self,
            *,
            temporal_filter_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.TemporalFilterSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Settings to configure video filters that apply to the H265 codec.

            The parent of this entity is H265Settings.

            :param temporal_filter_settings: Settings for applying the temporal filter to the video.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265filtersettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                h265_filter_settings_property = medialive.CfnChannel.H265FilterSettingsProperty(
                    temporal_filter_settings=medialive.CfnChannel.TemporalFilterSettingsProperty(
                        post_filter_sharpening="postFilterSharpening",
                        strength="strength"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__7f4aab61301008c3afe08531765fce8b3533bbb0bd6c3f8e6455c9b09692d8d5)
                check_type(argname="argument temporal_filter_settings", value=temporal_filter_settings, expected_type=type_hints["temporal_filter_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if temporal_filter_settings is not None:
                self._values["temporal_filter_settings"] = temporal_filter_settings

        @builtins.property
        def temporal_filter_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TemporalFilterSettingsProperty"]]:
            '''Settings for applying the temporal filter to the video.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265filtersettings.html#cfn-medialive-channel-h265filtersettings-temporalfiltersettings
            '''
            result = self._values.get("temporal_filter_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TemporalFilterSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "H265FilterSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.H265SettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "adaptive_quantization": "adaptiveQuantization",
            "afd_signaling": "afdSignaling",
            "alternative_transfer_function": "alternativeTransferFunction",
            "bitrate": "bitrate",
            "buf_size": "bufSize",
            "color_metadata": "colorMetadata",
            "color_space_settings": "colorSpaceSettings",
            "filter_settings": "filterSettings",
            "fixed_afd": "fixedAfd",
            "flicker_aq": "flickerAq",
            "framerate_denominator": "framerateDenominator",
            "framerate_numerator": "framerateNumerator",
            "gop_closed_cadence": "gopClosedCadence",
            "gop_size": "gopSize",
            "gop_size_units": "gopSizeUnits",
            "level": "level",
            "look_ahead_rate_control": "lookAheadRateControl",
            "max_bitrate": "maxBitrate",
            "min_i_interval": "minIInterval",
            "par_denominator": "parDenominator",
            "par_numerator": "parNumerator",
            "profile": "profile",
            "qvbr_quality_level": "qvbrQualityLevel",
            "rate_control_mode": "rateControlMode",
            "scan_type": "scanType",
            "scene_change_detect": "sceneChangeDetect",
            "slices": "slices",
            "tier": "tier",
            "timecode_burnin_settings": "timecodeBurninSettings",
            "timecode_insertion": "timecodeInsertion",
        },
    )
    class H265SettingsProperty:
        def __init__(
            self,
            *,
            adaptive_quantization: typing.Optional[builtins.str] = None,
            afd_signaling: typing.Optional[builtins.str] = None,
            alternative_transfer_function: typing.Optional[builtins.str] = None,
            bitrate: typing.Optional[jsii.Number] = None,
            buf_size: typing.Optional[jsii.Number] = None,
            color_metadata: typing.Optional[builtins.str] = None,
            color_space_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.H265ColorSpaceSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            filter_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.H265FilterSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            fixed_afd: typing.Optional[builtins.str] = None,
            flicker_aq: typing.Optional[builtins.str] = None,
            framerate_denominator: typing.Optional[jsii.Number] = None,
            framerate_numerator: typing.Optional[jsii.Number] = None,
            gop_closed_cadence: typing.Optional[jsii.Number] = None,
            gop_size: typing.Optional[jsii.Number] = None,
            gop_size_units: typing.Optional[builtins.str] = None,
            level: typing.Optional[builtins.str] = None,
            look_ahead_rate_control: typing.Optional[builtins.str] = None,
            max_bitrate: typing.Optional[jsii.Number] = None,
            min_i_interval: typing.Optional[jsii.Number] = None,
            par_denominator: typing.Optional[jsii.Number] = None,
            par_numerator: typing.Optional[jsii.Number] = None,
            profile: typing.Optional[builtins.str] = None,
            qvbr_quality_level: typing.Optional[jsii.Number] = None,
            rate_control_mode: typing.Optional[builtins.str] = None,
            scan_type: typing.Optional[builtins.str] = None,
            scene_change_detect: typing.Optional[builtins.str] = None,
            slices: typing.Optional[jsii.Number] = None,
            tier: typing.Optional[builtins.str] = None,
            timecode_burnin_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.TimecodeBurninSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            timecode_insertion: typing.Optional[builtins.str] = None,
        ) -> None:
            '''H265 Settings.

            The parent of this entity is VideoCodecSettings.

            :param adaptive_quantization: Adaptive quantization. Allows intra-frame quantizers to vary to improve visual quality.
            :param afd_signaling: Indicates that AFD values will be written into the output stream. If afdSignaling is "auto", the system will try to preserve the input AFD value (in cases where multiple AFD values are valid). If set to "fixed", the AFD value will be the value configured in the fixedAfd parameter.
            :param alternative_transfer_function: Whether or not EML should insert an Alternative Transfer Function SEI message to support backwards compatibility with non-HDR decoders and displays.
            :param bitrate: Average bitrate in bits/second. Required when the rate control mode is VBR or CBR. Not used for QVBR. In an MS Smooth output group, each output must have a unique value when its bitrate is rounded down to the nearest multiple of 1000.
            :param buf_size: Size of buffer (HRD buffer model) in bits.
            :param color_metadata: Includes colorspace metadata in the output.
            :param color_space_settings: Color Space settings.
            :param filter_settings: Optional filters that you can apply to an encode.
            :param fixed_afd: Four bit AFD value to write on all frames of video in the output stream. Only valid when afdSignaling is set to 'Fixed'.
            :param flicker_aq: If set to enabled, adjust quantization within each frame to reduce flicker or 'pop' on I-frames.
            :param framerate_denominator: Framerate denominator.
            :param framerate_numerator: Framerate numerator - framerate is a fraction, e.g. 24000 / 1001 = 23.976 fps.
            :param gop_closed_cadence: Frequency of closed GOPs. In streaming applications, it is recommended that this be set to 1 so a decoder joining mid-stream will receive an IDR frame as quickly as possible. Setting this value to 0 will break output segmenting.
            :param gop_size: GOP size (keyframe interval) in units of either frames or seconds per gopSizeUnits. If gopSizeUnits is frames, gopSize must be an integer and must be greater than or equal to 1. If gopSizeUnits is seconds, gopSize must be greater than 0, but need not be an integer.
            :param gop_size_units: Indicates if the gopSize is specified in frames or seconds. If seconds the system will convert the gopSize into a frame count at run time.
            :param level: H.265 Level.
            :param look_ahead_rate_control: Amount of lookahead. A value of low can decrease latency and memory usage, while high can produce better quality for certain content.
            :param max_bitrate: For QVBR: See the tooltip for Quality level.
            :param min_i_interval: Only meaningful if sceneChangeDetect is set to enabled. Defaults to 5 if multiplex rate control is used. Enforces separation between repeated (cadence) I-frames and I-frames inserted by Scene Change Detection. If a scene change I-frame is within I-interval frames of a cadence I-frame, the GOP is shrunk and/or stretched to the scene change I-frame. GOP stretch requires enabling lookahead as well as setting I-interval. The normal cadence resumes for the next GOP. Note: Maximum GOP stretch = GOP size + Min-I-interval - 1
            :param par_denominator: Pixel Aspect Ratio denominator.
            :param par_numerator: Pixel Aspect Ratio numerator.
            :param profile: H.265 Profile.
            :param qvbr_quality_level: Controls the target quality for the video encode. Applies only when the rate control mode is QVBR. Set values for the QVBR quality level field and Max bitrate field that suit your most important viewing devices. Recommended values are: - Primary screen: Quality level: 8 to 10. Max bitrate: 4M - PC or tablet: Quality level: 7. Max bitrate: 1.5M to 3M - Smartphone: Quality level: 6. Max bitrate: 1M to 1.5M
            :param rate_control_mode: Rate control mode. QVBR: Quality will match the specified quality level except when it is constrained by the maximum bitrate. Recommended if you or your viewers pay for bandwidth. CBR: Quality varies, depending on the video complexity. Recommended only if you distribute your assets to devices that cannot handle variable bitrates. Multiplex: This rate control mode is only supported (and is required) when the video is being delivered to a MediaLive Multiplex in which case the rate control configuration is controlled by the properties within the Multiplex Program.
            :param scan_type: Sets the scan type of the output to progressive or top-field-first interlaced.
            :param scene_change_detect: Scene change detection.
            :param slices: Number of slices per picture. Must be less than or equal to the number of macroblock rows for progressive pictures, and less than or equal to half the number of macroblock rows for interlaced pictures. This field is optional; when no value is specified the encoder will choose the number of slices based on encode resolution.
            :param tier: H.265 Tier.
            :param timecode_burnin_settings: 
            :param timecode_insertion: Determines how timecodes should be inserted into the video elementary stream. - 'disabled': Do not include timecodes - 'picTimingSei': Pass through picture timing SEI messages from the source specified in Timecode Config

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                h265_settings_property = medialive.CfnChannel.H265SettingsProperty(
                    adaptive_quantization="adaptiveQuantization",
                    afd_signaling="afdSignaling",
                    alternative_transfer_function="alternativeTransferFunction",
                    bitrate=123,
                    buf_size=123,
                    color_metadata="colorMetadata",
                    color_space_settings=medialive.CfnChannel.H265ColorSpaceSettingsProperty(
                        color_space_passthrough_settings=medialive.CfnChannel.ColorSpacePassthroughSettingsProperty(),
                        dolby_vision81_settings=medialive.CfnChannel.DolbyVision81SettingsProperty(),
                        hdr10_settings=medialive.CfnChannel.Hdr10SettingsProperty(
                            max_cll=123,
                            max_fall=123
                        ),
                        rec601_settings=medialive.CfnChannel.Rec601SettingsProperty(),
                        rec709_settings=medialive.CfnChannel.Rec709SettingsProperty()
                    ),
                    filter_settings=medialive.CfnChannel.H265FilterSettingsProperty(
                        temporal_filter_settings=medialive.CfnChannel.TemporalFilterSettingsProperty(
                            post_filter_sharpening="postFilterSharpening",
                            strength="strength"
                        )
                    ),
                    fixed_afd="fixedAfd",
                    flicker_aq="flickerAq",
                    framerate_denominator=123,
                    framerate_numerator=123,
                    gop_closed_cadence=123,
                    gop_size=123,
                    gop_size_units="gopSizeUnits",
                    level="level",
                    look_ahead_rate_control="lookAheadRateControl",
                    max_bitrate=123,
                    min_iInterval=123,
                    par_denominator=123,
                    par_numerator=123,
                    profile="profile",
                    qvbr_quality_level=123,
                    rate_control_mode="rateControlMode",
                    scan_type="scanType",
                    scene_change_detect="sceneChangeDetect",
                    slices=123,
                    tier="tier",
                    timecode_burnin_settings=medialive.CfnChannel.TimecodeBurninSettingsProperty(
                        font_size="fontSize",
                        position="position",
                        prefix="prefix"
                    ),
                    timecode_insertion="timecodeInsertion"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ba24f075b346c08bd6351ec946aa6352e1a32fe09c8751f612abee3e6a46cd76)
                check_type(argname="argument adaptive_quantization", value=adaptive_quantization, expected_type=type_hints["adaptive_quantization"])
                check_type(argname="argument afd_signaling", value=afd_signaling, expected_type=type_hints["afd_signaling"])
                check_type(argname="argument alternative_transfer_function", value=alternative_transfer_function, expected_type=type_hints["alternative_transfer_function"])
                check_type(argname="argument bitrate", value=bitrate, expected_type=type_hints["bitrate"])
                check_type(argname="argument buf_size", value=buf_size, expected_type=type_hints["buf_size"])
                check_type(argname="argument color_metadata", value=color_metadata, expected_type=type_hints["color_metadata"])
                check_type(argname="argument color_space_settings", value=color_space_settings, expected_type=type_hints["color_space_settings"])
                check_type(argname="argument filter_settings", value=filter_settings, expected_type=type_hints["filter_settings"])
                check_type(argname="argument fixed_afd", value=fixed_afd, expected_type=type_hints["fixed_afd"])
                check_type(argname="argument flicker_aq", value=flicker_aq, expected_type=type_hints["flicker_aq"])
                check_type(argname="argument framerate_denominator", value=framerate_denominator, expected_type=type_hints["framerate_denominator"])
                check_type(argname="argument framerate_numerator", value=framerate_numerator, expected_type=type_hints["framerate_numerator"])
                check_type(argname="argument gop_closed_cadence", value=gop_closed_cadence, expected_type=type_hints["gop_closed_cadence"])
                check_type(argname="argument gop_size", value=gop_size, expected_type=type_hints["gop_size"])
                check_type(argname="argument gop_size_units", value=gop_size_units, expected_type=type_hints["gop_size_units"])
                check_type(argname="argument level", value=level, expected_type=type_hints["level"])
                check_type(argname="argument look_ahead_rate_control", value=look_ahead_rate_control, expected_type=type_hints["look_ahead_rate_control"])
                check_type(argname="argument max_bitrate", value=max_bitrate, expected_type=type_hints["max_bitrate"])
                check_type(argname="argument min_i_interval", value=min_i_interval, expected_type=type_hints["min_i_interval"])
                check_type(argname="argument par_denominator", value=par_denominator, expected_type=type_hints["par_denominator"])
                check_type(argname="argument par_numerator", value=par_numerator, expected_type=type_hints["par_numerator"])
                check_type(argname="argument profile", value=profile, expected_type=type_hints["profile"])
                check_type(argname="argument qvbr_quality_level", value=qvbr_quality_level, expected_type=type_hints["qvbr_quality_level"])
                check_type(argname="argument rate_control_mode", value=rate_control_mode, expected_type=type_hints["rate_control_mode"])
                check_type(argname="argument scan_type", value=scan_type, expected_type=type_hints["scan_type"])
                check_type(argname="argument scene_change_detect", value=scene_change_detect, expected_type=type_hints["scene_change_detect"])
                check_type(argname="argument slices", value=slices, expected_type=type_hints["slices"])
                check_type(argname="argument tier", value=tier, expected_type=type_hints["tier"])
                check_type(argname="argument timecode_burnin_settings", value=timecode_burnin_settings, expected_type=type_hints["timecode_burnin_settings"])
                check_type(argname="argument timecode_insertion", value=timecode_insertion, expected_type=type_hints["timecode_insertion"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if adaptive_quantization is not None:
                self._values["adaptive_quantization"] = adaptive_quantization
            if afd_signaling is not None:
                self._values["afd_signaling"] = afd_signaling
            if alternative_transfer_function is not None:
                self._values["alternative_transfer_function"] = alternative_transfer_function
            if bitrate is not None:
                self._values["bitrate"] = bitrate
            if buf_size is not None:
                self._values["buf_size"] = buf_size
            if color_metadata is not None:
                self._values["color_metadata"] = color_metadata
            if color_space_settings is not None:
                self._values["color_space_settings"] = color_space_settings
            if filter_settings is not None:
                self._values["filter_settings"] = filter_settings
            if fixed_afd is not None:
                self._values["fixed_afd"] = fixed_afd
            if flicker_aq is not None:
                self._values["flicker_aq"] = flicker_aq
            if framerate_denominator is not None:
                self._values["framerate_denominator"] = framerate_denominator
            if framerate_numerator is not None:
                self._values["framerate_numerator"] = framerate_numerator
            if gop_closed_cadence is not None:
                self._values["gop_closed_cadence"] = gop_closed_cadence
            if gop_size is not None:
                self._values["gop_size"] = gop_size
            if gop_size_units is not None:
                self._values["gop_size_units"] = gop_size_units
            if level is not None:
                self._values["level"] = level
            if look_ahead_rate_control is not None:
                self._values["look_ahead_rate_control"] = look_ahead_rate_control
            if max_bitrate is not None:
                self._values["max_bitrate"] = max_bitrate
            if min_i_interval is not None:
                self._values["min_i_interval"] = min_i_interval
            if par_denominator is not None:
                self._values["par_denominator"] = par_denominator
            if par_numerator is not None:
                self._values["par_numerator"] = par_numerator
            if profile is not None:
                self._values["profile"] = profile
            if qvbr_quality_level is not None:
                self._values["qvbr_quality_level"] = qvbr_quality_level
            if rate_control_mode is not None:
                self._values["rate_control_mode"] = rate_control_mode
            if scan_type is not None:
                self._values["scan_type"] = scan_type
            if scene_change_detect is not None:
                self._values["scene_change_detect"] = scene_change_detect
            if slices is not None:
                self._values["slices"] = slices
            if tier is not None:
                self._values["tier"] = tier
            if timecode_burnin_settings is not None:
                self._values["timecode_burnin_settings"] = timecode_burnin_settings
            if timecode_insertion is not None:
                self._values["timecode_insertion"] = timecode_insertion

        @builtins.property
        def adaptive_quantization(self) -> typing.Optional[builtins.str]:
            '''Adaptive quantization.

            Allows intra-frame quantizers to vary to improve visual quality.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-adaptivequantization
            '''
            result = self._values.get("adaptive_quantization")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def afd_signaling(self) -> typing.Optional[builtins.str]:
            '''Indicates that AFD values will be written into the output stream.

            If afdSignaling is "auto", the system will try to preserve the input AFD value (in cases where multiple AFD values are valid). If set to "fixed", the AFD value will be the value configured in the fixedAfd parameter.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-afdsignaling
            '''
            result = self._values.get("afd_signaling")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def alternative_transfer_function(self) -> typing.Optional[builtins.str]:
            '''Whether or not EML should insert an Alternative Transfer Function SEI message to support backwards compatibility with non-HDR decoders and displays.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-alternativetransferfunction
            '''
            result = self._values.get("alternative_transfer_function")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def bitrate(self) -> typing.Optional[jsii.Number]:
            '''Average bitrate in bits/second.

            Required when the rate control mode is VBR or CBR. Not used for QVBR. In an MS Smooth output group, each output must have a unique value when its bitrate is rounded down to the nearest multiple of 1000.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-bitrate
            '''
            result = self._values.get("bitrate")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def buf_size(self) -> typing.Optional[jsii.Number]:
            '''Size of buffer (HRD buffer model) in bits.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-bufsize
            '''
            result = self._values.get("buf_size")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def color_metadata(self) -> typing.Optional[builtins.str]:
            '''Includes colorspace metadata in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-colormetadata
            '''
            result = self._values.get("color_metadata")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def color_space_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.H265ColorSpaceSettingsProperty"]]:
            '''Color Space settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-colorspacesettings
            '''
            result = self._values.get("color_space_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.H265ColorSpaceSettingsProperty"]], result)

        @builtins.property
        def filter_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.H265FilterSettingsProperty"]]:
            '''Optional filters that you can apply to an encode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-filtersettings
            '''
            result = self._values.get("filter_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.H265FilterSettingsProperty"]], result)

        @builtins.property
        def fixed_afd(self) -> typing.Optional[builtins.str]:
            '''Four bit AFD value to write on all frames of video in the output stream.

            Only valid when afdSignaling is set to 'Fixed'.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-fixedafd
            '''
            result = self._values.get("fixed_afd")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def flicker_aq(self) -> typing.Optional[builtins.str]:
            '''If set to enabled, adjust quantization within each frame to reduce flicker or 'pop' on I-frames.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-flickeraq
            '''
            result = self._values.get("flicker_aq")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def framerate_denominator(self) -> typing.Optional[jsii.Number]:
            '''Framerate denominator.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-frameratedenominator
            '''
            result = self._values.get("framerate_denominator")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def framerate_numerator(self) -> typing.Optional[jsii.Number]:
            '''Framerate numerator - framerate is a fraction, e.g. 24000 / 1001 = 23.976 fps.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-frameratenumerator
            '''
            result = self._values.get("framerate_numerator")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def gop_closed_cadence(self) -> typing.Optional[jsii.Number]:
            '''Frequency of closed GOPs.

            In streaming applications, it is recommended that this be set to 1 so a decoder joining mid-stream will receive an IDR frame as quickly as possible. Setting this value to 0 will break output segmenting.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-gopclosedcadence
            '''
            result = self._values.get("gop_closed_cadence")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def gop_size(self) -> typing.Optional[jsii.Number]:
            '''GOP size (keyframe interval) in units of either frames or seconds per gopSizeUnits.

            If gopSizeUnits is frames, gopSize must be an integer and must be greater than or equal to 1.
            If gopSizeUnits is seconds, gopSize must be greater than 0, but need not be an integer.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-gopsize
            '''
            result = self._values.get("gop_size")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def gop_size_units(self) -> typing.Optional[builtins.str]:
            '''Indicates if the gopSize is specified in frames or seconds.

            If seconds the system will convert the gopSize into a frame count at run time.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-gopsizeunits
            '''
            result = self._values.get("gop_size_units")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def level(self) -> typing.Optional[builtins.str]:
            '''H.265 Level.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-level
            '''
            result = self._values.get("level")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def look_ahead_rate_control(self) -> typing.Optional[builtins.str]:
            '''Amount of lookahead.

            A value of low can decrease latency and memory usage, while high can produce better quality for certain content.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-lookaheadratecontrol
            '''
            result = self._values.get("look_ahead_rate_control")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def max_bitrate(self) -> typing.Optional[jsii.Number]:
            '''For QVBR: See the tooltip for Quality level.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-maxbitrate
            '''
            result = self._values.get("max_bitrate")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def min_i_interval(self) -> typing.Optional[jsii.Number]:
            '''Only meaningful if sceneChangeDetect is set to enabled.

            Defaults to 5 if multiplex rate control is used. Enforces separation between repeated (cadence) I-frames and I-frames inserted by Scene Change Detection. If a scene change I-frame is within I-interval frames of a cadence I-frame, the GOP is shrunk and/or stretched to the scene change I-frame. GOP stretch requires enabling lookahead as well as setting I-interval. The normal cadence resumes for the next GOP. Note: Maximum GOP stretch = GOP size + Min-I-interval - 1

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-miniinterval
            '''
            result = self._values.get("min_i_interval")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def par_denominator(self) -> typing.Optional[jsii.Number]:
            '''Pixel Aspect Ratio denominator.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-pardenominator
            '''
            result = self._values.get("par_denominator")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def par_numerator(self) -> typing.Optional[jsii.Number]:
            '''Pixel Aspect Ratio numerator.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-parnumerator
            '''
            result = self._values.get("par_numerator")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def profile(self) -> typing.Optional[builtins.str]:
            '''H.265 Profile.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-profile
            '''
            result = self._values.get("profile")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def qvbr_quality_level(self) -> typing.Optional[jsii.Number]:
            '''Controls the target quality for the video encode.

            Applies only when the rate control mode is QVBR. Set values for the QVBR quality level field and Max bitrate field that suit your most important viewing devices. Recommended values are:

            - Primary screen: Quality level: 8 to 10. Max bitrate: 4M
            - PC or tablet: Quality level: 7. Max bitrate: 1.5M to 3M
            - Smartphone: Quality level: 6. Max bitrate: 1M to 1.5M

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-qvbrqualitylevel
            '''
            result = self._values.get("qvbr_quality_level")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def rate_control_mode(self) -> typing.Optional[builtins.str]:
            '''Rate control mode.

            QVBR: Quality will match the specified quality level except when it is constrained by the
            maximum bitrate. Recommended if you or your viewers pay for bandwidth. CBR: Quality varies, depending on the video complexity. Recommended only if you distribute
            your assets to devices that cannot handle variable bitrates. Multiplex: This rate control mode is only supported (and is required) when the video is being
            delivered to a MediaLive Multiplex in which case the rate control configuration is controlled
            by the properties within the Multiplex Program.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-ratecontrolmode
            '''
            result = self._values.get("rate_control_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def scan_type(self) -> typing.Optional[builtins.str]:
            '''Sets the scan type of the output to progressive or top-field-first interlaced.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-scantype
            '''
            result = self._values.get("scan_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def scene_change_detect(self) -> typing.Optional[builtins.str]:
            '''Scene change detection.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-scenechangedetect
            '''
            result = self._values.get("scene_change_detect")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def slices(self) -> typing.Optional[jsii.Number]:
            '''Number of slices per picture.

            Must be less than or equal to the number of macroblock rows for progressive pictures, and less than or equal to half the number of macroblock rows for interlaced pictures.
            This field is optional; when no value is specified the encoder will choose the number of slices based on encode resolution.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-slices
            '''
            result = self._values.get("slices")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def tier(self) -> typing.Optional[builtins.str]:
            '''H.265 Tier.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-tier
            '''
            result = self._values.get("tier")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def timecode_burnin_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TimecodeBurninSettingsProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-timecodeburninsettings
            '''
            result = self._values.get("timecode_burnin_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TimecodeBurninSettingsProperty"]], result)

        @builtins.property
        def timecode_insertion(self) -> typing.Optional[builtins.str]:
            '''Determines how timecodes should be inserted into the video elementary stream.

            - 'disabled': Do not include timecodes
            - 'picTimingSei': Pass through picture timing SEI messages from the source specified in Timecode Config

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-h265settings.html#cfn-medialive-channel-h265settings-timecodeinsertion
            '''
            result = self._values.get("timecode_insertion")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "H265SettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.Hdr10SettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"max_cll": "maxCll", "max_fall": "maxFall"},
    )
    class Hdr10SettingsProperty:
        def __init__(
            self,
            *,
            max_cll: typing.Optional[jsii.Number] = None,
            max_fall: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Hdr10 Settings.

            The parents of this entity are H265ColorSpaceSettings (for color space settings in the output) and VideoSelectorColorSpaceSettings (for color space settings in the input).

            :param max_cll: Maximum Content Light Level An integer metadata value defining the maximum light level, in nits, of any single pixel within an encoded HDR video stream or file.
            :param max_fall: Maximum Frame Average Light Level An integer metadata value defining the maximum average light level, in nits, for any single frame within an encoded HDR video stream or file.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hdr10settings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                hdr10_settings_property = medialive.CfnChannel.Hdr10SettingsProperty(
                    max_cll=123,
                    max_fall=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__8631eeed4340fce1ed9958aed8291abe2ab4233f7766a2c2ec89429b07817fd6)
                check_type(argname="argument max_cll", value=max_cll, expected_type=type_hints["max_cll"])
                check_type(argname="argument max_fall", value=max_fall, expected_type=type_hints["max_fall"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if max_cll is not None:
                self._values["max_cll"] = max_cll
            if max_fall is not None:
                self._values["max_fall"] = max_fall

        @builtins.property
        def max_cll(self) -> typing.Optional[jsii.Number]:
            '''Maximum Content Light Level An integer metadata value defining the maximum light level, in nits, of any single pixel within an encoded HDR video stream or file.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hdr10settings.html#cfn-medialive-channel-hdr10settings-maxcll
            '''
            result = self._values.get("max_cll")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def max_fall(self) -> typing.Optional[jsii.Number]:
            '''Maximum Frame Average Light Level An integer metadata value defining the maximum average light level, in nits, for any single frame within an encoded HDR video stream or file.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hdr10settings.html#cfn-medialive-channel-hdr10settings-maxfall
            '''
            result = self._values.get("max_fall")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "Hdr10SettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.HlsAkamaiSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "connection_retry_interval": "connectionRetryInterval",
            "filecache_duration": "filecacheDuration",
            "http_transfer_mode": "httpTransferMode",
            "num_retries": "numRetries",
            "restart_delay": "restartDelay",
            "salt": "salt",
            "token": "token",
        },
    )
    class HlsAkamaiSettingsProperty:
        def __init__(
            self,
            *,
            connection_retry_interval: typing.Optional[jsii.Number] = None,
            filecache_duration: typing.Optional[jsii.Number] = None,
            http_transfer_mode: typing.Optional[builtins.str] = None,
            num_retries: typing.Optional[jsii.Number] = None,
            restart_delay: typing.Optional[jsii.Number] = None,
            salt: typing.Optional[builtins.str] = None,
            token: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The Akamai settings in an HLS output.

            The parent of this entity is HlsCdnSettings.

            :param connection_retry_interval: The number of seconds to wait before retrying a connection to the CDN if the connection is lost.
            :param filecache_duration: The size, in seconds, of the file cache for streaming outputs.
            :param http_transfer_mode: Specifies whether to use chunked transfer encoding to Akamai. To enable this feature, contact Akamai.
            :param num_retries: The number of retry attempts that will be made before the channel is put into an error state.
            :param restart_delay: If a streaming output fails, the number of seconds to wait until a restart is initiated. A value of 0 means never restart.
            :param salt: The salt for authenticated Akamai.
            :param token: The token parameter for authenticated Akamai. If this is not specified, *gda* is used.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                hls_akamai_settings_property = medialive.CfnChannel.HlsAkamaiSettingsProperty(
                    connection_retry_interval=123,
                    filecache_duration=123,
                    http_transfer_mode="httpTransferMode",
                    num_retries=123,
                    restart_delay=123,
                    salt="salt",
                    token="token"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__c9c276dbd70b0c774aeb70109ce83f9be301b3b6f024a79fc109589ccfbb3e2f)
                check_type(argname="argument connection_retry_interval", value=connection_retry_interval, expected_type=type_hints["connection_retry_interval"])
                check_type(argname="argument filecache_duration", value=filecache_duration, expected_type=type_hints["filecache_duration"])
                check_type(argname="argument http_transfer_mode", value=http_transfer_mode, expected_type=type_hints["http_transfer_mode"])
                check_type(argname="argument num_retries", value=num_retries, expected_type=type_hints["num_retries"])
                check_type(argname="argument restart_delay", value=restart_delay, expected_type=type_hints["restart_delay"])
                check_type(argname="argument salt", value=salt, expected_type=type_hints["salt"])
                check_type(argname="argument token", value=token, expected_type=type_hints["token"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if connection_retry_interval is not None:
                self._values["connection_retry_interval"] = connection_retry_interval
            if filecache_duration is not None:
                self._values["filecache_duration"] = filecache_duration
            if http_transfer_mode is not None:
                self._values["http_transfer_mode"] = http_transfer_mode
            if num_retries is not None:
                self._values["num_retries"] = num_retries
            if restart_delay is not None:
                self._values["restart_delay"] = restart_delay
            if salt is not None:
                self._values["salt"] = salt
            if token is not None:
                self._values["token"] = token

        @builtins.property
        def connection_retry_interval(self) -> typing.Optional[jsii.Number]:
            '''The number of seconds to wait before retrying a connection to the CDN if the connection is lost.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-connectionretryinterval
            '''
            result = self._values.get("connection_retry_interval")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def filecache_duration(self) -> typing.Optional[jsii.Number]:
            '''The size, in seconds, of the file cache for streaming outputs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-filecacheduration
            '''
            result = self._values.get("filecache_duration")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def http_transfer_mode(self) -> typing.Optional[builtins.str]:
            '''Specifies whether to use chunked transfer encoding to Akamai.

            To enable this feature, contact Akamai.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-httptransfermode
            '''
            result = self._values.get("http_transfer_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def num_retries(self) -> typing.Optional[jsii.Number]:
            '''The number of retry attempts that will be made before the channel is put into an error state.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-numretries
            '''
            result = self._values.get("num_retries")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def restart_delay(self) -> typing.Optional[jsii.Number]:
            '''If a streaming output fails, the number of seconds to wait until a restart is initiated.

            A value of 0 means never restart.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-restartdelay
            '''
            result = self._values.get("restart_delay")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def salt(self) -> typing.Optional[builtins.str]:
            '''The salt for authenticated Akamai.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-salt
            '''
            result = self._values.get("salt")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def token(self) -> typing.Optional[builtins.str]:
            '''The token parameter for authenticated Akamai.

            If this is not specified, *gda* is used.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsakamaisettings.html#cfn-medialive-channel-hlsakamaisettings-token
            '''
            result = self._values.get("token")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "HlsAkamaiSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.HlsBasicPutSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "connection_retry_interval": "connectionRetryInterval",
            "filecache_duration": "filecacheDuration",
            "num_retries": "numRetries",
            "restart_delay": "restartDelay",
        },
    )
    class HlsBasicPutSettingsProperty:
        def __init__(
            self,
            *,
            connection_retry_interval: typing.Optional[jsii.Number] = None,
            filecache_duration: typing.Optional[jsii.Number] = None,
            num_retries: typing.Optional[jsii.Number] = None,
            restart_delay: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The configuration of HLS Basic Put Settings.

            The parent of this entity is HlsCdnSettings.

            :param connection_retry_interval: The number of seconds to wait before retrying a connection to the CDN if the connection is lost.
            :param filecache_duration: The size, in seconds, of the file cache for streaming outputs.
            :param num_retries: The number of retry attempts that MediaLive makes before the channel is put into an error state.
            :param restart_delay: If a streaming output fails, the number of seconds to wait until a restart is initiated. A value of 0 means never restart.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsbasicputsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                hls_basic_put_settings_property = medialive.CfnChannel.HlsBasicPutSettingsProperty(
                    connection_retry_interval=123,
                    filecache_duration=123,
                    num_retries=123,
                    restart_delay=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__5fd26185e569348925a085e3b239b954e7bdc64639378ac89c60825cb69d6b3e)
                check_type(argname="argument connection_retry_interval", value=connection_retry_interval, expected_type=type_hints["connection_retry_interval"])
                check_type(argname="argument filecache_duration", value=filecache_duration, expected_type=type_hints["filecache_duration"])
                check_type(argname="argument num_retries", value=num_retries, expected_type=type_hints["num_retries"])
                check_type(argname="argument restart_delay", value=restart_delay, expected_type=type_hints["restart_delay"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if connection_retry_interval is not None:
                self._values["connection_retry_interval"] = connection_retry_interval
            if filecache_duration is not None:
                self._values["filecache_duration"] = filecache_duration
            if num_retries is not None:
                self._values["num_retries"] = num_retries
            if restart_delay is not None:
                self._values["restart_delay"] = restart_delay

        @builtins.property
        def connection_retry_interval(self) -> typing.Optional[jsii.Number]:
            '''The number of seconds to wait before retrying a connection to the CDN if the connection is lost.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsbasicputsettings.html#cfn-medialive-channel-hlsbasicputsettings-connectionretryinterval
            '''
            result = self._values.get("connection_retry_interval")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def filecache_duration(self) -> typing.Optional[jsii.Number]:
            '''The size, in seconds, of the file cache for streaming outputs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsbasicputsettings.html#cfn-medialive-channel-hlsbasicputsettings-filecacheduration
            '''
            result = self._values.get("filecache_duration")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def num_retries(self) -> typing.Optional[jsii.Number]:
            '''The number of retry attempts that MediaLive makes before the channel is put into an error state.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsbasicputsettings.html#cfn-medialive-channel-hlsbasicputsettings-numretries
            '''
            result = self._values.get("num_retries")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def restart_delay(self) -> typing.Optional[jsii.Number]:
            '''If a streaming output fails, the number of seconds to wait until a restart is initiated.

            A value of 0 means never restart.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsbasicputsettings.html#cfn-medialive-channel-hlsbasicputsettings-restartdelay
            '''
            result = self._values.get("restart_delay")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "HlsBasicPutSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.HlsCdnSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "hls_akamai_settings": "hlsAkamaiSettings",
            "hls_basic_put_settings": "hlsBasicPutSettings",
            "hls_media_store_settings": "hlsMediaStoreSettings",
            "hls_s3_settings": "hlsS3Settings",
            "hls_webdav_settings": "hlsWebdavSettings",
        },
    )
    class HlsCdnSettingsProperty:
        def __init__(
            self,
            *,
            hls_akamai_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.HlsAkamaiSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            hls_basic_put_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.HlsBasicPutSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            hls_media_store_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.HlsMediaStoreSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            hls_s3_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.HlsS3SettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            hls_webdav_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.HlsWebdavSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The settings for the CDN of an HLS output.

            The parent of this entity is HlsGroupSettings.

            :param hls_akamai_settings: Sets up Akamai as the downstream system for the HLS output group.
            :param hls_basic_put_settings: The settings for Basic Put for the HLS output.
            :param hls_media_store_settings: Sets up MediaStore as the destination for the HLS output.
            :param hls_s3_settings: Sets up Amazon S3 as the destination for this HLS output.
            :param hls_webdav_settings: The settings for Web VTT captions in the HLS output group. The parent of this entity is HlsGroupSettings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlscdnsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                hls_cdn_settings_property = medialive.CfnChannel.HlsCdnSettingsProperty(
                    hls_akamai_settings=medialive.CfnChannel.HlsAkamaiSettingsProperty(
                        connection_retry_interval=123,
                        filecache_duration=123,
                        http_transfer_mode="httpTransferMode",
                        num_retries=123,
                        restart_delay=123,
                        salt="salt",
                        token="token"
                    ),
                    hls_basic_put_settings=medialive.CfnChannel.HlsBasicPutSettingsProperty(
                        connection_retry_interval=123,
                        filecache_duration=123,
                        num_retries=123,
                        restart_delay=123
                    ),
                    hls_media_store_settings=medialive.CfnChannel.HlsMediaStoreSettingsProperty(
                        connection_retry_interval=123,
                        filecache_duration=123,
                        media_store_storage_class="mediaStoreStorageClass",
                        num_retries=123,
                        restart_delay=123
                    ),
                    hls_s3_settings=medialive.CfnChannel.HlsS3SettingsProperty(
                        canned_acl="cannedAcl"
                    ),
                    hls_webdav_settings=medialive.CfnChannel.HlsWebdavSettingsProperty(
                        connection_retry_interval=123,
                        filecache_duration=123,
                        http_transfer_mode="httpTransferMode",
                        num_retries=123,
                        restart_delay=123
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__39c16a24493a15643aed9369183ab7c90c63c99b77792cfeec959395003d99a5)
                check_type(argname="argument hls_akamai_settings", value=hls_akamai_settings, expected_type=type_hints["hls_akamai_settings"])
                check_type(argname="argument hls_basic_put_settings", value=hls_basic_put_settings, expected_type=type_hints["hls_basic_put_settings"])
                check_type(argname="argument hls_media_store_settings", value=hls_media_store_settings, expected_type=type_hints["hls_media_store_settings"])
                check_type(argname="argument hls_s3_settings", value=hls_s3_settings, expected_type=type_hints["hls_s3_settings"])
                check_type(argname="argument hls_webdav_settings", value=hls_webdav_settings, expected_type=type_hints["hls_webdav_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if hls_akamai_settings is not None:
                self._values["hls_akamai_settings"] = hls_akamai_settings
            if hls_basic_put_settings is not None:
                self._values["hls_basic_put_settings"] = hls_basic_put_settings
            if hls_media_store_settings is not None:
                self._values["hls_media_store_settings"] = hls_media_store_settings
            if hls_s3_settings is not None:
                self._values["hls_s3_settings"] = hls_s3_settings
            if hls_webdav_settings is not None:
                self._values["hls_webdav_settings"] = hls_webdav_settings

        @builtins.property
        def hls_akamai_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HlsAkamaiSettingsProperty"]]:
            '''Sets up Akamai as the downstream system for the HLS output group.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlscdnsettings.html#cfn-medialive-channel-hlscdnsettings-hlsakamaisettings
            '''
            result = self._values.get("hls_akamai_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HlsAkamaiSettingsProperty"]], result)

        @builtins.property
        def hls_basic_put_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HlsBasicPutSettingsProperty"]]:
            '''The settings for Basic Put for the HLS output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlscdnsettings.html#cfn-medialive-channel-hlscdnsettings-hlsbasicputsettings
            '''
            result = self._values.get("hls_basic_put_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HlsBasicPutSettingsProperty"]], result)

        @builtins.property
        def hls_media_store_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HlsMediaStoreSettingsProperty"]]:
            '''Sets up MediaStore as the destination for the HLS output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlscdnsettings.html#cfn-medialive-channel-hlscdnsettings-hlsmediastoresettings
            '''
            result = self._values.get("hls_media_store_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HlsMediaStoreSettingsProperty"]], result)

        @builtins.property
        def hls_s3_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HlsS3SettingsProperty"]]:
            '''Sets up Amazon S3 as the destination for this HLS output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlscdnsettings.html#cfn-medialive-channel-hlscdnsettings-hlss3settings
            '''
            result = self._values.get("hls_s3_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HlsS3SettingsProperty"]], result)

        @builtins.property
        def hls_webdav_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HlsWebdavSettingsProperty"]]:
            '''The settings for Web VTT captions in the HLS output group.

            The parent of this entity is HlsGroupSettings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlscdnsettings.html#cfn-medialive-channel-hlscdnsettings-hlswebdavsettings
            '''
            result = self._values.get("hls_webdav_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HlsWebdavSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "HlsCdnSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.HlsGroupSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "ad_markers": "adMarkers",
            "base_url_content": "baseUrlContent",
            "base_url_content1": "baseUrlContent1",
            "base_url_manifest": "baseUrlManifest",
            "base_url_manifest1": "baseUrlManifest1",
            "caption_language_mappings": "captionLanguageMappings",
            "caption_language_setting": "captionLanguageSetting",
            "client_cache": "clientCache",
            "codec_specification": "codecSpecification",
            "constant_iv": "constantIv",
            "destination": "destination",
            "directory_structure": "directoryStructure",
            "discontinuity_tags": "discontinuityTags",
            "encryption_type": "encryptionType",
            "hls_cdn_settings": "hlsCdnSettings",
            "hls_id3_segment_tagging": "hlsId3SegmentTagging",
            "i_frame_only_playlists": "iFrameOnlyPlaylists",
            "incomplete_segment_behavior": "incompleteSegmentBehavior",
            "index_n_segments": "indexNSegments",
            "input_loss_action": "inputLossAction",
            "iv_in_manifest": "ivInManifest",
            "iv_source": "ivSource",
            "keep_segments": "keepSegments",
            "key_format": "keyFormat",
            "key_format_versions": "keyFormatVersions",
            "key_provider_settings": "keyProviderSettings",
            "manifest_compression": "manifestCompression",
            "manifest_duration_format": "manifestDurationFormat",
            "min_segment_length": "minSegmentLength",
            "mode": "mode",
            "output_selection": "outputSelection",
            "program_date_time": "programDateTime",
            "program_date_time_clock": "programDateTimeClock",
            "program_date_time_period": "programDateTimePeriod",
            "redundant_manifest": "redundantManifest",
            "segmentation_mode": "segmentationMode",
            "segment_length": "segmentLength",
            "segments_per_subdirectory": "segmentsPerSubdirectory",
            "stream_inf_resolution": "streamInfResolution",
            "timed_metadata_id3_frame": "timedMetadataId3Frame",
            "timed_metadata_id3_period": "timedMetadataId3Period",
            "timestamp_delta_milliseconds": "timestampDeltaMilliseconds",
            "ts_file_mode": "tsFileMode",
        },
    )
    class HlsGroupSettingsProperty:
        def __init__(
            self,
            *,
            ad_markers: typing.Optional[typing.Sequence[builtins.str]] = None,
            base_url_content: typing.Optional[builtins.str] = None,
            base_url_content1: typing.Optional[builtins.str] = None,
            base_url_manifest: typing.Optional[builtins.str] = None,
            base_url_manifest1: typing.Optional[builtins.str] = None,
            caption_language_mappings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.CaptionLanguageMappingProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            caption_language_setting: typing.Optional[builtins.str] = None,
            client_cache: typing.Optional[builtins.str] = None,
            codec_specification: typing.Optional[builtins.str] = None,
            constant_iv: typing.Optional[builtins.str] = None,
            destination: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.OutputLocationRefProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            directory_structure: typing.Optional[builtins.str] = None,
            discontinuity_tags: typing.Optional[builtins.str] = None,
            encryption_type: typing.Optional[builtins.str] = None,
            hls_cdn_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.HlsCdnSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            hls_id3_segment_tagging: typing.Optional[builtins.str] = None,
            i_frame_only_playlists: typing.Optional[builtins.str] = None,
            incomplete_segment_behavior: typing.Optional[builtins.str] = None,
            index_n_segments: typing.Optional[jsii.Number] = None,
            input_loss_action: typing.Optional[builtins.str] = None,
            iv_in_manifest: typing.Optional[builtins.str] = None,
            iv_source: typing.Optional[builtins.str] = None,
            keep_segments: typing.Optional[jsii.Number] = None,
            key_format: typing.Optional[builtins.str] = None,
            key_format_versions: typing.Optional[builtins.str] = None,
            key_provider_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.KeyProviderSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            manifest_compression: typing.Optional[builtins.str] = None,
            manifest_duration_format: typing.Optional[builtins.str] = None,
            min_segment_length: typing.Optional[jsii.Number] = None,
            mode: typing.Optional[builtins.str] = None,
            output_selection: typing.Optional[builtins.str] = None,
            program_date_time: typing.Optional[builtins.str] = None,
            program_date_time_clock: typing.Optional[builtins.str] = None,
            program_date_time_period: typing.Optional[jsii.Number] = None,
            redundant_manifest: typing.Optional[builtins.str] = None,
            segmentation_mode: typing.Optional[builtins.str] = None,
            segment_length: typing.Optional[jsii.Number] = None,
            segments_per_subdirectory: typing.Optional[jsii.Number] = None,
            stream_inf_resolution: typing.Optional[builtins.str] = None,
            timed_metadata_id3_frame: typing.Optional[builtins.str] = None,
            timed_metadata_id3_period: typing.Optional[jsii.Number] = None,
            timestamp_delta_milliseconds: typing.Optional[jsii.Number] = None,
            ts_file_mode: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The settings for an HLS output group.

            The parent of this entity is OutputGroupSettings.

            :param ad_markers: Chooses one or more ad marker types to pass SCTE35 signals through to this group of Apple HLS outputs.
            :param base_url_content: A partial URI prefix that will be prepended to each output in the media .m3u8 file. The partial URI prefix can be used if the base manifest is delivered from a different URL than the main .m3u8 file.
            :param base_url_content1: Optional. One value per output group. This field is required only if you are completing Base URL content A, and the downstream system has notified you that the media files for pipeline 1 of all outputs are in a location different from the media files for pipeline 0.
            :param base_url_manifest: A partial URI prefix that will be prepended to each output in the media .m3u8 file. The partial URI prefix can be used if the base manifest is delivered from a different URL than the main .m3u8 file.
            :param base_url_manifest1: Optional. One value per output group. Complete this field only if you are completing Base URL manifest A, and the downstream system has notified you that the child manifest files for pipeline 1 of all outputs are in a location different from the child manifest files for pipeline 0.
            :param caption_language_mappings: A mapping of up to 4 captions channels to captions languages. This is meaningful only if captionLanguageSetting is set to "insert."
            :param caption_language_setting: Applies only to 608 embedded output captions. Insert: Include CLOSED-CAPTIONS lines in the manifest. Specify at least one language in the CC1 Language Code field. One CLOSED-CAPTION line is added for each Language Code that you specify. Make sure to specify the languages in the order in which they appear in the original source (if the source is embedded format) or the order of the captions selectors (if the source is other than embedded). Otherwise, languages in the manifest will not match properly with the output captions. None: Include the CLOSED-CAPTIONS=NONE line in the manifest. Omit: Omit any CLOSED-CAPTIONS line from the manifest.
            :param client_cache: When set to "disabled," sets the #EXT-X-ALLOW-CACHE:no tag in the manifest, which prevents clients from saving media segments for later replay.
            :param codec_specification: The specification to use (RFC-6381 or the default RFC-4281) during m3u8 playlist generation.
            :param constant_iv: Used with encryptionType. This is a 128-bit, 16-byte hex value that is represented by a 32-character text string. If ivSource is set to "explicit," this parameter is required and is used as the IV for encryption.
            :param destination: A directory or HTTP destination for the HLS segments, manifest files, and encryption keys (if enabled).
            :param directory_structure: Places segments in subdirectories.
            :param discontinuity_tags: Specifies whether to insert EXT-X-DISCONTINUITY tags in the HLS child manifests for this output group. Typically, choose Insert because these tags are required in the manifest (according to the HLS specification) and serve an important purpose. Choose Never Insert only if the downstream system is doing real-time failover (without using the MediaLive automatic failover feature) and only if that downstream system has advised you to exclude the tags.
            :param encryption_type: Encrypts the segments with the specified encryption scheme. Exclude this parameter if you don't want encryption.
            :param hls_cdn_settings: The parameters that control interactions with the CDN.
            :param hls_id3_segment_tagging: State of HLS ID3 Segment Tagging.
            :param i_frame_only_playlists: DISABLED: Don't create an I-frame-only manifest, but do create the master and media manifests (according to the Output Selection field). STANDARD: Create an I-frame-only manifest for each output that contains video, as well as the other manifests (according to the Output Selection field). The I-frame manifest contains a #EXT-X-I-FRAMES-ONLY tag to indicate it is I-frame only, and one or more #EXT-X-BYTERANGE entries identifying the I-frame position. For example, #EXT-X-BYTERANGE:160364@1461888".
            :param incomplete_segment_behavior: Specifies whether to include the final (incomplete) segment in the media output when the pipeline stops producing output because of a channel stop, a channel pause or a loss of input to the pipeline. Auto means that MediaLive decides whether to include the final segment, depending on the channel class and the types of output groups. Suppress means to never include the incomplete segment. We recommend you choose Auto and let MediaLive control the behavior.
            :param index_n_segments: Applies only if the Mode field is LIVE. Specifies the maximum number of segments in the media manifest file. After this maximum, older segments are removed from the media manifest. This number must be less than or equal to the Keep Segments field.
            :param input_loss_action: A parameter that controls output group behavior on an input loss.
            :param iv_in_manifest: Used with encryptionType. The IV (initialization vector) is a 128-bit number used in conjunction with the key for encrypting blocks. If set to "include," the IV is listed in the manifest. Otherwise, the IV is not in the manifest.
            :param iv_source: Used with encryptionType. The IV (initialization vector) is a 128-bit number used in conjunction with the key for encrypting blocks. If this setting is "followsSegmentNumber," it causes the IV to change every segment (to match the segment number). If this is set to "explicit," you must enter a constantIv value.
            :param keep_segments: Applies only if the Mode field is LIVE. Specifies the number of media segments (.ts files) to retain in the destination directory.
            :param key_format: Specifies how the key is represented in the resource identified by the URI. If the parameter is absent, an implicit value of "identity" is used. A reverse DNS string can also be specified.
            :param key_format_versions: Either a single positive integer version value or a slash-delimited list of version values (1/2/3).
            :param key_provider_settings: The key provider settings.
            :param manifest_compression: When set to gzip, compresses HLS playlist.
            :param manifest_duration_format: Indicates whether the output manifest should use a floating point or integer values for segment duration.
            :param min_segment_length: When set, minimumSegmentLength is enforced by looking ahead and back within the specified range for a nearby avail and extending the segment size if needed.
            :param mode: If "vod," all segments are indexed and kept permanently in the destination and manifest. If "live," only the number segments specified in keepSegments and indexNSegments are kept. Newer segments replace older segments, which might prevent players from rewinding all the way to the beginning of the channel. VOD mode uses HLS EXT-X-PLAYLIST-TYPE of EVENT while the channel is running, converting it to a "VOD" type manifest on completion of the stream.
            :param output_selection: MANIFESTSANDSEGMENTS: Generates manifests (the master manifest, if applicable, and media manifests) for this output group. SEGMENTSONLY: Doesn't generate any manifests for this output group.
            :param program_date_time: Includes or excludes the EXT-X-PROGRAM-DATE-TIME tag in .m3u8 manifest files. The value is calculated as follows: Either the program date and time are initialized using the input timecode source, or the time is initialized using the input timecode source and the date is initialized using the timestampOffset.
            :param program_date_time_clock: Specifies the algorithm used to drive the HLS EXT-X-PROGRAM-DATE-TIME clock. Options include: INITIALIZE_FROM_OUTPUT_TIMECODE: The PDT clock is initialized as a function of the first output timecode, then incremented by the EXTINF duration of each encoded segment. SYSTEM_CLOCK: The PDT clock is initialized as a function of the UTC wall clock, then incremented by the EXTINF duration of each encoded segment. If the PDT clock diverges from the wall clock by more than 500ms, it is resynchronized to the wall clock.
            :param program_date_time_period: The period of insertion of the EXT-X-PROGRAM-DATE-TIME entry, in seconds.
            :param redundant_manifest: ENABLED: The master manifest (.m3u8 file) for each pipeline includes information about both pipelines: first its own media files, then the media files of the other pipeline. This feature allows a playout device that supports stale manifest detection to switch from one manifest to the other, when the current manifest seems to be stale. There are still two destinations and two master manifests, but both master manifests reference the media files from both pipelines. DISABLED: The master manifest (.m3u8 file) for each pipeline includes information about its own pipeline only. For an HLS output group with MediaPackage as the destination, the DISABLED behavior is always followed. MediaPackage regenerates the manifests it serves to players, so a redundant manifest from MediaLive is irrelevant.
            :param segmentation_mode: useInputSegmentation has been deprecated. The configured segment size is always used.
            :param segment_length: The length of the MPEG-2 Transport Stream segments to create, in seconds. Note that segments will end on the next keyframe after this number of seconds, so the actual segment length might be longer.
            :param segments_per_subdirectory: The number of segments to write to a subdirectory before starting a new one. For this setting to have an effect, directoryStructure must be subdirectoryPerStream.
            :param stream_inf_resolution: The include or exclude RESOLUTION attribute for a video in the EXT-X-STREAM-INF tag of a variant manifest.
            :param timed_metadata_id3_frame: Indicates the ID3 frame that has the timecode.
            :param timed_metadata_id3_period: The timed metadata interval, in seconds.
            :param timestamp_delta_milliseconds: Provides an extra millisecond delta offset to fine tune the timestamps.
            :param ts_file_mode: SEGMENTEDFILES: Emits the program as segments -multiple .ts media files. SINGLEFILE: Applies only if the Mode field is VOD. Emits the program as a single .ts media file. The media manifest includes #EXT-X-BYTERANGE tags to index segments for playback. A typical use for this value is when sending the output to AWS Elemental MediaConvert, which can accept only a single media file. Playback while the channel is running is not guaranteed due to HTTP server caching.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                hls_group_settings_property = medialive.CfnChannel.HlsGroupSettingsProperty(
                    ad_markers=["adMarkers"],
                    base_url_content="baseUrlContent",
                    base_url_content1="baseUrlContent1",
                    base_url_manifest="baseUrlManifest",
                    base_url_manifest1="baseUrlManifest1",
                    caption_language_mappings=[medialive.CfnChannel.CaptionLanguageMappingProperty(
                        caption_channel=123,
                        language_code="languageCode",
                        language_description="languageDescription"
                    )],
                    caption_language_setting="captionLanguageSetting",
                    client_cache="clientCache",
                    codec_specification="codecSpecification",
                    constant_iv="constantIv",
                    destination=medialive.CfnChannel.OutputLocationRefProperty(
                        destination_ref_id="destinationRefId"
                    ),
                    directory_structure="directoryStructure",
                    discontinuity_tags="discontinuityTags",
                    encryption_type="encryptionType",
                    hls_cdn_settings=medialive.CfnChannel.HlsCdnSettingsProperty(
                        hls_akamai_settings=medialive.CfnChannel.HlsAkamaiSettingsProperty(
                            connection_retry_interval=123,
                            filecache_duration=123,
                            http_transfer_mode="httpTransferMode",
                            num_retries=123,
                            restart_delay=123,
                            salt="salt",
                            token="token"
                        ),
                        hls_basic_put_settings=medialive.CfnChannel.HlsBasicPutSettingsProperty(
                            connection_retry_interval=123,
                            filecache_duration=123,
                            num_retries=123,
                            restart_delay=123
                        ),
                        hls_media_store_settings=medialive.CfnChannel.HlsMediaStoreSettingsProperty(
                            connection_retry_interval=123,
                            filecache_duration=123,
                            media_store_storage_class="mediaStoreStorageClass",
                            num_retries=123,
                            restart_delay=123
                        ),
                        hls_s3_settings=medialive.CfnChannel.HlsS3SettingsProperty(
                            canned_acl="cannedAcl"
                        ),
                        hls_webdav_settings=medialive.CfnChannel.HlsWebdavSettingsProperty(
                            connection_retry_interval=123,
                            filecache_duration=123,
                            http_transfer_mode="httpTransferMode",
                            num_retries=123,
                            restart_delay=123
                        )
                    ),
                    hls_id3_segment_tagging="hlsId3SegmentTagging",
                    i_frame_only_playlists="iFrameOnlyPlaylists",
                    incomplete_segment_behavior="incompleteSegmentBehavior",
                    index_nSegments=123,
                    input_loss_action="inputLossAction",
                    iv_in_manifest="ivInManifest",
                    iv_source="ivSource",
                    keep_segments=123,
                    key_format="keyFormat",
                    key_format_versions="keyFormatVersions",
                    key_provider_settings=medialive.CfnChannel.KeyProviderSettingsProperty(
                        static_key_settings=medialive.CfnChannel.StaticKeySettingsProperty(
                            key_provider_server=medialive.CfnChannel.InputLocationProperty(
                                password_param="passwordParam",
                                uri="uri",
                                username="username"
                            ),
                            static_key_value="staticKeyValue"
                        )
                    ),
                    manifest_compression="manifestCompression",
                    manifest_duration_format="manifestDurationFormat",
                    min_segment_length=123,
                    mode="mode",
                    output_selection="outputSelection",
                    program_date_time="programDateTime",
                    program_date_time_clock="programDateTimeClock",
                    program_date_time_period=123,
                    redundant_manifest="redundantManifest",
                    segmentation_mode="segmentationMode",
                    segment_length=123,
                    segments_per_subdirectory=123,
                    stream_inf_resolution="streamInfResolution",
                    timed_metadata_id3_frame="timedMetadataId3Frame",
                    timed_metadata_id3_period=123,
                    timestamp_delta_milliseconds=123,
                    ts_file_mode="tsFileMode"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__43277643469028afd3f8dd899dc6654cacf101c3bae0a177505fa52a5f65cb23)
                check_type(argname="argument ad_markers", value=ad_markers, expected_type=type_hints["ad_markers"])
                check_type(argname="argument base_url_content", value=base_url_content, expected_type=type_hints["base_url_content"])
                check_type(argname="argument base_url_content1", value=base_url_content1, expected_type=type_hints["base_url_content1"])
                check_type(argname="argument base_url_manifest", value=base_url_manifest, expected_type=type_hints["base_url_manifest"])
                check_type(argname="argument base_url_manifest1", value=base_url_manifest1, expected_type=type_hints["base_url_manifest1"])
                check_type(argname="argument caption_language_mappings", value=caption_language_mappings, expected_type=type_hints["caption_language_mappings"])
                check_type(argname="argument caption_language_setting", value=caption_language_setting, expected_type=type_hints["caption_language_setting"])
                check_type(argname="argument client_cache", value=client_cache, expected_type=type_hints["client_cache"])
                check_type(argname="argument codec_specification", value=codec_specification, expected_type=type_hints["codec_specification"])
                check_type(argname="argument constant_iv", value=constant_iv, expected_type=type_hints["constant_iv"])
                check_type(argname="argument destination", value=destination, expected_type=type_hints["destination"])
                check_type(argname="argument directory_structure", value=directory_structure, expected_type=type_hints["directory_structure"])
                check_type(argname="argument discontinuity_tags", value=discontinuity_tags, expected_type=type_hints["discontinuity_tags"])
                check_type(argname="argument encryption_type", value=encryption_type, expected_type=type_hints["encryption_type"])
                check_type(argname="argument hls_cdn_settings", value=hls_cdn_settings, expected_type=type_hints["hls_cdn_settings"])
                check_type(argname="argument hls_id3_segment_tagging", value=hls_id3_segment_tagging, expected_type=type_hints["hls_id3_segment_tagging"])
                check_type(argname="argument i_frame_only_playlists", value=i_frame_only_playlists, expected_type=type_hints["i_frame_only_playlists"])
                check_type(argname="argument incomplete_segment_behavior", value=incomplete_segment_behavior, expected_type=type_hints["incomplete_segment_behavior"])
                check_type(argname="argument index_n_segments", value=index_n_segments, expected_type=type_hints["index_n_segments"])
                check_type(argname="argument input_loss_action", value=input_loss_action, expected_type=type_hints["input_loss_action"])
                check_type(argname="argument iv_in_manifest", value=iv_in_manifest, expected_type=type_hints["iv_in_manifest"])
                check_type(argname="argument iv_source", value=iv_source, expected_type=type_hints["iv_source"])
                check_type(argname="argument keep_segments", value=keep_segments, expected_type=type_hints["keep_segments"])
                check_type(argname="argument key_format", value=key_format, expected_type=type_hints["key_format"])
                check_type(argname="argument key_format_versions", value=key_format_versions, expected_type=type_hints["key_format_versions"])
                check_type(argname="argument key_provider_settings", value=key_provider_settings, expected_type=type_hints["key_provider_settings"])
                check_type(argname="argument manifest_compression", value=manifest_compression, expected_type=type_hints["manifest_compression"])
                check_type(argname="argument manifest_duration_format", value=manifest_duration_format, expected_type=type_hints["manifest_duration_format"])
                check_type(argname="argument min_segment_length", value=min_segment_length, expected_type=type_hints["min_segment_length"])
                check_type(argname="argument mode", value=mode, expected_type=type_hints["mode"])
                check_type(argname="argument output_selection", value=output_selection, expected_type=type_hints["output_selection"])
                check_type(argname="argument program_date_time", value=program_date_time, expected_type=type_hints["program_date_time"])
                check_type(argname="argument program_date_time_clock", value=program_date_time_clock, expected_type=type_hints["program_date_time_clock"])
                check_type(argname="argument program_date_time_period", value=program_date_time_period, expected_type=type_hints["program_date_time_period"])
                check_type(argname="argument redundant_manifest", value=redundant_manifest, expected_type=type_hints["redundant_manifest"])
                check_type(argname="argument segmentation_mode", value=segmentation_mode, expected_type=type_hints["segmentation_mode"])
                check_type(argname="argument segment_length", value=segment_length, expected_type=type_hints["segment_length"])
                check_type(argname="argument segments_per_subdirectory", value=segments_per_subdirectory, expected_type=type_hints["segments_per_subdirectory"])
                check_type(argname="argument stream_inf_resolution", value=stream_inf_resolution, expected_type=type_hints["stream_inf_resolution"])
                check_type(argname="argument timed_metadata_id3_frame", value=timed_metadata_id3_frame, expected_type=type_hints["timed_metadata_id3_frame"])
                check_type(argname="argument timed_metadata_id3_period", value=timed_metadata_id3_period, expected_type=type_hints["timed_metadata_id3_period"])
                check_type(argname="argument timestamp_delta_milliseconds", value=timestamp_delta_milliseconds, expected_type=type_hints["timestamp_delta_milliseconds"])
                check_type(argname="argument ts_file_mode", value=ts_file_mode, expected_type=type_hints["ts_file_mode"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if ad_markers is not None:
                self._values["ad_markers"] = ad_markers
            if base_url_content is not None:
                self._values["base_url_content"] = base_url_content
            if base_url_content1 is not None:
                self._values["base_url_content1"] = base_url_content1
            if base_url_manifest is not None:
                self._values["base_url_manifest"] = base_url_manifest
            if base_url_manifest1 is not None:
                self._values["base_url_manifest1"] = base_url_manifest1
            if caption_language_mappings is not None:
                self._values["caption_language_mappings"] = caption_language_mappings
            if caption_language_setting is not None:
                self._values["caption_language_setting"] = caption_language_setting
            if client_cache is not None:
                self._values["client_cache"] = client_cache
            if codec_specification is not None:
                self._values["codec_specification"] = codec_specification
            if constant_iv is not None:
                self._values["constant_iv"] = constant_iv
            if destination is not None:
                self._values["destination"] = destination
            if directory_structure is not None:
                self._values["directory_structure"] = directory_structure
            if discontinuity_tags is not None:
                self._values["discontinuity_tags"] = discontinuity_tags
            if encryption_type is not None:
                self._values["encryption_type"] = encryption_type
            if hls_cdn_settings is not None:
                self._values["hls_cdn_settings"] = hls_cdn_settings
            if hls_id3_segment_tagging is not None:
                self._values["hls_id3_segment_tagging"] = hls_id3_segment_tagging
            if i_frame_only_playlists is not None:
                self._values["i_frame_only_playlists"] = i_frame_only_playlists
            if incomplete_segment_behavior is not None:
                self._values["incomplete_segment_behavior"] = incomplete_segment_behavior
            if index_n_segments is not None:
                self._values["index_n_segments"] = index_n_segments
            if input_loss_action is not None:
                self._values["input_loss_action"] = input_loss_action
            if iv_in_manifest is not None:
                self._values["iv_in_manifest"] = iv_in_manifest
            if iv_source is not None:
                self._values["iv_source"] = iv_source
            if keep_segments is not None:
                self._values["keep_segments"] = keep_segments
            if key_format is not None:
                self._values["key_format"] = key_format
            if key_format_versions is not None:
                self._values["key_format_versions"] = key_format_versions
            if key_provider_settings is not None:
                self._values["key_provider_settings"] = key_provider_settings
            if manifest_compression is not None:
                self._values["manifest_compression"] = manifest_compression
            if manifest_duration_format is not None:
                self._values["manifest_duration_format"] = manifest_duration_format
            if min_segment_length is not None:
                self._values["min_segment_length"] = min_segment_length
            if mode is not None:
                self._values["mode"] = mode
            if output_selection is not None:
                self._values["output_selection"] = output_selection
            if program_date_time is not None:
                self._values["program_date_time"] = program_date_time
            if program_date_time_clock is not None:
                self._values["program_date_time_clock"] = program_date_time_clock
            if program_date_time_period is not None:
                self._values["program_date_time_period"] = program_date_time_period
            if redundant_manifest is not None:
                self._values["redundant_manifest"] = redundant_manifest
            if segmentation_mode is not None:
                self._values["segmentation_mode"] = segmentation_mode
            if segment_length is not None:
                self._values["segment_length"] = segment_length
            if segments_per_subdirectory is not None:
                self._values["segments_per_subdirectory"] = segments_per_subdirectory
            if stream_inf_resolution is not None:
                self._values["stream_inf_resolution"] = stream_inf_resolution
            if timed_metadata_id3_frame is not None:
                self._values["timed_metadata_id3_frame"] = timed_metadata_id3_frame
            if timed_metadata_id3_period is not None:
                self._values["timed_metadata_id3_period"] = timed_metadata_id3_period
            if timestamp_delta_milliseconds is not None:
                self._values["timestamp_delta_milliseconds"] = timestamp_delta_milliseconds
            if ts_file_mode is not None:
                self._values["ts_file_mode"] = ts_file_mode

        @builtins.property
        def ad_markers(self) -> typing.Optional[typing.List[builtins.str]]:
            '''Chooses one or more ad marker types to pass SCTE35 signals through to this group of Apple HLS outputs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-admarkers
            '''
            result = self._values.get("ad_markers")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def base_url_content(self) -> typing.Optional[builtins.str]:
            '''A partial URI prefix that will be prepended to each output in the media .m3u8 file. The partial URI prefix can be used if the base manifest is delivered from a different URL than the main .m3u8 file.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-baseurlcontent
            '''
            result = self._values.get("base_url_content")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def base_url_content1(self) -> typing.Optional[builtins.str]:
            '''Optional.

            One value per output group. This field is required only if you are completing Base URL content A, and the downstream system has notified you that the media files for pipeline 1 of all outputs are in a location different from the media files for pipeline 0.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-baseurlcontent1
            '''
            result = self._values.get("base_url_content1")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def base_url_manifest(self) -> typing.Optional[builtins.str]:
            '''A partial URI prefix that will be prepended to each output in the media .m3u8 file. The partial URI prefix can be used if the base manifest is delivered from a different URL than the main .m3u8 file.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-baseurlmanifest
            '''
            result = self._values.get("base_url_manifest")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def base_url_manifest1(self) -> typing.Optional[builtins.str]:
            '''Optional.

            One value per output group. Complete this field only if you are completing Base URL manifest A, and the downstream system has notified you that the child manifest files for pipeline 1 of all outputs are in a location different from the child manifest files for pipeline 0.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-baseurlmanifest1
            '''
            result = self._values.get("base_url_manifest1")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def caption_language_mappings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.CaptionLanguageMappingProperty"]]]]:
            '''A mapping of up to 4 captions channels to captions languages.

            This is meaningful only if captionLanguageSetting is set to "insert."

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-captionlanguagemappings
            '''
            result = self._values.get("caption_language_mappings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.CaptionLanguageMappingProperty"]]]], result)

        @builtins.property
        def caption_language_setting(self) -> typing.Optional[builtins.str]:
            '''Applies only to 608 embedded output captions.

            Insert: Include CLOSED-CAPTIONS lines in the manifest. Specify at least one language in the CC1 Language Code field. One CLOSED-CAPTION line is added for each Language Code that you specify. Make sure to specify the languages in the order in which they appear in the original source (if the source is embedded format) or the order of the captions selectors (if the source is other than embedded). Otherwise, languages in the manifest will not match properly with the output captions. None: Include the CLOSED-CAPTIONS=NONE line in the manifest. Omit: Omit any CLOSED-CAPTIONS line from the manifest.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-captionlanguagesetting
            '''
            result = self._values.get("caption_language_setting")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def client_cache(self) -> typing.Optional[builtins.str]:
            '''When set to "disabled," sets the #EXT-X-ALLOW-CACHE:no tag in the manifest, which prevents clients from saving media segments for later replay.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-clientcache
            '''
            result = self._values.get("client_cache")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def codec_specification(self) -> typing.Optional[builtins.str]:
            '''The specification to use (RFC-6381 or the default RFC-4281) during m3u8 playlist generation.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-codecspecification
            '''
            result = self._values.get("codec_specification")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def constant_iv(self) -> typing.Optional[builtins.str]:
            '''Used with encryptionType.

            This is a 128-bit, 16-byte hex value that is represented by a 32-character text string. If ivSource is set to "explicit," this parameter is required and is used as the IV for encryption.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-constantiv
            '''
            result = self._values.get("constant_iv")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def destination(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputLocationRefProperty"]]:
            '''A directory or HTTP destination for the HLS segments, manifest files, and encryption keys (if enabled).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-destination
            '''
            result = self._values.get("destination")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputLocationRefProperty"]], result)

        @builtins.property
        def directory_structure(self) -> typing.Optional[builtins.str]:
            '''Places segments in subdirectories.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-directorystructure
            '''
            result = self._values.get("directory_structure")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def discontinuity_tags(self) -> typing.Optional[builtins.str]:
            '''Specifies whether to insert EXT-X-DISCONTINUITY tags in the HLS child manifests for this output group.

            Typically, choose Insert because these tags are required in the manifest (according to the HLS specification) and serve an important purpose.
            Choose Never Insert only if the downstream system is doing real-time failover (without using the MediaLive automatic failover feature) and only if that downstream system has advised you to exclude the tags.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-discontinuitytags
            '''
            result = self._values.get("discontinuity_tags")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def encryption_type(self) -> typing.Optional[builtins.str]:
            '''Encrypts the segments with the specified encryption scheme.

            Exclude this parameter if you don't want encryption.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-encryptiontype
            '''
            result = self._values.get("encryption_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def hls_cdn_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HlsCdnSettingsProperty"]]:
            '''The parameters that control interactions with the CDN.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-hlscdnsettings
            '''
            result = self._values.get("hls_cdn_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HlsCdnSettingsProperty"]], result)

        @builtins.property
        def hls_id3_segment_tagging(self) -> typing.Optional[builtins.str]:
            '''State of HLS ID3 Segment Tagging.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-hlsid3segmenttagging
            '''
            result = self._values.get("hls_id3_segment_tagging")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def i_frame_only_playlists(self) -> typing.Optional[builtins.str]:
            '''DISABLED: Don't create an I-frame-only manifest, but do create the master and media manifests (according to the Output Selection field).

            STANDARD: Create an I-frame-only manifest for each output that contains video, as well as the other manifests (according to the Output Selection field). The I-frame manifest contains a #EXT-X-I-FRAMES-ONLY tag to indicate it is I-frame only, and one or more #EXT-X-BYTERANGE entries identifying the I-frame position. For example, #EXT-X-BYTERANGE:160364@1461888".

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-iframeonlyplaylists
            '''
            result = self._values.get("i_frame_only_playlists")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def incomplete_segment_behavior(self) -> typing.Optional[builtins.str]:
            '''Specifies whether to include the final (incomplete) segment in the media output when the pipeline stops producing output because of a channel stop, a channel pause or a loss of input to the pipeline.

            Auto means that MediaLive decides whether to include the final segment, depending on the channel class and the types of output groups.
            Suppress means to never include the incomplete segment. We recommend you choose Auto and let MediaLive control the behavior.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-incompletesegmentbehavior
            '''
            result = self._values.get("incomplete_segment_behavior")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def index_n_segments(self) -> typing.Optional[jsii.Number]:
            '''Applies only if the Mode field is LIVE.

            Specifies the maximum number of segments in the media manifest file. After this maximum, older segments are removed from the media manifest. This number must be less than or equal to the Keep Segments field.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-indexnsegments
            '''
            result = self._values.get("index_n_segments")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def input_loss_action(self) -> typing.Optional[builtins.str]:
            '''A parameter that controls output group behavior on an input loss.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-inputlossaction
            '''
            result = self._values.get("input_loss_action")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def iv_in_manifest(self) -> typing.Optional[builtins.str]:
            '''Used with encryptionType.

            The IV (initialization vector) is a 128-bit number used in conjunction with the key for encrypting blocks. If set to "include," the IV is listed in the manifest. Otherwise, the IV is not in the manifest.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-ivinmanifest
            '''
            result = self._values.get("iv_in_manifest")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def iv_source(self) -> typing.Optional[builtins.str]:
            '''Used with encryptionType.

            The IV (initialization vector) is a 128-bit number used in conjunction with the key for encrypting blocks. If this setting is "followsSegmentNumber," it causes the IV to change every segment (to match the segment number). If this is set to "explicit," you must enter a constantIv value.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-ivsource
            '''
            result = self._values.get("iv_source")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def keep_segments(self) -> typing.Optional[jsii.Number]:
            '''Applies only if the Mode field is LIVE.

            Specifies the number of media segments (.ts files) to retain in the destination directory.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-keepsegments
            '''
            result = self._values.get("keep_segments")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def key_format(self) -> typing.Optional[builtins.str]:
            '''Specifies how the key is represented in the resource identified by the URI.

            If the parameter is absent, an implicit value of "identity" is used. A reverse DNS string can also be specified.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-keyformat
            '''
            result = self._values.get("key_format")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def key_format_versions(self) -> typing.Optional[builtins.str]:
            '''Either a single positive integer version value or a slash-delimited list of version values (1/2/3).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-keyformatversions
            '''
            result = self._values.get("key_format_versions")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def key_provider_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.KeyProviderSettingsProperty"]]:
            '''The key provider settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-keyprovidersettings
            '''
            result = self._values.get("key_provider_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.KeyProviderSettingsProperty"]], result)

        @builtins.property
        def manifest_compression(self) -> typing.Optional[builtins.str]:
            '''When set to gzip, compresses HLS playlist.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-manifestcompression
            '''
            result = self._values.get("manifest_compression")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def manifest_duration_format(self) -> typing.Optional[builtins.str]:
            '''Indicates whether the output manifest should use a floating point or integer values for segment duration.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-manifestdurationformat
            '''
            result = self._values.get("manifest_duration_format")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def min_segment_length(self) -> typing.Optional[jsii.Number]:
            '''When set, minimumSegmentLength is enforced by looking ahead and back within the specified range for a nearby avail and extending the segment size if needed.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-minsegmentlength
            '''
            result = self._values.get("min_segment_length")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def mode(self) -> typing.Optional[builtins.str]:
            '''If "vod," all segments are indexed and kept permanently in the destination and manifest.

            If "live," only the number segments specified in keepSegments and indexNSegments are kept. Newer segments replace older segments, which might prevent players from rewinding all the way to the beginning of the channel. VOD mode uses HLS EXT-X-PLAYLIST-TYPE of EVENT while the channel is running, converting it to a "VOD" type manifest on completion of the stream.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-mode
            '''
            result = self._values.get("mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def output_selection(self) -> typing.Optional[builtins.str]:
            '''MANIFESTSANDSEGMENTS: Generates manifests (the master manifest, if applicable, and media manifests) for this output group.

            SEGMENTSONLY: Doesn't generate any manifests for this output group.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-outputselection
            '''
            result = self._values.get("output_selection")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def program_date_time(self) -> typing.Optional[builtins.str]:
            '''Includes or excludes the EXT-X-PROGRAM-DATE-TIME tag in .m3u8 manifest files. The value is calculated as follows: Either the program date and time are initialized using the input timecode source, or the time is initialized using the input timecode source and the date is initialized using the timestampOffset.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-programdatetime
            '''
            result = self._values.get("program_date_time")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def program_date_time_clock(self) -> typing.Optional[builtins.str]:
            '''Specifies the algorithm used to drive the HLS EXT-X-PROGRAM-DATE-TIME clock.

            Options include: INITIALIZE_FROM_OUTPUT_TIMECODE: The PDT clock is initialized as a function of the first output timecode, then incremented by the EXTINF duration of each encoded segment. SYSTEM_CLOCK: The PDT clock is initialized as a function of the UTC wall clock, then incremented by the EXTINF duration of each encoded segment. If the PDT clock diverges from the wall clock by more than 500ms, it is resynchronized to the wall clock.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-programdatetimeclock
            '''
            result = self._values.get("program_date_time_clock")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def program_date_time_period(self) -> typing.Optional[jsii.Number]:
            '''The period of insertion of the EXT-X-PROGRAM-DATE-TIME entry, in seconds.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-programdatetimeperiod
            '''
            result = self._values.get("program_date_time_period")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def redundant_manifest(self) -> typing.Optional[builtins.str]:
            '''ENABLED: The master manifest (.m3u8 file) for each pipeline includes information about both pipelines: first its own media files, then the media files of the other pipeline. This feature allows a playout device that supports stale manifest detection to switch from one manifest to the other, when the current manifest seems to be stale. There are still two destinations and two master manifests, but both master manifests reference the media files from both pipelines. DISABLED: The master manifest (.m3u8 file) for each pipeline includes information about its own pipeline only. For an HLS output group with MediaPackage as the destination, the DISABLED behavior is always followed. MediaPackage regenerates the manifests it serves to players, so a redundant manifest from MediaLive is irrelevant.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-redundantmanifest
            '''
            result = self._values.get("redundant_manifest")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def segmentation_mode(self) -> typing.Optional[builtins.str]:
            '''useInputSegmentation has been deprecated.

            The configured segment size is always used.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-segmentationmode
            '''
            result = self._values.get("segmentation_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def segment_length(self) -> typing.Optional[jsii.Number]:
            '''The length of the MPEG-2 Transport Stream segments to create, in seconds.

            Note that segments will end on the next keyframe after this number of seconds, so the actual segment length might be longer.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-segmentlength
            '''
            result = self._values.get("segment_length")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def segments_per_subdirectory(self) -> typing.Optional[jsii.Number]:
            '''The number of segments to write to a subdirectory before starting a new one.

            For this setting to have an effect, directoryStructure must be subdirectoryPerStream.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-segmentspersubdirectory
            '''
            result = self._values.get("segments_per_subdirectory")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def stream_inf_resolution(self) -> typing.Optional[builtins.str]:
            '''The include or exclude RESOLUTION attribute for a video in the EXT-X-STREAM-INF tag of a variant manifest.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-streaminfresolution
            '''
            result = self._values.get("stream_inf_resolution")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def timed_metadata_id3_frame(self) -> typing.Optional[builtins.str]:
            '''Indicates the ID3 frame that has the timecode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-timedmetadataid3frame
            '''
            result = self._values.get("timed_metadata_id3_frame")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def timed_metadata_id3_period(self) -> typing.Optional[jsii.Number]:
            '''The timed metadata interval, in seconds.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-timedmetadataid3period
            '''
            result = self._values.get("timed_metadata_id3_period")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def timestamp_delta_milliseconds(self) -> typing.Optional[jsii.Number]:
            '''Provides an extra millisecond delta offset to fine tune the timestamps.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-timestampdeltamilliseconds
            '''
            result = self._values.get("timestamp_delta_milliseconds")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def ts_file_mode(self) -> typing.Optional[builtins.str]:
            '''SEGMENTEDFILES: Emits the program as segments -multiple .ts media files. SINGLEFILE: Applies only if the Mode field is VOD. Emits the program as a single .ts media file. The media manifest includes #EXT-X-BYTERANGE tags to index segments for playback. A typical use for this value is when sending the output to AWS Elemental MediaConvert, which can accept only a single media file. Playback while the channel is running is not guaranteed due to HTTP server caching.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsgroupsettings.html#cfn-medialive-channel-hlsgroupsettings-tsfilemode
            '''
            result = self._values.get("ts_file_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "HlsGroupSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.HlsInputSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "bandwidth": "bandwidth",
            "buffer_segments": "bufferSegments",
            "retries": "retries",
            "retry_interval": "retryInterval",
            "scte35_source": "scte35Source",
        },
    )
    class HlsInputSettingsProperty:
        def __init__(
            self,
            *,
            bandwidth: typing.Optional[jsii.Number] = None,
            buffer_segments: typing.Optional[jsii.Number] = None,
            retries: typing.Optional[jsii.Number] = None,
            retry_interval: typing.Optional[jsii.Number] = None,
            scte35_source: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Information about how to connect to the upstream system.

            The parent of this entity is NetworkInputSettings.

            :param bandwidth: When specified, the HLS stream with the m3u8 bandwidth that most closely matches this value is chosen. Otherwise, the highest bandwidth stream in the m3u8 is chosen. The bitrate is specified in bits per second, as in an HLS manifest.
            :param buffer_segments: When specified, reading of the HLS input begins this many buffer segments from the end (most recently written segment). When not specified, the HLS input begins with the first segment specified in the m3u8.
            :param retries: The number of consecutive times that attempts to read a manifest or segment must fail before the input is considered unavailable.
            :param retry_interval: The number of seconds between retries when an attempt to read a manifest or segment fails.
            :param scte35_source: Identifies the source for the SCTE-35 messages that MediaLive will ingest. Messages can be ingested from the content segments (in the stream) or from tags in the playlist (the HLS manifest). MediaLive ignores SCTE-35 information in the source that is not selected.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsinputsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                hls_input_settings_property = medialive.CfnChannel.HlsInputSettingsProperty(
                    bandwidth=123,
                    buffer_segments=123,
                    retries=123,
                    retry_interval=123,
                    scte35_source="scte35Source"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__85e35acc31759a74bea36f47e87d898ccc948162991af7236a4a7f3ede4b0143)
                check_type(argname="argument bandwidth", value=bandwidth, expected_type=type_hints["bandwidth"])
                check_type(argname="argument buffer_segments", value=buffer_segments, expected_type=type_hints["buffer_segments"])
                check_type(argname="argument retries", value=retries, expected_type=type_hints["retries"])
                check_type(argname="argument retry_interval", value=retry_interval, expected_type=type_hints["retry_interval"])
                check_type(argname="argument scte35_source", value=scte35_source, expected_type=type_hints["scte35_source"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if bandwidth is not None:
                self._values["bandwidth"] = bandwidth
            if buffer_segments is not None:
                self._values["buffer_segments"] = buffer_segments
            if retries is not None:
                self._values["retries"] = retries
            if retry_interval is not None:
                self._values["retry_interval"] = retry_interval
            if scte35_source is not None:
                self._values["scte35_source"] = scte35_source

        @builtins.property
        def bandwidth(self) -> typing.Optional[jsii.Number]:
            '''When specified, the HLS stream with the m3u8 bandwidth that most closely matches this value is chosen.

            Otherwise, the highest bandwidth stream in the m3u8 is chosen. The bitrate is specified in bits per second, as in an HLS manifest.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsinputsettings.html#cfn-medialive-channel-hlsinputsettings-bandwidth
            '''
            result = self._values.get("bandwidth")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def buffer_segments(self) -> typing.Optional[jsii.Number]:
            '''When specified, reading of the HLS input begins this many buffer segments from the end (most recently written segment).

            When not specified, the HLS input begins with the first segment specified in the m3u8.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsinputsettings.html#cfn-medialive-channel-hlsinputsettings-buffersegments
            '''
            result = self._values.get("buffer_segments")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def retries(self) -> typing.Optional[jsii.Number]:
            '''The number of consecutive times that attempts to read a manifest or segment must fail before the input is considered unavailable.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsinputsettings.html#cfn-medialive-channel-hlsinputsettings-retries
            '''
            result = self._values.get("retries")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def retry_interval(self) -> typing.Optional[jsii.Number]:
            '''The number of seconds between retries when an attempt to read a manifest or segment fails.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsinputsettings.html#cfn-medialive-channel-hlsinputsettings-retryinterval
            '''
            result = self._values.get("retry_interval")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def scte35_source(self) -> typing.Optional[builtins.str]:
            '''Identifies the source for the SCTE-35 messages that MediaLive will ingest.

            Messages can be ingested from the content segments (in the stream) or from tags in the playlist (the HLS manifest). MediaLive ignores SCTE-35 information in the source that is not selected.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsinputsettings.html#cfn-medialive-channel-hlsinputsettings-scte35source
            '''
            result = self._values.get("scte35_source")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "HlsInputSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.HlsMediaStoreSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "connection_retry_interval": "connectionRetryInterval",
            "filecache_duration": "filecacheDuration",
            "media_store_storage_class": "mediaStoreStorageClass",
            "num_retries": "numRetries",
            "restart_delay": "restartDelay",
        },
    )
    class HlsMediaStoreSettingsProperty:
        def __init__(
            self,
            *,
            connection_retry_interval: typing.Optional[jsii.Number] = None,
            filecache_duration: typing.Optional[jsii.Number] = None,
            media_store_storage_class: typing.Optional[builtins.str] = None,
            num_retries: typing.Optional[jsii.Number] = None,
            restart_delay: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The configuration of a MediaStore container as the destination for an HLS output.

            The parent of this entity is HlsCdnSettings.

            :param connection_retry_interval: The number of seconds to wait before retrying a connection to the CDN if the connection is lost.
            :param filecache_duration: The size, in seconds, of the file cache for streaming outputs.
            :param media_store_storage_class: When set to temporal, output files are stored in non-persistent memory for faster reading and writing.
            :param num_retries: The number of retry attempts that are made before the channel is put into an error state.
            :param restart_delay: If a streaming output fails, the number of seconds to wait until a restart is initiated. A value of 0 means never restart.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsmediastoresettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                hls_media_store_settings_property = medialive.CfnChannel.HlsMediaStoreSettingsProperty(
                    connection_retry_interval=123,
                    filecache_duration=123,
                    media_store_storage_class="mediaStoreStorageClass",
                    num_retries=123,
                    restart_delay=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__c34dfc65c98c96adab6aa1601ed7e5e5eb64b360f68cee43201fbf138b94c2dd)
                check_type(argname="argument connection_retry_interval", value=connection_retry_interval, expected_type=type_hints["connection_retry_interval"])
                check_type(argname="argument filecache_duration", value=filecache_duration, expected_type=type_hints["filecache_duration"])
                check_type(argname="argument media_store_storage_class", value=media_store_storage_class, expected_type=type_hints["media_store_storage_class"])
                check_type(argname="argument num_retries", value=num_retries, expected_type=type_hints["num_retries"])
                check_type(argname="argument restart_delay", value=restart_delay, expected_type=type_hints["restart_delay"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if connection_retry_interval is not None:
                self._values["connection_retry_interval"] = connection_retry_interval
            if filecache_duration is not None:
                self._values["filecache_duration"] = filecache_duration
            if media_store_storage_class is not None:
                self._values["media_store_storage_class"] = media_store_storage_class
            if num_retries is not None:
                self._values["num_retries"] = num_retries
            if restart_delay is not None:
                self._values["restart_delay"] = restart_delay

        @builtins.property
        def connection_retry_interval(self) -> typing.Optional[jsii.Number]:
            '''The number of seconds to wait before retrying a connection to the CDN if the connection is lost.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsmediastoresettings.html#cfn-medialive-channel-hlsmediastoresettings-connectionretryinterval
            '''
            result = self._values.get("connection_retry_interval")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def filecache_duration(self) -> typing.Optional[jsii.Number]:
            '''The size, in seconds, of the file cache for streaming outputs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsmediastoresettings.html#cfn-medialive-channel-hlsmediastoresettings-filecacheduration
            '''
            result = self._values.get("filecache_duration")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def media_store_storage_class(self) -> typing.Optional[builtins.str]:
            '''When set to temporal, output files are stored in non-persistent memory for faster reading and writing.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsmediastoresettings.html#cfn-medialive-channel-hlsmediastoresettings-mediastorestorageclass
            '''
            result = self._values.get("media_store_storage_class")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def num_retries(self) -> typing.Optional[jsii.Number]:
            '''The number of retry attempts that are made before the channel is put into an error state.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsmediastoresettings.html#cfn-medialive-channel-hlsmediastoresettings-numretries
            '''
            result = self._values.get("num_retries")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def restart_delay(self) -> typing.Optional[jsii.Number]:
            '''If a streaming output fails, the number of seconds to wait until a restart is initiated.

            A value of 0 means never restart.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsmediastoresettings.html#cfn-medialive-channel-hlsmediastoresettings-restartdelay
            '''
            result = self._values.get("restart_delay")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "HlsMediaStoreSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.HlsOutputSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "h265_packaging_type": "h265PackagingType",
            "hls_settings": "hlsSettings",
            "name_modifier": "nameModifier",
            "segment_modifier": "segmentModifier",
        },
    )
    class HlsOutputSettingsProperty:
        def __init__(
            self,
            *,
            h265_packaging_type: typing.Optional[builtins.str] = None,
            hls_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.HlsSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            name_modifier: typing.Optional[builtins.str] = None,
            segment_modifier: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The settings for an HLS output.

            The parent of this entity is OutputSettings.

            :param h265_packaging_type: Only applicable when this output is referencing an H.265 video description. Specifies whether MP4 segments should be packaged as HEV1 or HVC1.
            :param hls_settings: The settings regarding the underlying stream. These settings are different for audio-only outputs.
            :param name_modifier: A string that is concatenated to the end of the destination file name. Accepts "Format Identifiers":#formatIdentifierParameters.
            :param segment_modifier: A string that is concatenated to the end of segment file names.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsoutputsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                hls_output_settings_property = medialive.CfnChannel.HlsOutputSettingsProperty(
                    h265_packaging_type="h265PackagingType",
                    hls_settings=medialive.CfnChannel.HlsSettingsProperty(
                        audio_only_hls_settings=medialive.CfnChannel.AudioOnlyHlsSettingsProperty(
                            audio_group_id="audioGroupId",
                            audio_only_image=medialive.CfnChannel.InputLocationProperty(
                                password_param="passwordParam",
                                uri="uri",
                                username="username"
                            ),
                            audio_track_type="audioTrackType",
                            segment_type="segmentType"
                        ),
                        fmp4_hls_settings=medialive.CfnChannel.Fmp4HlsSettingsProperty(
                            audio_rendition_sets="audioRenditionSets",
                            nielsen_id3_behavior="nielsenId3Behavior",
                            timed_metadata_behavior="timedMetadataBehavior"
                        ),
                        frame_capture_hls_settings=medialive.CfnChannel.FrameCaptureHlsSettingsProperty(),
                        standard_hls_settings=medialive.CfnChannel.StandardHlsSettingsProperty(
                            audio_rendition_sets="audioRenditionSets",
                            m3_u8_settings=medialive.CfnChannel.M3u8SettingsProperty(
                                audio_frames_per_pes=123,
                                audio_pids="audioPids",
                                ecm_pid="ecmPid",
                                klv_behavior="klvBehavior",
                                klv_data_pids="klvDataPids",
                                nielsen_id3_behavior="nielsenId3Behavior",
                                pat_interval=123,
                                pcr_control="pcrControl",
                                pcr_period=123,
                                pcr_pid="pcrPid",
                                pmt_interval=123,
                                pmt_pid="pmtPid",
                                program_num=123,
                                scte35_behavior="scte35Behavior",
                                scte35_pid="scte35Pid",
                                timed_metadata_behavior="timedMetadataBehavior",
                                timed_metadata_pid="timedMetadataPid",
                                transport_stream_id=123,
                                video_pid="videoPid"
                            )
                        )
                    ),
                    name_modifier="nameModifier",
                    segment_modifier="segmentModifier"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__cb651e4a709421705c38b30cf76964de6f941c8c1f875d2463d0ec8bbc0f9230)
                check_type(argname="argument h265_packaging_type", value=h265_packaging_type, expected_type=type_hints["h265_packaging_type"])
                check_type(argname="argument hls_settings", value=hls_settings, expected_type=type_hints["hls_settings"])
                check_type(argname="argument name_modifier", value=name_modifier, expected_type=type_hints["name_modifier"])
                check_type(argname="argument segment_modifier", value=segment_modifier, expected_type=type_hints["segment_modifier"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if h265_packaging_type is not None:
                self._values["h265_packaging_type"] = h265_packaging_type
            if hls_settings is not None:
                self._values["hls_settings"] = hls_settings
            if name_modifier is not None:
                self._values["name_modifier"] = name_modifier
            if segment_modifier is not None:
                self._values["segment_modifier"] = segment_modifier

        @builtins.property
        def h265_packaging_type(self) -> typing.Optional[builtins.str]:
            '''Only applicable when this output is referencing an H.265 video description. Specifies whether MP4 segments should be packaged as HEV1 or HVC1.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsoutputsettings.html#cfn-medialive-channel-hlsoutputsettings-h265packagingtype
            '''
            result = self._values.get("h265_packaging_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def hls_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HlsSettingsProperty"]]:
            '''The settings regarding the underlying stream.

            These settings are different for audio-only outputs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsoutputsettings.html#cfn-medialive-channel-hlsoutputsettings-hlssettings
            '''
            result = self._values.get("hls_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HlsSettingsProperty"]], result)

        @builtins.property
        def name_modifier(self) -> typing.Optional[builtins.str]:
            '''A string that is concatenated to the end of the destination file name.

            Accepts "Format Identifiers":#formatIdentifierParameters.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsoutputsettings.html#cfn-medialive-channel-hlsoutputsettings-namemodifier
            '''
            result = self._values.get("name_modifier")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def segment_modifier(self) -> typing.Optional[builtins.str]:
            '''A string that is concatenated to the end of segment file names.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlsoutputsettings.html#cfn-medialive-channel-hlsoutputsettings-segmentmodifier
            '''
            result = self._values.get("segment_modifier")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "HlsOutputSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.HlsS3SettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"canned_acl": "cannedAcl"},
    )
    class HlsS3SettingsProperty:
        def __init__(self, *, canned_acl: typing.Optional[builtins.str] = None) -> None:
            '''Sets up Amazon S3 as the destination for this HLS output.

            The parent of this entity is HlsCdnSettings.

            :param canned_acl: Specify the canned ACL to apply to each S3 request. Defaults to none.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlss3settings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                hls_s3_settings_property = medialive.CfnChannel.HlsS3SettingsProperty(
                    canned_acl="cannedAcl"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__8c236c46072c026e96d92b31c12a791265f71a84b587c52359dae972fd466d88)
                check_type(argname="argument canned_acl", value=canned_acl, expected_type=type_hints["canned_acl"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if canned_acl is not None:
                self._values["canned_acl"] = canned_acl

        @builtins.property
        def canned_acl(self) -> typing.Optional[builtins.str]:
            '''Specify the canned ACL to apply to each S3 request.

            Defaults to none.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlss3settings.html#cfn-medialive-channel-hlss3settings-cannedacl
            '''
            result = self._values.get("canned_acl")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "HlsS3SettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.HlsSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "audio_only_hls_settings": "audioOnlyHlsSettings",
            "fmp4_hls_settings": "fmp4HlsSettings",
            "frame_capture_hls_settings": "frameCaptureHlsSettings",
            "standard_hls_settings": "standardHlsSettings",
        },
    )
    class HlsSettingsProperty:
        def __init__(
            self,
            *,
            audio_only_hls_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AudioOnlyHlsSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            fmp4_hls_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.Fmp4HlsSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            frame_capture_hls_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.FrameCaptureHlsSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            standard_hls_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.StandardHlsSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The settings for an HLS output.

            The parent of this entity is HlsOutputSettings.

            :param audio_only_hls_settings: The settings for an audio-only output.
            :param fmp4_hls_settings: The settings for an fMP4 container.
            :param frame_capture_hls_settings: Settings for a frame capture output in an HLS output group.
            :param standard_hls_settings: The settings for a standard output (an output that is not audio-only).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlssettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                hls_settings_property = medialive.CfnChannel.HlsSettingsProperty(
                    audio_only_hls_settings=medialive.CfnChannel.AudioOnlyHlsSettingsProperty(
                        audio_group_id="audioGroupId",
                        audio_only_image=medialive.CfnChannel.InputLocationProperty(
                            password_param="passwordParam",
                            uri="uri",
                            username="username"
                        ),
                        audio_track_type="audioTrackType",
                        segment_type="segmentType"
                    ),
                    fmp4_hls_settings=medialive.CfnChannel.Fmp4HlsSettingsProperty(
                        audio_rendition_sets="audioRenditionSets",
                        nielsen_id3_behavior="nielsenId3Behavior",
                        timed_metadata_behavior="timedMetadataBehavior"
                    ),
                    frame_capture_hls_settings=medialive.CfnChannel.FrameCaptureHlsSettingsProperty(),
                    standard_hls_settings=medialive.CfnChannel.StandardHlsSettingsProperty(
                        audio_rendition_sets="audioRenditionSets",
                        m3_u8_settings=medialive.CfnChannel.M3u8SettingsProperty(
                            audio_frames_per_pes=123,
                            audio_pids="audioPids",
                            ecm_pid="ecmPid",
                            klv_behavior="klvBehavior",
                            klv_data_pids="klvDataPids",
                            nielsen_id3_behavior="nielsenId3Behavior",
                            pat_interval=123,
                            pcr_control="pcrControl",
                            pcr_period=123,
                            pcr_pid="pcrPid",
                            pmt_interval=123,
                            pmt_pid="pmtPid",
                            program_num=123,
                            scte35_behavior="scte35Behavior",
                            scte35_pid="scte35Pid",
                            timed_metadata_behavior="timedMetadataBehavior",
                            timed_metadata_pid="timedMetadataPid",
                            transport_stream_id=123,
                            video_pid="videoPid"
                        )
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__e9d0a9a86c94248b3bf16c633292594fc322482746c49ce724e7fe7cda046333)
                check_type(argname="argument audio_only_hls_settings", value=audio_only_hls_settings, expected_type=type_hints["audio_only_hls_settings"])
                check_type(argname="argument fmp4_hls_settings", value=fmp4_hls_settings, expected_type=type_hints["fmp4_hls_settings"])
                check_type(argname="argument frame_capture_hls_settings", value=frame_capture_hls_settings, expected_type=type_hints["frame_capture_hls_settings"])
                check_type(argname="argument standard_hls_settings", value=standard_hls_settings, expected_type=type_hints["standard_hls_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if audio_only_hls_settings is not None:
                self._values["audio_only_hls_settings"] = audio_only_hls_settings
            if fmp4_hls_settings is not None:
                self._values["fmp4_hls_settings"] = fmp4_hls_settings
            if frame_capture_hls_settings is not None:
                self._values["frame_capture_hls_settings"] = frame_capture_hls_settings
            if standard_hls_settings is not None:
                self._values["standard_hls_settings"] = standard_hls_settings

        @builtins.property
        def audio_only_hls_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioOnlyHlsSettingsProperty"]]:
            '''The settings for an audio-only output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlssettings.html#cfn-medialive-channel-hlssettings-audioonlyhlssettings
            '''
            result = self._values.get("audio_only_hls_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioOnlyHlsSettingsProperty"]], result)

        @builtins.property
        def fmp4_hls_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Fmp4HlsSettingsProperty"]]:
            '''The settings for an fMP4 container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlssettings.html#cfn-medialive-channel-hlssettings-fmp4hlssettings
            '''
            result = self._values.get("fmp4_hls_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Fmp4HlsSettingsProperty"]], result)

        @builtins.property
        def frame_capture_hls_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.FrameCaptureHlsSettingsProperty"]]:
            '''Settings for a frame capture output in an HLS output group.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlssettings.html#cfn-medialive-channel-hlssettings-framecapturehlssettings
            '''
            result = self._values.get("frame_capture_hls_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.FrameCaptureHlsSettingsProperty"]], result)

        @builtins.property
        def standard_hls_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.StandardHlsSettingsProperty"]]:
            '''The settings for a standard output (an output that is not audio-only).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlssettings.html#cfn-medialive-channel-hlssettings-standardhlssettings
            '''
            result = self._values.get("standard_hls_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.StandardHlsSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "HlsSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.HlsWebdavSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "connection_retry_interval": "connectionRetryInterval",
            "filecache_duration": "filecacheDuration",
            "http_transfer_mode": "httpTransferMode",
            "num_retries": "numRetries",
            "restart_delay": "restartDelay",
        },
    )
    class HlsWebdavSettingsProperty:
        def __init__(
            self,
            *,
            connection_retry_interval: typing.Optional[jsii.Number] = None,
            filecache_duration: typing.Optional[jsii.Number] = None,
            http_transfer_mode: typing.Optional[builtins.str] = None,
            num_retries: typing.Optional[jsii.Number] = None,
            restart_delay: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The configuration of a WebDav server as the downstream system for an HLS output.

            The parent of this entity is HlsCdnSettings.

            :param connection_retry_interval: The number of seconds to wait before retrying a connection to the CDN if the connection is lost.
            :param filecache_duration: The size, in seconds, of the file cache for streaming outputs.
            :param http_transfer_mode: Specifies whether to use chunked transfer encoding to WebDAV.
            :param num_retries: The number of retry attempts that are made before the channel is put into an error state.
            :param restart_delay: If a streaming output fails, the number of seconds to wait until a restart is initiated. A value of 0 means never restart.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlswebdavsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                hls_webdav_settings_property = medialive.CfnChannel.HlsWebdavSettingsProperty(
                    connection_retry_interval=123,
                    filecache_duration=123,
                    http_transfer_mode="httpTransferMode",
                    num_retries=123,
                    restart_delay=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__9127d145510b55400db9ebe097d21c49700c749c5836f277c9ac9da29d8eaf1a)
                check_type(argname="argument connection_retry_interval", value=connection_retry_interval, expected_type=type_hints["connection_retry_interval"])
                check_type(argname="argument filecache_duration", value=filecache_duration, expected_type=type_hints["filecache_duration"])
                check_type(argname="argument http_transfer_mode", value=http_transfer_mode, expected_type=type_hints["http_transfer_mode"])
                check_type(argname="argument num_retries", value=num_retries, expected_type=type_hints["num_retries"])
                check_type(argname="argument restart_delay", value=restart_delay, expected_type=type_hints["restart_delay"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if connection_retry_interval is not None:
                self._values["connection_retry_interval"] = connection_retry_interval
            if filecache_duration is not None:
                self._values["filecache_duration"] = filecache_duration
            if http_transfer_mode is not None:
                self._values["http_transfer_mode"] = http_transfer_mode
            if num_retries is not None:
                self._values["num_retries"] = num_retries
            if restart_delay is not None:
                self._values["restart_delay"] = restart_delay

        @builtins.property
        def connection_retry_interval(self) -> typing.Optional[jsii.Number]:
            '''The number of seconds to wait before retrying a connection to the CDN if the connection is lost.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlswebdavsettings.html#cfn-medialive-channel-hlswebdavsettings-connectionretryinterval
            '''
            result = self._values.get("connection_retry_interval")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def filecache_duration(self) -> typing.Optional[jsii.Number]:
            '''The size, in seconds, of the file cache for streaming outputs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlswebdavsettings.html#cfn-medialive-channel-hlswebdavsettings-filecacheduration
            '''
            result = self._values.get("filecache_duration")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def http_transfer_mode(self) -> typing.Optional[builtins.str]:
            '''Specifies whether to use chunked transfer encoding to WebDAV.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlswebdavsettings.html#cfn-medialive-channel-hlswebdavsettings-httptransfermode
            '''
            result = self._values.get("http_transfer_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def num_retries(self) -> typing.Optional[jsii.Number]:
            '''The number of retry attempts that are made before the channel is put into an error state.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlswebdavsettings.html#cfn-medialive-channel-hlswebdavsettings-numretries
            '''
            result = self._values.get("num_retries")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def restart_delay(self) -> typing.Optional[jsii.Number]:
            '''If a streaming output fails, the number of seconds to wait until a restart is initiated.

            A value of 0 means never restart.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-hlswebdavsettings.html#cfn-medialive-channel-hlswebdavsettings-restartdelay
            '''
            result = self._values.get("restart_delay")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "HlsWebdavSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.HtmlMotionGraphicsSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={},
    )
    class HtmlMotionGraphicsSettingsProperty:
        def __init__(self) -> None:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-htmlmotiongraphicssettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                html_motion_graphics_settings_property = medialive.CfnChannel.HtmlMotionGraphicsSettingsProperty()
            '''
            self._values: typing.Dict[builtins.str, typing.Any] = {}

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "HtmlMotionGraphicsSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.InputAttachmentProperty",
        jsii_struct_bases=[],
        name_mapping={
            "automatic_input_failover_settings": "automaticInputFailoverSettings",
            "input_attachment_name": "inputAttachmentName",
            "input_id": "inputId",
            "input_settings": "inputSettings",
        },
    )
    class InputAttachmentProperty:
        def __init__(
            self,
            *,
            automatic_input_failover_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AutomaticInputFailoverSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            input_attachment_name: typing.Optional[builtins.str] = None,
            input_id: typing.Optional[builtins.str] = None,
            input_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.InputSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''An input to attach to this channel.

            This entity is at the top level in the channel.

            :param automatic_input_failover_settings: Settings to implement automatic input failover in this input.
            :param input_attachment_name: A name for the attachment. This is required if you want to use this input in an input switch action.
            :param input_id: The ID of the input to attach.
            :param input_settings: Information about the content to extract from the input and about the general handling of the content.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputattachment.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                input_attachment_property = medialive.CfnChannel.InputAttachmentProperty(
                    automatic_input_failover_settings=medialive.CfnChannel.AutomaticInputFailoverSettingsProperty(
                        error_clear_time_msec=123,
                        failover_conditions=[medialive.CfnChannel.FailoverConditionProperty(
                            failover_condition_settings=medialive.CfnChannel.FailoverConditionSettingsProperty(
                                audio_silence_settings=medialive.CfnChannel.AudioSilenceFailoverSettingsProperty(
                                    audio_selector_name="audioSelectorName",
                                    audio_silence_threshold_msec=123
                                ),
                                input_loss_settings=medialive.CfnChannel.InputLossFailoverSettingsProperty(
                                    input_loss_threshold_msec=123
                                ),
                                video_black_settings=medialive.CfnChannel.VideoBlackFailoverSettingsProperty(
                                    black_detect_threshold=123,
                                    video_black_threshold_msec=123
                                )
                            )
                        )],
                        input_preference="inputPreference",
                        secondary_input_id="secondaryInputId"
                    ),
                    input_attachment_name="inputAttachmentName",
                    input_id="inputId",
                    input_settings=medialive.CfnChannel.InputSettingsProperty(
                        audio_selectors=[medialive.CfnChannel.AudioSelectorProperty(
                            name="name",
                            selector_settings=medialive.CfnChannel.AudioSelectorSettingsProperty(
                                audio_hls_rendition_selection=medialive.CfnChannel.AudioHlsRenditionSelectionProperty(
                                    group_id="groupId",
                                    name="name"
                                ),
                                audio_language_selection=medialive.CfnChannel.AudioLanguageSelectionProperty(
                                    language_code="languageCode",
                                    language_selection_policy="languageSelectionPolicy"
                                ),
                                audio_pid_selection=medialive.CfnChannel.AudioPidSelectionProperty(
                                    pid=123
                                ),
                                audio_track_selection=medialive.CfnChannel.AudioTrackSelectionProperty(
                                    dolby_eDecode=medialive.CfnChannel.AudioDolbyEDecodeProperty(
                                        program_selection="programSelection"
                                    ),
                                    tracks=[medialive.CfnChannel.AudioTrackProperty(
                                        track=123
                                    )]
                                )
                            )
                        )],
                        caption_selectors=[medialive.CfnChannel.CaptionSelectorProperty(
                            language_code="languageCode",
                            name="name",
                            selector_settings=medialive.CfnChannel.CaptionSelectorSettingsProperty(
                                ancillary_source_settings=medialive.CfnChannel.AncillarySourceSettingsProperty(
                                    source_ancillary_channel_number=123
                                ),
                                arib_source_settings=medialive.CfnChannel.AribSourceSettingsProperty(),
                                dvb_sub_source_settings=medialive.CfnChannel.DvbSubSourceSettingsProperty(
                                    ocr_language="ocrLanguage",
                                    pid=123
                                ),
                                embedded_source_settings=medialive.CfnChannel.EmbeddedSourceSettingsProperty(
                                    convert608_to708="convert608To708",
                                    scte20_detection="scte20Detection",
                                    source608_channel_number=123,
                                    source608_track_number=123
                                ),
                                scte20_source_settings=medialive.CfnChannel.Scte20SourceSettingsProperty(
                                    convert608_to708="convert608To708",
                                    source608_channel_number=123
                                ),
                                scte27_source_settings=medialive.CfnChannel.Scte27SourceSettingsProperty(
                                    ocr_language="ocrLanguage",
                                    pid=123
                                ),
                                teletext_source_settings=medialive.CfnChannel.TeletextSourceSettingsProperty(
                                    output_rectangle=medialive.CfnChannel.CaptionRectangleProperty(
                                        height=123,
                                        left_offset=123,
                                        top_offset=123,
                                        width=123
                                    ),
                                    page_number="pageNumber"
                                )
                            )
                        )],
                        deblock_filter="deblockFilter",
                        denoise_filter="denoiseFilter",
                        filter_strength=123,
                        input_filter="inputFilter",
                        network_input_settings=medialive.CfnChannel.NetworkInputSettingsProperty(
                            hls_input_settings=medialive.CfnChannel.HlsInputSettingsProperty(
                                bandwidth=123,
                                buffer_segments=123,
                                retries=123,
                                retry_interval=123,
                                scte35_source="scte35Source"
                            ),
                            server_validation="serverValidation"
                        ),
                        scte35_pid=123,
                        smpte2038_data_preference="smpte2038DataPreference",
                        source_end_behavior="sourceEndBehavior",
                        video_selector=medialive.CfnChannel.VideoSelectorProperty(
                            color_space="colorSpace",
                            color_space_settings=medialive.CfnChannel.VideoSelectorColorSpaceSettingsProperty(
                                hdr10_settings=medialive.CfnChannel.Hdr10SettingsProperty(
                                    max_cll=123,
                                    max_fall=123
                                )
                            ),
                            color_space_usage="colorSpaceUsage",
                            selector_settings=medialive.CfnChannel.VideoSelectorSettingsProperty(
                                video_selector_pid=medialive.CfnChannel.VideoSelectorPidProperty(
                                    pid=123
                                ),
                                video_selector_program_id=medialive.CfnChannel.VideoSelectorProgramIdProperty(
                                    program_id=123
                                )
                            )
                        )
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__a8ce5d39b59d21c93ae714cc8e38981dd11da05bdbb72bdf578194fc344ae99c)
                check_type(argname="argument automatic_input_failover_settings", value=automatic_input_failover_settings, expected_type=type_hints["automatic_input_failover_settings"])
                check_type(argname="argument input_attachment_name", value=input_attachment_name, expected_type=type_hints["input_attachment_name"])
                check_type(argname="argument input_id", value=input_id, expected_type=type_hints["input_id"])
                check_type(argname="argument input_settings", value=input_settings, expected_type=type_hints["input_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if automatic_input_failover_settings is not None:
                self._values["automatic_input_failover_settings"] = automatic_input_failover_settings
            if input_attachment_name is not None:
                self._values["input_attachment_name"] = input_attachment_name
            if input_id is not None:
                self._values["input_id"] = input_id
            if input_settings is not None:
                self._values["input_settings"] = input_settings

        @builtins.property
        def automatic_input_failover_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AutomaticInputFailoverSettingsProperty"]]:
            '''Settings to implement automatic input failover in this input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputattachment.html#cfn-medialive-channel-inputattachment-automaticinputfailoversettings
            '''
            result = self._values.get("automatic_input_failover_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.AutomaticInputFailoverSettingsProperty"]], result)

        @builtins.property
        def input_attachment_name(self) -> typing.Optional[builtins.str]:
            '''A name for the attachment.

            This is required if you want to use this input in an input switch action.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputattachment.html#cfn-medialive-channel-inputattachment-inputattachmentname
            '''
            result = self._values.get("input_attachment_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def input_id(self) -> typing.Optional[builtins.str]:
            '''The ID of the input to attach.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputattachment.html#cfn-medialive-channel-inputattachment-inputid
            '''
            result = self._values.get("input_id")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def input_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputSettingsProperty"]]:
            '''Information about the content to extract from the input and about the general handling of the content.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputattachment.html#cfn-medialive-channel-inputattachment-inputsettings
            '''
            result = self._values.get("input_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InputAttachmentProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.InputChannelLevelProperty",
        jsii_struct_bases=[],
        name_mapping={"gain": "gain", "input_channel": "inputChannel"},
    )
    class InputChannelLevelProperty:
        def __init__(
            self,
            *,
            gain: typing.Optional[jsii.Number] = None,
            input_channel: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The setting to remix the audio.

            The parent of this entity is AudioChannelMappings.

            :param gain: The remixing value. Units are in dB, and acceptable values are within the range from -60 (mute) to 6 dB.
            :param input_channel: The index of the input channel that is used as a source.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputchannellevel.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                input_channel_level_property = medialive.CfnChannel.InputChannelLevelProperty(
                    gain=123,
                    input_channel=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__7021676dd5f6b45fedc01a3339e723be1018c863681ddcae782bf5a4a7b48a3b)
                check_type(argname="argument gain", value=gain, expected_type=type_hints["gain"])
                check_type(argname="argument input_channel", value=input_channel, expected_type=type_hints["input_channel"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if gain is not None:
                self._values["gain"] = gain
            if input_channel is not None:
                self._values["input_channel"] = input_channel

        @builtins.property
        def gain(self) -> typing.Optional[jsii.Number]:
            '''The remixing value.

            Units are in dB, and acceptable values are within the range from -60 (mute) to 6 dB.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputchannellevel.html#cfn-medialive-channel-inputchannellevel-gain
            '''
            result = self._values.get("gain")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def input_channel(self) -> typing.Optional[jsii.Number]:
            '''The index of the input channel that is used as a source.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputchannellevel.html#cfn-medialive-channel-inputchannellevel-inputchannel
            '''
            result = self._values.get("input_channel")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InputChannelLevelProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.InputLocationProperty",
        jsii_struct_bases=[],
        name_mapping={
            "password_param": "passwordParam",
            "uri": "uri",
            "username": "username",
        },
    )
    class InputLocationProperty:
        def __init__(
            self,
            *,
            password_param: typing.Optional[builtins.str] = None,
            uri: typing.Optional[builtins.str] = None,
            username: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The input location.

            The parent of this entity is InputLossBehavior.

            :param password_param: The password parameter that holds the password for accessing the downstream system. This applies only if the downstream system requires credentials.
            :param uri: The URI should be a path to a file that is accessible to the Live system (for example, an http:// URI) depending on the output type. For example, an RTMP destination should have a URI similar to rtmp://fmsserver/live.
            :param username: The user name to connect to the downstream system. This applies only if the downstream system requires credentials.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlocation.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                input_location_property = medialive.CfnChannel.InputLocationProperty(
                    password_param="passwordParam",
                    uri="uri",
                    username="username"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__92d821cc598f5449e3bbe6da92ef7dc80a7f9f4ca4ddc91cc12c1cf7e8c98c84)
                check_type(argname="argument password_param", value=password_param, expected_type=type_hints["password_param"])
                check_type(argname="argument uri", value=uri, expected_type=type_hints["uri"])
                check_type(argname="argument username", value=username, expected_type=type_hints["username"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if password_param is not None:
                self._values["password_param"] = password_param
            if uri is not None:
                self._values["uri"] = uri
            if username is not None:
                self._values["username"] = username

        @builtins.property
        def password_param(self) -> typing.Optional[builtins.str]:
            '''The password parameter that holds the password for accessing the downstream system.

            This applies only if the downstream system requires credentials.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlocation.html#cfn-medialive-channel-inputlocation-passwordparam
            '''
            result = self._values.get("password_param")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def uri(self) -> typing.Optional[builtins.str]:
            '''The URI should be a path to a file that is accessible to the Live system (for example, an http:// URI) depending on the output type.

            For example, an RTMP destination should have a URI similar to rtmp://fmsserver/live.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlocation.html#cfn-medialive-channel-inputlocation-uri
            '''
            result = self._values.get("uri")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def username(self) -> typing.Optional[builtins.str]:
            '''The user name to connect to the downstream system.

            This applies only if the downstream system requires credentials.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlocation.html#cfn-medialive-channel-inputlocation-username
            '''
            result = self._values.get("username")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InputLocationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.InputLossBehaviorProperty",
        jsii_struct_bases=[],
        name_mapping={
            "black_frame_msec": "blackFrameMsec",
            "input_loss_image_color": "inputLossImageColor",
            "input_loss_image_slate": "inputLossImageSlate",
            "input_loss_image_type": "inputLossImageType",
            "repeat_frame_msec": "repeatFrameMsec",
        },
    )
    class InputLossBehaviorProperty:
        def __init__(
            self,
            *,
            black_frame_msec: typing.Optional[jsii.Number] = None,
            input_loss_image_color: typing.Optional[builtins.str] = None,
            input_loss_image_slate: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.InputLocationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            input_loss_image_type: typing.Optional[builtins.str] = None,
            repeat_frame_msec: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The configuration of channel behavior when the input is lost.

            The parent of this entity is GlobalConfiguration.

            :param black_frame_msec: On input loss, the number of milliseconds to substitute black into the output before switching to the frame specified by inputLossImageType. A value x, where 0 <= x <= 1,000,000 and a value of 1,000,000, is interpreted as infinite.
            :param input_loss_image_color: When the input loss image type is "color," this field specifies the color to use. Value: 6 hex characters that represent the values of RGB.
            :param input_loss_image_slate: When the input loss image type is "slate," these fields specify the parameters for accessing the slate.
            :param input_loss_image_type: Indicates whether to substitute a solid color or a slate into the output after the input loss exceeds blackFrameMsec.
            :param repeat_frame_msec: On input loss, the number of milliseconds to repeat the previous picture before substituting black into the output. A value x, where 0 <= x <= 1,000,000 and a value of 1,000,000, is interpreted as infinite.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossbehavior.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                input_loss_behavior_property = medialive.CfnChannel.InputLossBehaviorProperty(
                    black_frame_msec=123,
                    input_loss_image_color="inputLossImageColor",
                    input_loss_image_slate=medialive.CfnChannel.InputLocationProperty(
                        password_param="passwordParam",
                        uri="uri",
                        username="username"
                    ),
                    input_loss_image_type="inputLossImageType",
                    repeat_frame_msec=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__7c70eba6a185f7f1043ea0c95ea820213685745d2d7247058e6bea55e7118e79)
                check_type(argname="argument black_frame_msec", value=black_frame_msec, expected_type=type_hints["black_frame_msec"])
                check_type(argname="argument input_loss_image_color", value=input_loss_image_color, expected_type=type_hints["input_loss_image_color"])
                check_type(argname="argument input_loss_image_slate", value=input_loss_image_slate, expected_type=type_hints["input_loss_image_slate"])
                check_type(argname="argument input_loss_image_type", value=input_loss_image_type, expected_type=type_hints["input_loss_image_type"])
                check_type(argname="argument repeat_frame_msec", value=repeat_frame_msec, expected_type=type_hints["repeat_frame_msec"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if black_frame_msec is not None:
                self._values["black_frame_msec"] = black_frame_msec
            if input_loss_image_color is not None:
                self._values["input_loss_image_color"] = input_loss_image_color
            if input_loss_image_slate is not None:
                self._values["input_loss_image_slate"] = input_loss_image_slate
            if input_loss_image_type is not None:
                self._values["input_loss_image_type"] = input_loss_image_type
            if repeat_frame_msec is not None:
                self._values["repeat_frame_msec"] = repeat_frame_msec

        @builtins.property
        def black_frame_msec(self) -> typing.Optional[jsii.Number]:
            '''On input loss, the number of milliseconds to substitute black into the output before switching to the frame specified by inputLossImageType.

            A value x, where 0 <= x <= 1,000,000 and a value of 1,000,000, is interpreted as infinite.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossbehavior.html#cfn-medialive-channel-inputlossbehavior-blackframemsec
            '''
            result = self._values.get("black_frame_msec")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def input_loss_image_color(self) -> typing.Optional[builtins.str]:
            '''When the input loss image type is "color," this field specifies the color to use.

            Value: 6 hex characters that represent the values of RGB.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossbehavior.html#cfn-medialive-channel-inputlossbehavior-inputlossimagecolor
            '''
            result = self._values.get("input_loss_image_color")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def input_loss_image_slate(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputLocationProperty"]]:
            '''When the input loss image type is "slate," these fields specify the parameters for accessing the slate.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossbehavior.html#cfn-medialive-channel-inputlossbehavior-inputlossimageslate
            '''
            result = self._values.get("input_loss_image_slate")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputLocationProperty"]], result)

        @builtins.property
        def input_loss_image_type(self) -> typing.Optional[builtins.str]:
            '''Indicates whether to substitute a solid color or a slate into the output after the input loss exceeds blackFrameMsec.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossbehavior.html#cfn-medialive-channel-inputlossbehavior-inputlossimagetype
            '''
            result = self._values.get("input_loss_image_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def repeat_frame_msec(self) -> typing.Optional[jsii.Number]:
            '''On input loss, the number of milliseconds to repeat the previous picture before substituting black into the output.

            A value x, where 0 <= x <= 1,000,000 and a value of 1,000,000, is interpreted as infinite.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossbehavior.html#cfn-medialive-channel-inputlossbehavior-repeatframemsec
            '''
            result = self._values.get("repeat_frame_msec")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InputLossBehaviorProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.InputLossFailoverSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"input_loss_threshold_msec": "inputLossThresholdMsec"},
    )
    class InputLossFailoverSettingsProperty:
        def __init__(
            self,
            *,
            input_loss_threshold_msec: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''MediaLive will perform a failover if content is not detected in this input for the specified period.

            The parent of this entity is FailoverConditionSettings.

            :param input_loss_threshold_msec: The amount of time (in milliseconds) that no input is detected. After that time, an input failover will occur.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossfailoversettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                input_loss_failover_settings_property = medialive.CfnChannel.InputLossFailoverSettingsProperty(
                    input_loss_threshold_msec=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ebae3e4a3768fd3e08e2600a0b21c6d7f627f913d8651e6bd362ce3a975cda6c)
                check_type(argname="argument input_loss_threshold_msec", value=input_loss_threshold_msec, expected_type=type_hints["input_loss_threshold_msec"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if input_loss_threshold_msec is not None:
                self._values["input_loss_threshold_msec"] = input_loss_threshold_msec

        @builtins.property
        def input_loss_threshold_msec(self) -> typing.Optional[jsii.Number]:
            '''The amount of time (in milliseconds) that no input is detected.

            After that time, an input failover will occur.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputlossfailoversettings.html#cfn-medialive-channel-inputlossfailoversettings-inputlossthresholdmsec
            '''
            result = self._values.get("input_loss_threshold_msec")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InputLossFailoverSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.InputSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "audio_selectors": "audioSelectors",
            "caption_selectors": "captionSelectors",
            "deblock_filter": "deblockFilter",
            "denoise_filter": "denoiseFilter",
            "filter_strength": "filterStrength",
            "input_filter": "inputFilter",
            "network_input_settings": "networkInputSettings",
            "scte35_pid": "scte35Pid",
            "smpte2038_data_preference": "smpte2038DataPreference",
            "source_end_behavior": "sourceEndBehavior",
            "video_selector": "videoSelector",
        },
    )
    class InputSettingsProperty:
        def __init__(
            self,
            *,
            audio_selectors: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AudioSelectorProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            caption_selectors: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.CaptionSelectorProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            deblock_filter: typing.Optional[builtins.str] = None,
            denoise_filter: typing.Optional[builtins.str] = None,
            filter_strength: typing.Optional[jsii.Number] = None,
            input_filter: typing.Optional[builtins.str] = None,
            network_input_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.NetworkInputSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            scte35_pid: typing.Optional[jsii.Number] = None,
            smpte2038_data_preference: typing.Optional[builtins.str] = None,
            source_end_behavior: typing.Optional[builtins.str] = None,
            video_selector: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.VideoSelectorProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Information about extracting content from the input and about handling the content.

            The parent of this entity is InputAttachment.

            :param audio_selectors: Information about the specific audio to extract from the input. The parent of this entity is InputSettings.
            :param caption_selectors: Information about the specific captions to extract from the input.
            :param deblock_filter: Enables or disables the deblock filter when filtering.
            :param denoise_filter: Enables or disables the denoise filter when filtering.
            :param filter_strength: Adjusts the magnitude of filtering from 1 (minimal) to 5 (strongest).
            :param input_filter: Turns on the filter for this input. MPEG-2 inputs have the deblocking filter enabled by default. 1) auto - filtering is applied depending on input type/quality 2) disabled - no filtering is applied to the input 3) forced - filtering is applied regardless of the input type.
            :param network_input_settings: Information about how to connect to the upstream system.
            :param scte35_pid: 
            :param smpte2038_data_preference: Specifies whether to extract applicable ancillary data from a SMPTE-2038 source in this input. Applicable data types are captions, timecode, AFD, and SCTE-104 messages. - PREFER: Extract from SMPTE-2038 if present in this input, otherwise extract from another source (if any). - IGNORE: Never extract any ancillary data from SMPTE-2038.
            :param source_end_behavior: The loop input if it is a file.
            :param video_selector: Information about one video to extract from the input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                input_settings_property = medialive.CfnChannel.InputSettingsProperty(
                    audio_selectors=[medialive.CfnChannel.AudioSelectorProperty(
                        name="name",
                        selector_settings=medialive.CfnChannel.AudioSelectorSettingsProperty(
                            audio_hls_rendition_selection=medialive.CfnChannel.AudioHlsRenditionSelectionProperty(
                                group_id="groupId",
                                name="name"
                            ),
                            audio_language_selection=medialive.CfnChannel.AudioLanguageSelectionProperty(
                                language_code="languageCode",
                                language_selection_policy="languageSelectionPolicy"
                            ),
                            audio_pid_selection=medialive.CfnChannel.AudioPidSelectionProperty(
                                pid=123
                            ),
                            audio_track_selection=medialive.CfnChannel.AudioTrackSelectionProperty(
                                dolby_eDecode=medialive.CfnChannel.AudioDolbyEDecodeProperty(
                                    program_selection="programSelection"
                                ),
                                tracks=[medialive.CfnChannel.AudioTrackProperty(
                                    track=123
                                )]
                            )
                        )
                    )],
                    caption_selectors=[medialive.CfnChannel.CaptionSelectorProperty(
                        language_code="languageCode",
                        name="name",
                        selector_settings=medialive.CfnChannel.CaptionSelectorSettingsProperty(
                            ancillary_source_settings=medialive.CfnChannel.AncillarySourceSettingsProperty(
                                source_ancillary_channel_number=123
                            ),
                            arib_source_settings=medialive.CfnChannel.AribSourceSettingsProperty(),
                            dvb_sub_source_settings=medialive.CfnChannel.DvbSubSourceSettingsProperty(
                                ocr_language="ocrLanguage",
                                pid=123
                            ),
                            embedded_source_settings=medialive.CfnChannel.EmbeddedSourceSettingsProperty(
                                convert608_to708="convert608To708",
                                scte20_detection="scte20Detection",
                                source608_channel_number=123,
                                source608_track_number=123
                            ),
                            scte20_source_settings=medialive.CfnChannel.Scte20SourceSettingsProperty(
                                convert608_to708="convert608To708",
                                source608_channel_number=123
                            ),
                            scte27_source_settings=medialive.CfnChannel.Scte27SourceSettingsProperty(
                                ocr_language="ocrLanguage",
                                pid=123
                            ),
                            teletext_source_settings=medialive.CfnChannel.TeletextSourceSettingsProperty(
                                output_rectangle=medialive.CfnChannel.CaptionRectangleProperty(
                                    height=123,
                                    left_offset=123,
                                    top_offset=123,
                                    width=123
                                ),
                                page_number="pageNumber"
                            )
                        )
                    )],
                    deblock_filter="deblockFilter",
                    denoise_filter="denoiseFilter",
                    filter_strength=123,
                    input_filter="inputFilter",
                    network_input_settings=medialive.CfnChannel.NetworkInputSettingsProperty(
                        hls_input_settings=medialive.CfnChannel.HlsInputSettingsProperty(
                            bandwidth=123,
                            buffer_segments=123,
                            retries=123,
                            retry_interval=123,
                            scte35_source="scte35Source"
                        ),
                        server_validation="serverValidation"
                    ),
                    scte35_pid=123,
                    smpte2038_data_preference="smpte2038DataPreference",
                    source_end_behavior="sourceEndBehavior",
                    video_selector=medialive.CfnChannel.VideoSelectorProperty(
                        color_space="colorSpace",
                        color_space_settings=medialive.CfnChannel.VideoSelectorColorSpaceSettingsProperty(
                            hdr10_settings=medialive.CfnChannel.Hdr10SettingsProperty(
                                max_cll=123,
                                max_fall=123
                            )
                        ),
                        color_space_usage="colorSpaceUsage",
                        selector_settings=medialive.CfnChannel.VideoSelectorSettingsProperty(
                            video_selector_pid=medialive.CfnChannel.VideoSelectorPidProperty(
                                pid=123
                            ),
                            video_selector_program_id=medialive.CfnChannel.VideoSelectorProgramIdProperty(
                                program_id=123
                            )
                        )
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__e4e704895a50cddd2fe645a859b2440ce76487eb13f44677cb7661f33de1a979)
                check_type(argname="argument audio_selectors", value=audio_selectors, expected_type=type_hints["audio_selectors"])
                check_type(argname="argument caption_selectors", value=caption_selectors, expected_type=type_hints["caption_selectors"])
                check_type(argname="argument deblock_filter", value=deblock_filter, expected_type=type_hints["deblock_filter"])
                check_type(argname="argument denoise_filter", value=denoise_filter, expected_type=type_hints["denoise_filter"])
                check_type(argname="argument filter_strength", value=filter_strength, expected_type=type_hints["filter_strength"])
                check_type(argname="argument input_filter", value=input_filter, expected_type=type_hints["input_filter"])
                check_type(argname="argument network_input_settings", value=network_input_settings, expected_type=type_hints["network_input_settings"])
                check_type(argname="argument scte35_pid", value=scte35_pid, expected_type=type_hints["scte35_pid"])
                check_type(argname="argument smpte2038_data_preference", value=smpte2038_data_preference, expected_type=type_hints["smpte2038_data_preference"])
                check_type(argname="argument source_end_behavior", value=source_end_behavior, expected_type=type_hints["source_end_behavior"])
                check_type(argname="argument video_selector", value=video_selector, expected_type=type_hints["video_selector"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if audio_selectors is not None:
                self._values["audio_selectors"] = audio_selectors
            if caption_selectors is not None:
                self._values["caption_selectors"] = caption_selectors
            if deblock_filter is not None:
                self._values["deblock_filter"] = deblock_filter
            if denoise_filter is not None:
                self._values["denoise_filter"] = denoise_filter
            if filter_strength is not None:
                self._values["filter_strength"] = filter_strength
            if input_filter is not None:
                self._values["input_filter"] = input_filter
            if network_input_settings is not None:
                self._values["network_input_settings"] = network_input_settings
            if scte35_pid is not None:
                self._values["scte35_pid"] = scte35_pid
            if smpte2038_data_preference is not None:
                self._values["smpte2038_data_preference"] = smpte2038_data_preference
            if source_end_behavior is not None:
                self._values["source_end_behavior"] = source_end_behavior
            if video_selector is not None:
                self._values["video_selector"] = video_selector

        @builtins.property
        def audio_selectors(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioSelectorProperty"]]]]:
            '''Information about the specific audio to extract from the input.

            The parent of this entity is InputSettings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-audioselectors
            '''
            result = self._values.get("audio_selectors")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioSelectorProperty"]]]], result)

        @builtins.property
        def caption_selectors(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.CaptionSelectorProperty"]]]]:
            '''Information about the specific captions to extract from the input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-captionselectors
            '''
            result = self._values.get("caption_selectors")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.CaptionSelectorProperty"]]]], result)

        @builtins.property
        def deblock_filter(self) -> typing.Optional[builtins.str]:
            '''Enables or disables the deblock filter when filtering.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-deblockfilter
            '''
            result = self._values.get("deblock_filter")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def denoise_filter(self) -> typing.Optional[builtins.str]:
            '''Enables or disables the denoise filter when filtering.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-denoisefilter
            '''
            result = self._values.get("denoise_filter")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def filter_strength(self) -> typing.Optional[jsii.Number]:
            '''Adjusts the magnitude of filtering from 1 (minimal) to 5 (strongest).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-filterstrength
            '''
            result = self._values.get("filter_strength")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def input_filter(self) -> typing.Optional[builtins.str]:
            '''Turns on the filter for this input.

            MPEG-2 inputs have the deblocking filter enabled by default. 1) auto - filtering is applied depending on input type/quality 2) disabled - no filtering is applied to the input 3) forced - filtering is applied regardless of the input type.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-inputfilter
            '''
            result = self._values.get("input_filter")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def network_input_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.NetworkInputSettingsProperty"]]:
            '''Information about how to connect to the upstream system.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-networkinputsettings
            '''
            result = self._values.get("network_input_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.NetworkInputSettingsProperty"]], result)

        @builtins.property
        def scte35_pid(self) -> typing.Optional[jsii.Number]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-scte35pid
            '''
            result = self._values.get("scte35_pid")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def smpte2038_data_preference(self) -> typing.Optional[builtins.str]:
            '''Specifies whether to extract applicable ancillary data from a SMPTE-2038 source in this input.

            Applicable data types are captions, timecode, AFD, and SCTE-104 messages.

            - PREFER: Extract from SMPTE-2038 if present in this input, otherwise extract from another source (if any).
            - IGNORE: Never extract any ancillary data from SMPTE-2038.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-smpte2038datapreference
            '''
            result = self._values.get("smpte2038_data_preference")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def source_end_behavior(self) -> typing.Optional[builtins.str]:
            '''The loop input if it is a file.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-sourceendbehavior
            '''
            result = self._values.get("source_end_behavior")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def video_selector(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.VideoSelectorProperty"]]:
            '''Information about one video to extract from the input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputsettings.html#cfn-medialive-channel-inputsettings-videoselector
            '''
            result = self._values.get("video_selector")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.VideoSelectorProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InputSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.InputSpecificationProperty",
        jsii_struct_bases=[],
        name_mapping={
            "codec": "codec",
            "maximum_bitrate": "maximumBitrate",
            "resolution": "resolution",
        },
    )
    class InputSpecificationProperty:
        def __init__(
            self,
            *,
            codec: typing.Optional[builtins.str] = None,
            maximum_bitrate: typing.Optional[builtins.str] = None,
            resolution: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The input specification for this channel.

            It specifies the key characteristics of the inputs for this channel: the maximum bitrate, the resolution, and the codec.

            This entity is at the top level in the channel.

            :param codec: The codec to include in the input specification for this channel.
            :param maximum_bitrate: The maximum input bitrate for any input attached to this channel.
            :param resolution: The resolution for any input attached to this channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputspecification.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                input_specification_property = medialive.CfnChannel.InputSpecificationProperty(
                    codec="codec",
                    maximum_bitrate="maximumBitrate",
                    resolution="resolution"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__46b07830b4df395695edac3201ef71beeaa646842d22f7da9f21c0fea5513842)
                check_type(argname="argument codec", value=codec, expected_type=type_hints["codec"])
                check_type(argname="argument maximum_bitrate", value=maximum_bitrate, expected_type=type_hints["maximum_bitrate"])
                check_type(argname="argument resolution", value=resolution, expected_type=type_hints["resolution"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if codec is not None:
                self._values["codec"] = codec
            if maximum_bitrate is not None:
                self._values["maximum_bitrate"] = maximum_bitrate
            if resolution is not None:
                self._values["resolution"] = resolution

        @builtins.property
        def codec(self) -> typing.Optional[builtins.str]:
            '''The codec to include in the input specification for this channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputspecification.html#cfn-medialive-channel-inputspecification-codec
            '''
            result = self._values.get("codec")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def maximum_bitrate(self) -> typing.Optional[builtins.str]:
            '''The maximum input bitrate for any input attached to this channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputspecification.html#cfn-medialive-channel-inputspecification-maximumbitrate
            '''
            result = self._values.get("maximum_bitrate")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def resolution(self) -> typing.Optional[builtins.str]:
            '''The resolution for any input attached to this channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-inputspecification.html#cfn-medialive-channel-inputspecification-resolution
            '''
            result = self._values.get("resolution")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InputSpecificationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.KeyProviderSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"static_key_settings": "staticKeySettings"},
    )
    class KeyProviderSettingsProperty:
        def __init__(
            self,
            *,
            static_key_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.StaticKeySettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The configuration of key provider settings.

            The parent of this entity is HlsGroupSettings.

            :param static_key_settings: The configuration of static key settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-keyprovidersettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                key_provider_settings_property = medialive.CfnChannel.KeyProviderSettingsProperty(
                    static_key_settings=medialive.CfnChannel.StaticKeySettingsProperty(
                        key_provider_server=medialive.CfnChannel.InputLocationProperty(
                            password_param="passwordParam",
                            uri="uri",
                            username="username"
                        ),
                        static_key_value="staticKeyValue"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__f17a7a3d9400285491546fe3aa2beed1785e9839486a1ca6a046d8ce275241ba)
                check_type(argname="argument static_key_settings", value=static_key_settings, expected_type=type_hints["static_key_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if static_key_settings is not None:
                self._values["static_key_settings"] = static_key_settings

        @builtins.property
        def static_key_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.StaticKeySettingsProperty"]]:
            '''The configuration of static key settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-keyprovidersettings.html#cfn-medialive-channel-keyprovidersettings-statickeysettings
            '''
            result = self._values.get("static_key_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.StaticKeySettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "KeyProviderSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.M2tsSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "absent_input_audio_behavior": "absentInputAudioBehavior",
            "arib": "arib",
            "arib_captions_pid": "aribCaptionsPid",
            "arib_captions_pid_control": "aribCaptionsPidControl",
            "audio_buffer_model": "audioBufferModel",
            "audio_frames_per_pes": "audioFramesPerPes",
            "audio_pids": "audioPids",
            "audio_stream_type": "audioStreamType",
            "bitrate": "bitrate",
            "buffer_model": "bufferModel",
            "cc_descriptor": "ccDescriptor",
            "dvb_nit_settings": "dvbNitSettings",
            "dvb_sdt_settings": "dvbSdtSettings",
            "dvb_sub_pids": "dvbSubPids",
            "dvb_tdt_settings": "dvbTdtSettings",
            "dvb_teletext_pid": "dvbTeletextPid",
            "ebif": "ebif",
            "ebp_audio_interval": "ebpAudioInterval",
            "ebp_lookahead_ms": "ebpLookaheadMs",
            "ebp_placement": "ebpPlacement",
            "ecm_pid": "ecmPid",
            "es_rate_in_pes": "esRateInPes",
            "etv_platform_pid": "etvPlatformPid",
            "etv_signal_pid": "etvSignalPid",
            "fragment_time": "fragmentTime",
            "klv": "klv",
            "klv_data_pids": "klvDataPids",
            "nielsen_id3_behavior": "nielsenId3Behavior",
            "null_packet_bitrate": "nullPacketBitrate",
            "pat_interval": "patInterval",
            "pcr_control": "pcrControl",
            "pcr_period": "pcrPeriod",
            "pcr_pid": "pcrPid",
            "pmt_interval": "pmtInterval",
            "pmt_pid": "pmtPid",
            "program_num": "programNum",
            "rate_mode": "rateMode",
            "scte27_pids": "scte27Pids",
            "scte35_control": "scte35Control",
            "scte35_pid": "scte35Pid",
            "scte35_preroll_pullup_milliseconds": "scte35PrerollPullupMilliseconds",
            "segmentation_markers": "segmentationMarkers",
            "segmentation_style": "segmentationStyle",
            "segmentation_time": "segmentationTime",
            "timed_metadata_behavior": "timedMetadataBehavior",
            "timed_metadata_pid": "timedMetadataPid",
            "transport_stream_id": "transportStreamId",
            "video_pid": "videoPid",
        },
    )
    class M2tsSettingsProperty:
        def __init__(
            self,
            *,
            absent_input_audio_behavior: typing.Optional[builtins.str] = None,
            arib: typing.Optional[builtins.str] = None,
            arib_captions_pid: typing.Optional[builtins.str] = None,
            arib_captions_pid_control: typing.Optional[builtins.str] = None,
            audio_buffer_model: typing.Optional[builtins.str] = None,
            audio_frames_per_pes: typing.Optional[jsii.Number] = None,
            audio_pids: typing.Optional[builtins.str] = None,
            audio_stream_type: typing.Optional[builtins.str] = None,
            bitrate: typing.Optional[jsii.Number] = None,
            buffer_model: typing.Optional[builtins.str] = None,
            cc_descriptor: typing.Optional[builtins.str] = None,
            dvb_nit_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.DvbNitSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            dvb_sdt_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.DvbSdtSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            dvb_sub_pids: typing.Optional[builtins.str] = None,
            dvb_tdt_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.DvbTdtSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            dvb_teletext_pid: typing.Optional[builtins.str] = None,
            ebif: typing.Optional[builtins.str] = None,
            ebp_audio_interval: typing.Optional[builtins.str] = None,
            ebp_lookahead_ms: typing.Optional[jsii.Number] = None,
            ebp_placement: typing.Optional[builtins.str] = None,
            ecm_pid: typing.Optional[builtins.str] = None,
            es_rate_in_pes: typing.Optional[builtins.str] = None,
            etv_platform_pid: typing.Optional[builtins.str] = None,
            etv_signal_pid: typing.Optional[builtins.str] = None,
            fragment_time: typing.Optional[jsii.Number] = None,
            klv: typing.Optional[builtins.str] = None,
            klv_data_pids: typing.Optional[builtins.str] = None,
            nielsen_id3_behavior: typing.Optional[builtins.str] = None,
            null_packet_bitrate: typing.Optional[jsii.Number] = None,
            pat_interval: typing.Optional[jsii.Number] = None,
            pcr_control: typing.Optional[builtins.str] = None,
            pcr_period: typing.Optional[jsii.Number] = None,
            pcr_pid: typing.Optional[builtins.str] = None,
            pmt_interval: typing.Optional[jsii.Number] = None,
            pmt_pid: typing.Optional[builtins.str] = None,
            program_num: typing.Optional[jsii.Number] = None,
            rate_mode: typing.Optional[builtins.str] = None,
            scte27_pids: typing.Optional[builtins.str] = None,
            scte35_control: typing.Optional[builtins.str] = None,
            scte35_pid: typing.Optional[builtins.str] = None,
            scte35_preroll_pullup_milliseconds: typing.Optional[jsii.Number] = None,
            segmentation_markers: typing.Optional[builtins.str] = None,
            segmentation_style: typing.Optional[builtins.str] = None,
            segmentation_time: typing.Optional[jsii.Number] = None,
            timed_metadata_behavior: typing.Optional[builtins.str] = None,
            timed_metadata_pid: typing.Optional[builtins.str] = None,
            transport_stream_id: typing.Optional[jsii.Number] = None,
            video_pid: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The configuration of the M2TS in the output.

            The parents of this entity are ArchiveContainerSettings and UdpContainerSettings.

            :param absent_input_audio_behavior: When set to drop, the output audio streams are removed from the program if the selected input audio stream is removed from the input. This allows the output audio configuration to dynamically change based on the input configuration. If this is set to encodeSilence, all output audio streams will output encoded silence when not connected to an active input stream.
            :param arib: When set to enabled, uses ARIB-compliant field muxing and removes video descriptor.
            :param arib_captions_pid: The PID for ARIB Captions in the transport stream. You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
            :param arib_captions_pid_control: If set to auto, The PID number used for ARIB Captions will be auto-selected from unused PIDs. If set to useConfigured, ARIB captions will be on the configured PID number.
            :param audio_buffer_model: When set to dvb, uses the DVB buffer model for Dolby Digital audio. When set to atsc, the ATSC model is used.
            :param audio_frames_per_pes: The number of audio frames to insert for each PES packet.
            :param audio_pids: The PID of the elementary audio streams in the transport stream. Multiple values are accepted, and can be entered in ranges or by comma separation. You can enter the value as a decimal or hexadecimal value. Each PID specified must be in the range of 32 (or 0x20)..8182 (or 0x1ff6).
            :param audio_stream_type: When set to atsc, uses stream type = 0x81 for AC3 and stream type = 0x87 for EAC3. When set to dvb, uses stream type = 0x06.
            :param bitrate: The output bitrate of the transport stream in bits per second. Setting to 0 lets the muxer automatically determine the appropriate bitrate.
            :param buffer_model: If set to multiplex, uses the multiplex buffer model for accurate interleaving. Setting to bufferModel to none can lead to lower latency, but low-memory devices might not be able to play back the stream without interruptions.
            :param cc_descriptor: When set to enabled, generates captionServiceDescriptor in PMT.
            :param dvb_nit_settings: Inserts a DVB Network Information Table (NIT) at the specified table repetition interval.
            :param dvb_sdt_settings: Inserts a DVB Service Description Table (SDT) at the specified table repetition interval.
            :param dvb_sub_pids: The PID for the input source DVB Subtitle data to this output. Multiple values are accepted, and can be entered in ranges and/or by comma separation. You can enter the value as a decimal or hexadecimal value. Each PID specified must be in the range of 32 (or 0x20)..8182 (or 0x1ff6).
            :param dvb_tdt_settings: Inserts DVB Time and Date Table (TDT) at the specified table repetition interval.
            :param dvb_teletext_pid: The PID for the input source DVB Teletext data to this output. You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
            :param ebif: If set to passthrough, passes any EBIF data from the input source to this output.
            :param ebp_audio_interval: When videoAndFixedIntervals is selected, audio EBP markers are added to partitions 3 and 4. The interval between these additional markers is fixed, and is slightly shorter than the video EBP marker interval. This is only available when EBP Cablelabs segmentation markers are selected. Partitions 1 and 2 always follow the video interval.
            :param ebp_lookahead_ms: When set, enforces that Encoder Boundary Points do not come within the specified time interval of each other by looking ahead at input video. If another EBP is going to come in within the specified time interval, the current EBP is not emitted, and the segment is "stretched" to the next marker. The lookahead value does not add latency to the system. The channel must be configured elsewhere to create sufficient latency to make the lookahead accurate.
            :param ebp_placement: Controls placement of EBP on audio PIDs. If set to videoAndAudioPids, EBP markers are placed on the video PID and all audio PIDs. If set to videoPid, EBP markers are placed on only the video PID.
            :param ecm_pid: This field is unused and deprecated.
            :param es_rate_in_pes: Includes or excludes the ES Rate field in the PES header.
            :param etv_platform_pid: The PID for the input source ETV Platform data to this output. You can enter it as a decimal or hexadecimal value. Valid values are 32 (or 0x20) to 8182 (or 0x1ff6).
            :param etv_signal_pid: The PID for input source ETV Signal data to this output. You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
            :param fragment_time: The length in seconds of each fragment. This is used only with EBP markers.
            :param klv: If set to passthrough, passes any KLV data from the input source to this output.
            :param klv_data_pids: The PID for the input source KLV data to this output. Multiple values are accepted, and can be entered in ranges or by comma separation. You can enter the value as a decimal or hexadecimal value. Each PID specified must be in the range of 32 (or 0x20)..8182 (or 0x1ff6).
            :param nielsen_id3_behavior: If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.
            :param null_packet_bitrate: The value, in bits per second, of extra null packets to insert into the transport stream. This can be used if a downstream encryption system requires periodic null packets.
            :param pat_interval: The number of milliseconds between instances of this table in the output transport stream. Valid values are 0, 10..1000.
            :param pcr_control: When set to pcrEveryPesPacket, a Program Clock Reference value is inserted for every Packetized Elementary Stream (PES) header. This parameter is effective only when the PCR PID is the same as the video or audio elementary stream.
            :param pcr_period: The maximum time, in milliseconds, between Program Clock References (PCRs) inserted into the transport stream.
            :param pcr_pid: The PID of the Program Clock Reference (PCR) in the transport stream. When no value is given, MediaLive assigns the same value as the video PID. You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
            :param pmt_interval: The number of milliseconds between instances of this table in the output transport stream. Valid values are 0, 10..1000.
            :param pmt_pid: The PID for the Program Map Table (PMT) in the transport stream. You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
            :param program_num: The value of the program number field in the Program Map Table (PMT).
            :param rate_mode: When VBR, does not insert null packets into the transport stream to fill the specified bitrate. The bitrate setting acts as the maximum bitrate when VBR is set.
            :param scte27_pids: The PID for the input source SCTE-27 data to this output. Multiple values are accepted, and can be entered in ranges or by comma separation. You can enter the value as a decimal or hexadecimal value. Each PID specified must be in the range of 32 (or 0x20)..8182 (or 0x1ff6).
            :param scte35_control: Optionally passes SCTE-35 signals from the input source to this output.
            :param scte35_pid: The PID of the SCTE-35 stream in the transport stream. You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
            :param scte35_preroll_pullup_milliseconds: 
            :param segmentation_markers: Inserts segmentation markers at each segmentationTime period. raiSegstart sets the Random Access Indicator bit in the adaptation field. raiAdapt sets the RAI bit and adds the current timecode in the private data bytes. psiSegstart inserts PAT and PMT tables at the start of segments. ebp adds Encoder Boundary Point information to the adaptation field as per OpenCable specification OC-SP-EBP-I01-130118. ebpLegacy adds Encoder Boundary Point information to the adaptation field using a legacy proprietary format.
            :param segmentation_style: The segmentation style parameter controls how segmentation markers are inserted into the transport stream. With avails, it is possible that segments might be truncated, which can influence where future segmentation markers are inserted. When a segmentation style of resetCadence is selected and a segment is truncated due to an avail, we will reset the segmentation cadence. This means the subsequent segment will have a duration of $segmentationTime seconds. When a segmentation style of maintainCadence is selected and a segment is truncated due to an avail, we will not reset the segmentation cadence. This means the subsequent segment will likely be truncated as well. However, all segments after that will have a duration of $segmentationTime seconds. Note that EBP lookahead is a slight exception to this rule.
            :param segmentation_time: The length, in seconds, of each segment. This is required unless markers is set to None_.
            :param timed_metadata_behavior: When set to passthrough, timed metadata is passed through from input to output.
            :param timed_metadata_pid: The PID of the timed metadata stream in the transport stream. You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
            :param transport_stream_id: The value of the transport stream ID field in the Program Map Table (PMT).
            :param video_pid: The PID of the elementary video stream in the transport stream. You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                m2ts_settings_property = medialive.CfnChannel.M2tsSettingsProperty(
                    absent_input_audio_behavior="absentInputAudioBehavior",
                    arib="arib",
                    arib_captions_pid="aribCaptionsPid",
                    arib_captions_pid_control="aribCaptionsPidControl",
                    audio_buffer_model="audioBufferModel",
                    audio_frames_per_pes=123,
                    audio_pids="audioPids",
                    audio_stream_type="audioStreamType",
                    bitrate=123,
                    buffer_model="bufferModel",
                    cc_descriptor="ccDescriptor",
                    dvb_nit_settings=medialive.CfnChannel.DvbNitSettingsProperty(
                        network_id=123,
                        network_name="networkName",
                        rep_interval=123
                    ),
                    dvb_sdt_settings=medialive.CfnChannel.DvbSdtSettingsProperty(
                        output_sdt="outputSdt",
                        rep_interval=123,
                        service_name="serviceName",
                        service_provider_name="serviceProviderName"
                    ),
                    dvb_sub_pids="dvbSubPids",
                    dvb_tdt_settings=medialive.CfnChannel.DvbTdtSettingsProperty(
                        rep_interval=123
                    ),
                    dvb_teletext_pid="dvbTeletextPid",
                    ebif="ebif",
                    ebp_audio_interval="ebpAudioInterval",
                    ebp_lookahead_ms=123,
                    ebp_placement="ebpPlacement",
                    ecm_pid="ecmPid",
                    es_rate_in_pes="esRateInPes",
                    etv_platform_pid="etvPlatformPid",
                    etv_signal_pid="etvSignalPid",
                    fragment_time=123,
                    klv="klv",
                    klv_data_pids="klvDataPids",
                    nielsen_id3_behavior="nielsenId3Behavior",
                    null_packet_bitrate=123,
                    pat_interval=123,
                    pcr_control="pcrControl",
                    pcr_period=123,
                    pcr_pid="pcrPid",
                    pmt_interval=123,
                    pmt_pid="pmtPid",
                    program_num=123,
                    rate_mode="rateMode",
                    scte27_pids="scte27Pids",
                    scte35_control="scte35Control",
                    scte35_pid="scte35Pid",
                    scte35_preroll_pullup_milliseconds=123,
                    segmentation_markers="segmentationMarkers",
                    segmentation_style="segmentationStyle",
                    segmentation_time=123,
                    timed_metadata_behavior="timedMetadataBehavior",
                    timed_metadata_pid="timedMetadataPid",
                    transport_stream_id=123,
                    video_pid="videoPid"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__617eef143db398943797d56777c8be418acc28e5691fe00e2c35c23e1fa83760)
                check_type(argname="argument absent_input_audio_behavior", value=absent_input_audio_behavior, expected_type=type_hints["absent_input_audio_behavior"])
                check_type(argname="argument arib", value=arib, expected_type=type_hints["arib"])
                check_type(argname="argument arib_captions_pid", value=arib_captions_pid, expected_type=type_hints["arib_captions_pid"])
                check_type(argname="argument arib_captions_pid_control", value=arib_captions_pid_control, expected_type=type_hints["arib_captions_pid_control"])
                check_type(argname="argument audio_buffer_model", value=audio_buffer_model, expected_type=type_hints["audio_buffer_model"])
                check_type(argname="argument audio_frames_per_pes", value=audio_frames_per_pes, expected_type=type_hints["audio_frames_per_pes"])
                check_type(argname="argument audio_pids", value=audio_pids, expected_type=type_hints["audio_pids"])
                check_type(argname="argument audio_stream_type", value=audio_stream_type, expected_type=type_hints["audio_stream_type"])
                check_type(argname="argument bitrate", value=bitrate, expected_type=type_hints["bitrate"])
                check_type(argname="argument buffer_model", value=buffer_model, expected_type=type_hints["buffer_model"])
                check_type(argname="argument cc_descriptor", value=cc_descriptor, expected_type=type_hints["cc_descriptor"])
                check_type(argname="argument dvb_nit_settings", value=dvb_nit_settings, expected_type=type_hints["dvb_nit_settings"])
                check_type(argname="argument dvb_sdt_settings", value=dvb_sdt_settings, expected_type=type_hints["dvb_sdt_settings"])
                check_type(argname="argument dvb_sub_pids", value=dvb_sub_pids, expected_type=type_hints["dvb_sub_pids"])
                check_type(argname="argument dvb_tdt_settings", value=dvb_tdt_settings, expected_type=type_hints["dvb_tdt_settings"])
                check_type(argname="argument dvb_teletext_pid", value=dvb_teletext_pid, expected_type=type_hints["dvb_teletext_pid"])
                check_type(argname="argument ebif", value=ebif, expected_type=type_hints["ebif"])
                check_type(argname="argument ebp_audio_interval", value=ebp_audio_interval, expected_type=type_hints["ebp_audio_interval"])
                check_type(argname="argument ebp_lookahead_ms", value=ebp_lookahead_ms, expected_type=type_hints["ebp_lookahead_ms"])
                check_type(argname="argument ebp_placement", value=ebp_placement, expected_type=type_hints["ebp_placement"])
                check_type(argname="argument ecm_pid", value=ecm_pid, expected_type=type_hints["ecm_pid"])
                check_type(argname="argument es_rate_in_pes", value=es_rate_in_pes, expected_type=type_hints["es_rate_in_pes"])
                check_type(argname="argument etv_platform_pid", value=etv_platform_pid, expected_type=type_hints["etv_platform_pid"])
                check_type(argname="argument etv_signal_pid", value=etv_signal_pid, expected_type=type_hints["etv_signal_pid"])
                check_type(argname="argument fragment_time", value=fragment_time, expected_type=type_hints["fragment_time"])
                check_type(argname="argument klv", value=klv, expected_type=type_hints["klv"])
                check_type(argname="argument klv_data_pids", value=klv_data_pids, expected_type=type_hints["klv_data_pids"])
                check_type(argname="argument nielsen_id3_behavior", value=nielsen_id3_behavior, expected_type=type_hints["nielsen_id3_behavior"])
                check_type(argname="argument null_packet_bitrate", value=null_packet_bitrate, expected_type=type_hints["null_packet_bitrate"])
                check_type(argname="argument pat_interval", value=pat_interval, expected_type=type_hints["pat_interval"])
                check_type(argname="argument pcr_control", value=pcr_control, expected_type=type_hints["pcr_control"])
                check_type(argname="argument pcr_period", value=pcr_period, expected_type=type_hints["pcr_period"])
                check_type(argname="argument pcr_pid", value=pcr_pid, expected_type=type_hints["pcr_pid"])
                check_type(argname="argument pmt_interval", value=pmt_interval, expected_type=type_hints["pmt_interval"])
                check_type(argname="argument pmt_pid", value=pmt_pid, expected_type=type_hints["pmt_pid"])
                check_type(argname="argument program_num", value=program_num, expected_type=type_hints["program_num"])
                check_type(argname="argument rate_mode", value=rate_mode, expected_type=type_hints["rate_mode"])
                check_type(argname="argument scte27_pids", value=scte27_pids, expected_type=type_hints["scte27_pids"])
                check_type(argname="argument scte35_control", value=scte35_control, expected_type=type_hints["scte35_control"])
                check_type(argname="argument scte35_pid", value=scte35_pid, expected_type=type_hints["scte35_pid"])
                check_type(argname="argument scte35_preroll_pullup_milliseconds", value=scte35_preroll_pullup_milliseconds, expected_type=type_hints["scte35_preroll_pullup_milliseconds"])
                check_type(argname="argument segmentation_markers", value=segmentation_markers, expected_type=type_hints["segmentation_markers"])
                check_type(argname="argument segmentation_style", value=segmentation_style, expected_type=type_hints["segmentation_style"])
                check_type(argname="argument segmentation_time", value=segmentation_time, expected_type=type_hints["segmentation_time"])
                check_type(argname="argument timed_metadata_behavior", value=timed_metadata_behavior, expected_type=type_hints["timed_metadata_behavior"])
                check_type(argname="argument timed_metadata_pid", value=timed_metadata_pid, expected_type=type_hints["timed_metadata_pid"])
                check_type(argname="argument transport_stream_id", value=transport_stream_id, expected_type=type_hints["transport_stream_id"])
                check_type(argname="argument video_pid", value=video_pid, expected_type=type_hints["video_pid"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if absent_input_audio_behavior is not None:
                self._values["absent_input_audio_behavior"] = absent_input_audio_behavior
            if arib is not None:
                self._values["arib"] = arib
            if arib_captions_pid is not None:
                self._values["arib_captions_pid"] = arib_captions_pid
            if arib_captions_pid_control is not None:
                self._values["arib_captions_pid_control"] = arib_captions_pid_control
            if audio_buffer_model is not None:
                self._values["audio_buffer_model"] = audio_buffer_model
            if audio_frames_per_pes is not None:
                self._values["audio_frames_per_pes"] = audio_frames_per_pes
            if audio_pids is not None:
                self._values["audio_pids"] = audio_pids
            if audio_stream_type is not None:
                self._values["audio_stream_type"] = audio_stream_type
            if bitrate is not None:
                self._values["bitrate"] = bitrate
            if buffer_model is not None:
                self._values["buffer_model"] = buffer_model
            if cc_descriptor is not None:
                self._values["cc_descriptor"] = cc_descriptor
            if dvb_nit_settings is not None:
                self._values["dvb_nit_settings"] = dvb_nit_settings
            if dvb_sdt_settings is not None:
                self._values["dvb_sdt_settings"] = dvb_sdt_settings
            if dvb_sub_pids is not None:
                self._values["dvb_sub_pids"] = dvb_sub_pids
            if dvb_tdt_settings is not None:
                self._values["dvb_tdt_settings"] = dvb_tdt_settings
            if dvb_teletext_pid is not None:
                self._values["dvb_teletext_pid"] = dvb_teletext_pid
            if ebif is not None:
                self._values["ebif"] = ebif
            if ebp_audio_interval is not None:
                self._values["ebp_audio_interval"] = ebp_audio_interval
            if ebp_lookahead_ms is not None:
                self._values["ebp_lookahead_ms"] = ebp_lookahead_ms
            if ebp_placement is not None:
                self._values["ebp_placement"] = ebp_placement
            if ecm_pid is not None:
                self._values["ecm_pid"] = ecm_pid
            if es_rate_in_pes is not None:
                self._values["es_rate_in_pes"] = es_rate_in_pes
            if etv_platform_pid is not None:
                self._values["etv_platform_pid"] = etv_platform_pid
            if etv_signal_pid is not None:
                self._values["etv_signal_pid"] = etv_signal_pid
            if fragment_time is not None:
                self._values["fragment_time"] = fragment_time
            if klv is not None:
                self._values["klv"] = klv
            if klv_data_pids is not None:
                self._values["klv_data_pids"] = klv_data_pids
            if nielsen_id3_behavior is not None:
                self._values["nielsen_id3_behavior"] = nielsen_id3_behavior
            if null_packet_bitrate is not None:
                self._values["null_packet_bitrate"] = null_packet_bitrate
            if pat_interval is not None:
                self._values["pat_interval"] = pat_interval
            if pcr_control is not None:
                self._values["pcr_control"] = pcr_control
            if pcr_period is not None:
                self._values["pcr_period"] = pcr_period
            if pcr_pid is not None:
                self._values["pcr_pid"] = pcr_pid
            if pmt_interval is not None:
                self._values["pmt_interval"] = pmt_interval
            if pmt_pid is not None:
                self._values["pmt_pid"] = pmt_pid
            if program_num is not None:
                self._values["program_num"] = program_num
            if rate_mode is not None:
                self._values["rate_mode"] = rate_mode
            if scte27_pids is not None:
                self._values["scte27_pids"] = scte27_pids
            if scte35_control is not None:
                self._values["scte35_control"] = scte35_control
            if scte35_pid is not None:
                self._values["scte35_pid"] = scte35_pid
            if scte35_preroll_pullup_milliseconds is not None:
                self._values["scte35_preroll_pullup_milliseconds"] = scte35_preroll_pullup_milliseconds
            if segmentation_markers is not None:
                self._values["segmentation_markers"] = segmentation_markers
            if segmentation_style is not None:
                self._values["segmentation_style"] = segmentation_style
            if segmentation_time is not None:
                self._values["segmentation_time"] = segmentation_time
            if timed_metadata_behavior is not None:
                self._values["timed_metadata_behavior"] = timed_metadata_behavior
            if timed_metadata_pid is not None:
                self._values["timed_metadata_pid"] = timed_metadata_pid
            if transport_stream_id is not None:
                self._values["transport_stream_id"] = transport_stream_id
            if video_pid is not None:
                self._values["video_pid"] = video_pid

        @builtins.property
        def absent_input_audio_behavior(self) -> typing.Optional[builtins.str]:
            '''When set to drop, the output audio streams are removed from the program if the selected input audio stream is removed from the input.

            This allows the output audio configuration to dynamically change based on the input configuration. If this is set to encodeSilence, all output audio streams will output encoded silence when not connected to an active input stream.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-absentinputaudiobehavior
            '''
            result = self._values.get("absent_input_audio_behavior")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def arib(self) -> typing.Optional[builtins.str]:
            '''When set to enabled, uses ARIB-compliant field muxing and removes video descriptor.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-arib
            '''
            result = self._values.get("arib")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def arib_captions_pid(self) -> typing.Optional[builtins.str]:
            '''The PID for ARIB Captions in the transport stream.

            You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-aribcaptionspid
            '''
            result = self._values.get("arib_captions_pid")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def arib_captions_pid_control(self) -> typing.Optional[builtins.str]:
            '''If set to auto, The PID number used for ARIB Captions will be auto-selected from unused PIDs.

            If set to useConfigured, ARIB captions will be on the configured PID number.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-aribcaptionspidcontrol
            '''
            result = self._values.get("arib_captions_pid_control")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def audio_buffer_model(self) -> typing.Optional[builtins.str]:
            '''When set to dvb, uses the DVB buffer model for Dolby Digital audio.

            When set to atsc, the ATSC model is used.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-audiobuffermodel
            '''
            result = self._values.get("audio_buffer_model")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def audio_frames_per_pes(self) -> typing.Optional[jsii.Number]:
            '''The number of audio frames to insert for each PES packet.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-audioframesperpes
            '''
            result = self._values.get("audio_frames_per_pes")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def audio_pids(self) -> typing.Optional[builtins.str]:
            '''The PID of the elementary audio streams in the transport stream.

            Multiple values are accepted, and can be entered in ranges or by comma separation. You can enter the value as a decimal or hexadecimal value. Each PID specified must be in the range of 32 (or 0x20)..8182 (or 0x1ff6).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-audiopids
            '''
            result = self._values.get("audio_pids")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def audio_stream_type(self) -> typing.Optional[builtins.str]:
            '''When set to atsc, uses stream type = 0x81 for AC3 and stream type = 0x87 for EAC3.

            When set to dvb, uses stream type = 0x06.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-audiostreamtype
            '''
            result = self._values.get("audio_stream_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def bitrate(self) -> typing.Optional[jsii.Number]:
            '''The output bitrate of the transport stream in bits per second.

            Setting to 0 lets the muxer automatically determine the appropriate bitrate.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-bitrate
            '''
            result = self._values.get("bitrate")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def buffer_model(self) -> typing.Optional[builtins.str]:
            '''If set to multiplex, uses the multiplex buffer model for accurate interleaving.

            Setting to bufferModel to none can lead to lower latency, but low-memory devices might not be able to play back the stream without interruptions.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-buffermodel
            '''
            result = self._values.get("buffer_model")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def cc_descriptor(self) -> typing.Optional[builtins.str]:
            '''When set to enabled, generates captionServiceDescriptor in PMT.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ccdescriptor
            '''
            result = self._values.get("cc_descriptor")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def dvb_nit_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.DvbNitSettingsProperty"]]:
            '''Inserts a DVB Network Information Table (NIT) at the specified table repetition interval.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-dvbnitsettings
            '''
            result = self._values.get("dvb_nit_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.DvbNitSettingsProperty"]], result)

        @builtins.property
        def dvb_sdt_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.DvbSdtSettingsProperty"]]:
            '''Inserts a DVB Service Description Table (SDT) at the specified table repetition interval.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-dvbsdtsettings
            '''
            result = self._values.get("dvb_sdt_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.DvbSdtSettingsProperty"]], result)

        @builtins.property
        def dvb_sub_pids(self) -> typing.Optional[builtins.str]:
            '''The PID for the input source DVB Subtitle data to this output.

            Multiple values are accepted, and can be entered in ranges and/or by comma separation. You can enter the value as a decimal or hexadecimal value. Each PID specified must be in the range of 32 (or 0x20)..8182 (or 0x1ff6).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-dvbsubpids
            '''
            result = self._values.get("dvb_sub_pids")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def dvb_tdt_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.DvbTdtSettingsProperty"]]:
            '''Inserts DVB Time and Date Table (TDT) at the specified table repetition interval.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-dvbtdtsettings
            '''
            result = self._values.get("dvb_tdt_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.DvbTdtSettingsProperty"]], result)

        @builtins.property
        def dvb_teletext_pid(self) -> typing.Optional[builtins.str]:
            '''The PID for the input source DVB Teletext data to this output.

            You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-dvbteletextpid
            '''
            result = self._values.get("dvb_teletext_pid")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def ebif(self) -> typing.Optional[builtins.str]:
            '''If set to passthrough, passes any EBIF data from the input source to this output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ebif
            '''
            result = self._values.get("ebif")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def ebp_audio_interval(self) -> typing.Optional[builtins.str]:
            '''When videoAndFixedIntervals is selected, audio EBP markers are added to partitions 3 and 4.

            The interval between these additional markers is fixed, and is slightly shorter than the video EBP marker interval. This is only available when EBP Cablelabs segmentation markers are selected. Partitions 1 and 2 always follow the video interval.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ebpaudiointerval
            '''
            result = self._values.get("ebp_audio_interval")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def ebp_lookahead_ms(self) -> typing.Optional[jsii.Number]:
            '''When set, enforces that Encoder Boundary Points do not come within the specified time interval of each other by looking ahead at input video.

            If another EBP is going to come in within the specified time interval, the current EBP is not emitted, and the segment is "stretched" to the next marker. The lookahead value does not add latency to the system. The channel must be configured elsewhere to create sufficient latency to make the lookahead accurate.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ebplookaheadms
            '''
            result = self._values.get("ebp_lookahead_ms")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def ebp_placement(self) -> typing.Optional[builtins.str]:
            '''Controls placement of EBP on audio PIDs.

            If set to videoAndAudioPids, EBP markers are placed on the video PID and all audio PIDs. If set to videoPid, EBP markers are placed on only the video PID.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ebpplacement
            '''
            result = self._values.get("ebp_placement")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def ecm_pid(self) -> typing.Optional[builtins.str]:
            '''This field is unused and deprecated.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ecmpid
            '''
            result = self._values.get("ecm_pid")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def es_rate_in_pes(self) -> typing.Optional[builtins.str]:
            '''Includes or excludes the ES Rate field in the PES header.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-esrateinpes
            '''
            result = self._values.get("es_rate_in_pes")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def etv_platform_pid(self) -> typing.Optional[builtins.str]:
            '''The PID for the input source ETV Platform data to this output.

            You can enter it as a decimal or hexadecimal value. Valid values are 32 (or 0x20) to 8182 (or 0x1ff6).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-etvplatformpid
            '''
            result = self._values.get("etv_platform_pid")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def etv_signal_pid(self) -> typing.Optional[builtins.str]:
            '''The PID for input source ETV Signal data to this output.

            You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-etvsignalpid
            '''
            result = self._values.get("etv_signal_pid")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def fragment_time(self) -> typing.Optional[jsii.Number]:
            '''The length in seconds of each fragment.

            This is used only with EBP markers.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-fragmenttime
            '''
            result = self._values.get("fragment_time")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def klv(self) -> typing.Optional[builtins.str]:
            '''If set to passthrough, passes any KLV data from the input source to this output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-klv
            '''
            result = self._values.get("klv")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def klv_data_pids(self) -> typing.Optional[builtins.str]:
            '''The PID for the input source KLV data to this output.

            Multiple values are accepted, and can be entered in ranges or by comma separation. You can enter the value as a decimal or hexadecimal value. Each PID specified must be in the range of 32 (or 0x20)..8182 (or 0x1ff6).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-klvdatapids
            '''
            result = self._values.get("klv_data_pids")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def nielsen_id3_behavior(self) -> typing.Optional[builtins.str]:
            '''If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-nielsenid3behavior
            '''
            result = self._values.get("nielsen_id3_behavior")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def null_packet_bitrate(self) -> typing.Optional[jsii.Number]:
            '''The value, in bits per second, of extra null packets to insert into the transport stream.

            This can be used if a downstream encryption system requires periodic null packets.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-nullpacketbitrate
            '''
            result = self._values.get("null_packet_bitrate")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def pat_interval(self) -> typing.Optional[jsii.Number]:
            '''The number of milliseconds between instances of this table in the output transport stream.

            Valid values are 0, 10..1000.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-patinterval
            '''
            result = self._values.get("pat_interval")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def pcr_control(self) -> typing.Optional[builtins.str]:
            '''When set to pcrEveryPesPacket, a Program Clock Reference value is inserted for every Packetized Elementary Stream (PES) header.

            This parameter is effective only when the PCR PID is the same as the video or audio elementary stream.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-pcrcontrol
            '''
            result = self._values.get("pcr_control")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def pcr_period(self) -> typing.Optional[jsii.Number]:
            '''The maximum time, in milliseconds, between Program Clock References (PCRs) inserted into the transport stream.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-pcrperiod
            '''
            result = self._values.get("pcr_period")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def pcr_pid(self) -> typing.Optional[builtins.str]:
            '''The PID of the Program Clock Reference (PCR) in the transport stream.

            When no value is given, MediaLive assigns the same value as the video PID. You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-pcrpid
            '''
            result = self._values.get("pcr_pid")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def pmt_interval(self) -> typing.Optional[jsii.Number]:
            '''The number of milliseconds between instances of this table in the output transport stream.

            Valid values are 0, 10..1000.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-pmtinterval
            '''
            result = self._values.get("pmt_interval")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def pmt_pid(self) -> typing.Optional[builtins.str]:
            '''The PID for the Program Map Table (PMT) in the transport stream.

            You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-pmtpid
            '''
            result = self._values.get("pmt_pid")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def program_num(self) -> typing.Optional[jsii.Number]:
            '''The value of the program number field in the Program Map Table (PMT).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-programnum
            '''
            result = self._values.get("program_num")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def rate_mode(self) -> typing.Optional[builtins.str]:
            '''When VBR, does not insert null packets into the transport stream to fill the specified bitrate.

            The bitrate setting acts as the maximum bitrate when VBR is set.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-ratemode
            '''
            result = self._values.get("rate_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def scte27_pids(self) -> typing.Optional[builtins.str]:
            '''The PID for the input source SCTE-27 data to this output.

            Multiple values are accepted, and can be entered in ranges or by comma separation. You can enter the value as a decimal or hexadecimal value. Each PID specified must be in the range of 32 (or 0x20)..8182 (or 0x1ff6).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-scte27pids
            '''
            result = self._values.get("scte27_pids")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def scte35_control(self) -> typing.Optional[builtins.str]:
            '''Optionally passes SCTE-35 signals from the input source to this output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-scte35control
            '''
            result = self._values.get("scte35_control")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def scte35_pid(self) -> typing.Optional[builtins.str]:
            '''The PID of the SCTE-35 stream in the transport stream.

            You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-scte35pid
            '''
            result = self._values.get("scte35_pid")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def scte35_preroll_pullup_milliseconds(self) -> typing.Optional[jsii.Number]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-scte35prerollpullupmilliseconds
            '''
            result = self._values.get("scte35_preroll_pullup_milliseconds")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def segmentation_markers(self) -> typing.Optional[builtins.str]:
            '''Inserts segmentation markers at each segmentationTime period.

            raiSegstart sets the Random Access Indicator bit in the adaptation field. raiAdapt sets the RAI bit and adds the current timecode in the private data bytes. psiSegstart inserts PAT and PMT tables at the start of segments. ebp adds Encoder Boundary Point information to the adaptation field as per OpenCable specification OC-SP-EBP-I01-130118. ebpLegacy adds Encoder Boundary Point information to the adaptation field using a legacy proprietary format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-segmentationmarkers
            '''
            result = self._values.get("segmentation_markers")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def segmentation_style(self) -> typing.Optional[builtins.str]:
            '''The segmentation style parameter controls how segmentation markers are inserted into the transport stream.

            With avails, it is possible that segments might be truncated, which can influence where future segmentation markers are inserted. When a segmentation style of resetCadence is selected and a segment is truncated due to an avail, we will reset the segmentation cadence. This means the subsequent segment will have a duration of $segmentationTime seconds. When a segmentation style of maintainCadence is selected and a segment is truncated due to an avail, we will not reset the segmentation cadence. This means the subsequent segment will likely be truncated as well. However, all segments after that will have a duration of $segmentationTime seconds. Note that EBP lookahead is a slight exception to this rule.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-segmentationstyle
            '''
            result = self._values.get("segmentation_style")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def segmentation_time(self) -> typing.Optional[jsii.Number]:
            '''The length, in seconds, of each segment.

            This is required unless markers is set to None_.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-segmentationtime
            '''
            result = self._values.get("segmentation_time")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def timed_metadata_behavior(self) -> typing.Optional[builtins.str]:
            '''When set to passthrough, timed metadata is passed through from input to output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-timedmetadatabehavior
            '''
            result = self._values.get("timed_metadata_behavior")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def timed_metadata_pid(self) -> typing.Optional[builtins.str]:
            '''The PID of the timed metadata stream in the transport stream.

            You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-timedmetadatapid
            '''
            result = self._values.get("timed_metadata_pid")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def transport_stream_id(self) -> typing.Optional[jsii.Number]:
            '''The value of the transport stream ID field in the Program Map Table (PMT).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-transportstreamid
            '''
            result = self._values.get("transport_stream_id")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def video_pid(self) -> typing.Optional[builtins.str]:
            '''The PID of the elementary video stream in the transport stream.

            You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m2tssettings.html#cfn-medialive-channel-m2tssettings-videopid
            '''
            result = self._values.get("video_pid")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "M2tsSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.M3u8SettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "audio_frames_per_pes": "audioFramesPerPes",
            "audio_pids": "audioPids",
            "ecm_pid": "ecmPid",
            "klv_behavior": "klvBehavior",
            "klv_data_pids": "klvDataPids",
            "nielsen_id3_behavior": "nielsenId3Behavior",
            "pat_interval": "patInterval",
            "pcr_control": "pcrControl",
            "pcr_period": "pcrPeriod",
            "pcr_pid": "pcrPid",
            "pmt_interval": "pmtInterval",
            "pmt_pid": "pmtPid",
            "program_num": "programNum",
            "scte35_behavior": "scte35Behavior",
            "scte35_pid": "scte35Pid",
            "timed_metadata_behavior": "timedMetadataBehavior",
            "timed_metadata_pid": "timedMetadataPid",
            "transport_stream_id": "transportStreamId",
            "video_pid": "videoPid",
        },
    )
    class M3u8SettingsProperty:
        def __init__(
            self,
            *,
            audio_frames_per_pes: typing.Optional[jsii.Number] = None,
            audio_pids: typing.Optional[builtins.str] = None,
            ecm_pid: typing.Optional[builtins.str] = None,
            klv_behavior: typing.Optional[builtins.str] = None,
            klv_data_pids: typing.Optional[builtins.str] = None,
            nielsen_id3_behavior: typing.Optional[builtins.str] = None,
            pat_interval: typing.Optional[jsii.Number] = None,
            pcr_control: typing.Optional[builtins.str] = None,
            pcr_period: typing.Optional[jsii.Number] = None,
            pcr_pid: typing.Optional[builtins.str] = None,
            pmt_interval: typing.Optional[jsii.Number] = None,
            pmt_pid: typing.Optional[builtins.str] = None,
            program_num: typing.Optional[jsii.Number] = None,
            scte35_behavior: typing.Optional[builtins.str] = None,
            scte35_pid: typing.Optional[builtins.str] = None,
            timed_metadata_behavior: typing.Optional[builtins.str] = None,
            timed_metadata_pid: typing.Optional[builtins.str] = None,
            transport_stream_id: typing.Optional[jsii.Number] = None,
            video_pid: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Settings for the M3U8 container.

            The parent of this entity is StandardHlsSettings.

            :param audio_frames_per_pes: The number of audio frames to insert for each PES packet.
            :param audio_pids: The PID of the elementary audio streams in the transport stream. Multiple values are accepted, and can be entered in ranges or by comma separation. You can enter the value as a decimal or hexadecimal value.
            :param ecm_pid: This parameter is unused and deprecated.
            :param klv_behavior: 
            :param klv_data_pids: 
            :param nielsen_id3_behavior: If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.
            :param pat_interval: The number of milliseconds between instances of this table in the output transport stream. A value of "0" writes out the PMT once per segment file.
            :param pcr_control: When set to pcrEveryPesPacket, a Program Clock Reference value is inserted for every Packetized Elementary Stream (PES) header. This parameter is effective only when the PCR PID is the same as the video or audio elementary stream.
            :param pcr_period: The maximum time, in milliseconds, between Program Clock References (PCRs) inserted into the transport stream.
            :param pcr_pid: The PID of the Program Clock Reference (PCR) in the transport stream. When no value is given, MediaLive assigns the same value as the video PID. You can enter the value as a decimal or hexadecimal value.
            :param pmt_interval: The number of milliseconds between instances of this table in the output transport stream. A value of "0" writes out the PMT once per segment file.
            :param pmt_pid: The PID for the Program Map Table (PMT) in the transport stream. You can enter the value as a decimal or hexadecimal value.
            :param program_num: The value of the program number field in the Program Map Table (PMT).
            :param scte35_behavior: If set to passthrough, passes any SCTE-35 signals from the input source to this output.
            :param scte35_pid: The PID of the SCTE-35 stream in the transport stream. You can enter the value as a decimal or hexadecimal value.
            :param timed_metadata_behavior: When set to passthrough, timed metadata is passed through from input to output.
            :param timed_metadata_pid: The PID of the timed metadata stream in the transport stream. You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
            :param transport_stream_id: The value of the transport stream ID field in the Program Map Table (PMT).
            :param video_pid: The PID of the elementary video stream in the transport stream. You can enter the value as a decimal or hexadecimal value.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                m3u8_settings_property = medialive.CfnChannel.M3u8SettingsProperty(
                    audio_frames_per_pes=123,
                    audio_pids="audioPids",
                    ecm_pid="ecmPid",
                    klv_behavior="klvBehavior",
                    klv_data_pids="klvDataPids",
                    nielsen_id3_behavior="nielsenId3Behavior",
                    pat_interval=123,
                    pcr_control="pcrControl",
                    pcr_period=123,
                    pcr_pid="pcrPid",
                    pmt_interval=123,
                    pmt_pid="pmtPid",
                    program_num=123,
                    scte35_behavior="scte35Behavior",
                    scte35_pid="scte35Pid",
                    timed_metadata_behavior="timedMetadataBehavior",
                    timed_metadata_pid="timedMetadataPid",
                    transport_stream_id=123,
                    video_pid="videoPid"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__e058ca2fc583fb54518891d4c018e3b61313d37edf2e5005c033088750a99e2b)
                check_type(argname="argument audio_frames_per_pes", value=audio_frames_per_pes, expected_type=type_hints["audio_frames_per_pes"])
                check_type(argname="argument audio_pids", value=audio_pids, expected_type=type_hints["audio_pids"])
                check_type(argname="argument ecm_pid", value=ecm_pid, expected_type=type_hints["ecm_pid"])
                check_type(argname="argument klv_behavior", value=klv_behavior, expected_type=type_hints["klv_behavior"])
                check_type(argname="argument klv_data_pids", value=klv_data_pids, expected_type=type_hints["klv_data_pids"])
                check_type(argname="argument nielsen_id3_behavior", value=nielsen_id3_behavior, expected_type=type_hints["nielsen_id3_behavior"])
                check_type(argname="argument pat_interval", value=pat_interval, expected_type=type_hints["pat_interval"])
                check_type(argname="argument pcr_control", value=pcr_control, expected_type=type_hints["pcr_control"])
                check_type(argname="argument pcr_period", value=pcr_period, expected_type=type_hints["pcr_period"])
                check_type(argname="argument pcr_pid", value=pcr_pid, expected_type=type_hints["pcr_pid"])
                check_type(argname="argument pmt_interval", value=pmt_interval, expected_type=type_hints["pmt_interval"])
                check_type(argname="argument pmt_pid", value=pmt_pid, expected_type=type_hints["pmt_pid"])
                check_type(argname="argument program_num", value=program_num, expected_type=type_hints["program_num"])
                check_type(argname="argument scte35_behavior", value=scte35_behavior, expected_type=type_hints["scte35_behavior"])
                check_type(argname="argument scte35_pid", value=scte35_pid, expected_type=type_hints["scte35_pid"])
                check_type(argname="argument timed_metadata_behavior", value=timed_metadata_behavior, expected_type=type_hints["timed_metadata_behavior"])
                check_type(argname="argument timed_metadata_pid", value=timed_metadata_pid, expected_type=type_hints["timed_metadata_pid"])
                check_type(argname="argument transport_stream_id", value=transport_stream_id, expected_type=type_hints["transport_stream_id"])
                check_type(argname="argument video_pid", value=video_pid, expected_type=type_hints["video_pid"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if audio_frames_per_pes is not None:
                self._values["audio_frames_per_pes"] = audio_frames_per_pes
            if audio_pids is not None:
                self._values["audio_pids"] = audio_pids
            if ecm_pid is not None:
                self._values["ecm_pid"] = ecm_pid
            if klv_behavior is not None:
                self._values["klv_behavior"] = klv_behavior
            if klv_data_pids is not None:
                self._values["klv_data_pids"] = klv_data_pids
            if nielsen_id3_behavior is not None:
                self._values["nielsen_id3_behavior"] = nielsen_id3_behavior
            if pat_interval is not None:
                self._values["pat_interval"] = pat_interval
            if pcr_control is not None:
                self._values["pcr_control"] = pcr_control
            if pcr_period is not None:
                self._values["pcr_period"] = pcr_period
            if pcr_pid is not None:
                self._values["pcr_pid"] = pcr_pid
            if pmt_interval is not None:
                self._values["pmt_interval"] = pmt_interval
            if pmt_pid is not None:
                self._values["pmt_pid"] = pmt_pid
            if program_num is not None:
                self._values["program_num"] = program_num
            if scte35_behavior is not None:
                self._values["scte35_behavior"] = scte35_behavior
            if scte35_pid is not None:
                self._values["scte35_pid"] = scte35_pid
            if timed_metadata_behavior is not None:
                self._values["timed_metadata_behavior"] = timed_metadata_behavior
            if timed_metadata_pid is not None:
                self._values["timed_metadata_pid"] = timed_metadata_pid
            if transport_stream_id is not None:
                self._values["transport_stream_id"] = transport_stream_id
            if video_pid is not None:
                self._values["video_pid"] = video_pid

        @builtins.property
        def audio_frames_per_pes(self) -> typing.Optional[jsii.Number]:
            '''The number of audio frames to insert for each PES packet.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-audioframesperpes
            '''
            result = self._values.get("audio_frames_per_pes")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def audio_pids(self) -> typing.Optional[builtins.str]:
            '''The PID of the elementary audio streams in the transport stream.

            Multiple values are accepted, and can be entered in ranges or by comma separation. You can enter the value as a decimal or hexadecimal value.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-audiopids
            '''
            result = self._values.get("audio_pids")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def ecm_pid(self) -> typing.Optional[builtins.str]:
            '''This parameter is unused and deprecated.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-ecmpid
            '''
            result = self._values.get("ecm_pid")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def klv_behavior(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-klvbehavior
            '''
            result = self._values.get("klv_behavior")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def klv_data_pids(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-klvdatapids
            '''
            result = self._values.get("klv_data_pids")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def nielsen_id3_behavior(self) -> typing.Optional[builtins.str]:
            '''If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-nielsenid3behavior
            '''
            result = self._values.get("nielsen_id3_behavior")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def pat_interval(self) -> typing.Optional[jsii.Number]:
            '''The number of milliseconds between instances of this table in the output transport stream.

            A value of "0" writes out the PMT once per segment file.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-patinterval
            '''
            result = self._values.get("pat_interval")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def pcr_control(self) -> typing.Optional[builtins.str]:
            '''When set to pcrEveryPesPacket, a Program Clock Reference value is inserted for every Packetized Elementary Stream (PES) header.

            This parameter is effective only when the PCR PID is the same as the video or audio elementary stream.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-pcrcontrol
            '''
            result = self._values.get("pcr_control")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def pcr_period(self) -> typing.Optional[jsii.Number]:
            '''The maximum time, in milliseconds, between Program Clock References (PCRs) inserted into the transport stream.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-pcrperiod
            '''
            result = self._values.get("pcr_period")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def pcr_pid(self) -> typing.Optional[builtins.str]:
            '''The PID of the Program Clock Reference (PCR) in the transport stream.

            When no value is given, MediaLive assigns the same value as the video PID. You can enter the value as a decimal or hexadecimal value.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-pcrpid
            '''
            result = self._values.get("pcr_pid")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def pmt_interval(self) -> typing.Optional[jsii.Number]:
            '''The number of milliseconds between instances of this table in the output transport stream.

            A value of "0" writes out the PMT once per segment file.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-pmtinterval
            '''
            result = self._values.get("pmt_interval")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def pmt_pid(self) -> typing.Optional[builtins.str]:
            '''The PID for the Program Map Table (PMT) in the transport stream.

            You can enter the value as a decimal or hexadecimal value.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-pmtpid
            '''
            result = self._values.get("pmt_pid")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def program_num(self) -> typing.Optional[jsii.Number]:
            '''The value of the program number field in the Program Map Table (PMT).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-programnum
            '''
            result = self._values.get("program_num")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def scte35_behavior(self) -> typing.Optional[builtins.str]:
            '''If set to passthrough, passes any SCTE-35 signals from the input source to this output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-scte35behavior
            '''
            result = self._values.get("scte35_behavior")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def scte35_pid(self) -> typing.Optional[builtins.str]:
            '''The PID of the SCTE-35 stream in the transport stream.

            You can enter the value as a decimal or hexadecimal value.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-scte35pid
            '''
            result = self._values.get("scte35_pid")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def timed_metadata_behavior(self) -> typing.Optional[builtins.str]:
            '''When set to passthrough, timed metadata is passed through from input to output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-timedmetadatabehavior
            '''
            result = self._values.get("timed_metadata_behavior")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def timed_metadata_pid(self) -> typing.Optional[builtins.str]:
            '''The PID of the timed metadata stream in the transport stream.

            You can enter the value as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-timedmetadatapid
            '''
            result = self._values.get("timed_metadata_pid")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def transport_stream_id(self) -> typing.Optional[jsii.Number]:
            '''The value of the transport stream ID field in the Program Map Table (PMT).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-transportstreamid
            '''
            result = self._values.get("transport_stream_id")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def video_pid(self) -> typing.Optional[builtins.str]:
            '''The PID of the elementary video stream in the transport stream.

            You can enter the value as a decimal or hexadecimal value.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-m3u8settings.html#cfn-medialive-channel-m3u8settings-videopid
            '''
            result = self._values.get("video_pid")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "M3u8SettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.MaintenanceCreateSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "maintenance_day": "maintenanceDay",
            "maintenance_start_time": "maintenanceStartTime",
        },
    )
    class MaintenanceCreateSettingsProperty:
        def __init__(
            self,
            *,
            maintenance_day: typing.Optional[builtins.str] = None,
            maintenance_start_time: typing.Optional[builtins.str] = None,
        ) -> None:
            '''
            :param maintenance_day: Choose one day of the week for maintenance. The chosen day is used for all future maintenance windows.
            :param maintenance_start_time: Choose the hour that maintenance will start. The chosen time is used for all future maintenance windows.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-maintenancecreatesettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                maintenance_create_settings_property = medialive.CfnChannel.MaintenanceCreateSettingsProperty(
                    maintenance_day="maintenanceDay",
                    maintenance_start_time="maintenanceStartTime"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__9000b706ff56d681f659c08c4f96b20d3fcb4008b138f8883f037a5806828540)
                check_type(argname="argument maintenance_day", value=maintenance_day, expected_type=type_hints["maintenance_day"])
                check_type(argname="argument maintenance_start_time", value=maintenance_start_time, expected_type=type_hints["maintenance_start_time"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if maintenance_day is not None:
                self._values["maintenance_day"] = maintenance_day
            if maintenance_start_time is not None:
                self._values["maintenance_start_time"] = maintenance_start_time

        @builtins.property
        def maintenance_day(self) -> typing.Optional[builtins.str]:
            '''Choose one day of the week for maintenance.

            The chosen day is used for all future maintenance windows.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-maintenancecreatesettings.html#cfn-medialive-channel-maintenancecreatesettings-maintenanceday
            '''
            result = self._values.get("maintenance_day")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def maintenance_start_time(self) -> typing.Optional[builtins.str]:
            '''Choose the hour that maintenance will start.

            The chosen time is used for all future maintenance windows.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-maintenancecreatesettings.html#cfn-medialive-channel-maintenancecreatesettings-maintenancestarttime
            '''
            result = self._values.get("maintenance_start_time")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MaintenanceCreateSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.MaintenanceUpdateSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "maintenance_day": "maintenanceDay",
            "maintenance_scheduled_date": "maintenanceScheduledDate",
            "maintenance_start_time": "maintenanceStartTime",
        },
    )
    class MaintenanceUpdateSettingsProperty:
        def __init__(
            self,
            *,
            maintenance_day: typing.Optional[builtins.str] = None,
            maintenance_scheduled_date: typing.Optional[builtins.str] = None,
            maintenance_start_time: typing.Optional[builtins.str] = None,
        ) -> None:
            '''
            :param maintenance_day: 
            :param maintenance_scheduled_date: 
            :param maintenance_start_time: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-maintenanceupdatesettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                maintenance_update_settings_property = medialive.CfnChannel.MaintenanceUpdateSettingsProperty(
                    maintenance_day="maintenanceDay",
                    maintenance_scheduled_date="maintenanceScheduledDate",
                    maintenance_start_time="maintenanceStartTime"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__c9392d58176c012cd3edcfd8cba809739bf0435a5bf1d6a207b2696cd3e366e0)
                check_type(argname="argument maintenance_day", value=maintenance_day, expected_type=type_hints["maintenance_day"])
                check_type(argname="argument maintenance_scheduled_date", value=maintenance_scheduled_date, expected_type=type_hints["maintenance_scheduled_date"])
                check_type(argname="argument maintenance_start_time", value=maintenance_start_time, expected_type=type_hints["maintenance_start_time"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if maintenance_day is not None:
                self._values["maintenance_day"] = maintenance_day
            if maintenance_scheduled_date is not None:
                self._values["maintenance_scheduled_date"] = maintenance_scheduled_date
            if maintenance_start_time is not None:
                self._values["maintenance_start_time"] = maintenance_start_time

        @builtins.property
        def maintenance_day(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-maintenanceupdatesettings.html#cfn-medialive-channel-maintenanceupdatesettings-maintenanceday
            '''
            result = self._values.get("maintenance_day")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def maintenance_scheduled_date(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-maintenanceupdatesettings.html#cfn-medialive-channel-maintenanceupdatesettings-maintenancescheduleddate
            '''
            result = self._values.get("maintenance_scheduled_date")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def maintenance_start_time(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-maintenanceupdatesettings.html#cfn-medialive-channel-maintenanceupdatesettings-maintenancestarttime
            '''
            result = self._values.get("maintenance_start_time")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MaintenanceUpdateSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.MediaPackageGroupSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"destination": "destination"},
    )
    class MediaPackageGroupSettingsProperty:
        def __init__(
            self,
            *,
            destination: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.OutputLocationRefProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The settings for the MediaPackage group.

            The parent of this entity is OutputGroupSettings.

            :param destination: The MediaPackage channel destination.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mediapackagegroupsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                media_package_group_settings_property = medialive.CfnChannel.MediaPackageGroupSettingsProperty(
                    destination=medialive.CfnChannel.OutputLocationRefProperty(
                        destination_ref_id="destinationRefId"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__85fb14a458ec20936e4659288aff4ca667c9931c1d403d6a189b9b390fa82420)
                check_type(argname="argument destination", value=destination, expected_type=type_hints["destination"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if destination is not None:
                self._values["destination"] = destination

        @builtins.property
        def destination(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputLocationRefProperty"]]:
            '''The MediaPackage channel destination.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mediapackagegroupsettings.html#cfn-medialive-channel-mediapackagegroupsettings-destination
            '''
            result = self._values.get("destination")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputLocationRefProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MediaPackageGroupSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.MediaPackageOutputDestinationSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"channel_id": "channelId"},
    )
    class MediaPackageOutputDestinationSettingsProperty:
        def __init__(self, *, channel_id: typing.Optional[builtins.str] = None) -> None:
            '''Destination settings for a MediaPackage output.

            The parent of this entity is OutputDestination.

            :param channel_id: The ID of the channel in MediaPackage that is the destination for this output group. You don't need to specify the individual inputs in MediaPackage; MediaLive handles the connection of the two MediaLive pipelines to the two MediaPackage inputs. The MediaPackage channel and MediaLive channel must be in the same Region.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mediapackageoutputdestinationsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                media_package_output_destination_settings_property = medialive.CfnChannel.MediaPackageOutputDestinationSettingsProperty(
                    channel_id="channelId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__874df17e03aca6480b8e3f6dcef1562be61cb009cf5db8263599bb5c44819718)
                check_type(argname="argument channel_id", value=channel_id, expected_type=type_hints["channel_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if channel_id is not None:
                self._values["channel_id"] = channel_id

        @builtins.property
        def channel_id(self) -> typing.Optional[builtins.str]:
            '''The ID of the channel in MediaPackage that is the destination for this output group.

            You don't need to specify the individual inputs in MediaPackage; MediaLive handles the connection of the two MediaLive pipelines to the two MediaPackage inputs. The MediaPackage channel and MediaLive channel must be in the same Region.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mediapackageoutputdestinationsettings.html#cfn-medialive-channel-mediapackageoutputdestinationsettings-channelid
            '''
            result = self._values.get("channel_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MediaPackageOutputDestinationSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.MediaPackageOutputSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={},
    )
    class MediaPackageOutputSettingsProperty:
        def __init__(self) -> None:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mediapackageoutputsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                media_package_output_settings_property = medialive.CfnChannel.MediaPackageOutputSettingsProperty()
            '''
            self._values: typing.Dict[builtins.str, typing.Any] = {}

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MediaPackageOutputSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.MotionGraphicsConfigurationProperty",
        jsii_struct_bases=[],
        name_mapping={
            "motion_graphics_insertion": "motionGraphicsInsertion",
            "motion_graphics_settings": "motionGraphicsSettings",
        },
    )
    class MotionGraphicsConfigurationProperty:
        def __init__(
            self,
            *,
            motion_graphics_insertion: typing.Optional[builtins.str] = None,
            motion_graphics_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.MotionGraphicsSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Settings to enable and configure the motion graphics overlay feature in the channel.

            The parent of this entity is EncoderSettings.

            :param motion_graphics_insertion: Enables or disables the motion graphics overlay feature in the channel.
            :param motion_graphics_settings: Settings to enable and configure the motion graphics overlay feature in the channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-motiongraphicsconfiguration.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                motion_graphics_configuration_property = medialive.CfnChannel.MotionGraphicsConfigurationProperty(
                    motion_graphics_insertion="motionGraphicsInsertion",
                    motion_graphics_settings=medialive.CfnChannel.MotionGraphicsSettingsProperty(
                        html_motion_graphics_settings=medialive.CfnChannel.HtmlMotionGraphicsSettingsProperty()
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__8e1d001ddfa1ba51a4a115d7684918fa784fab37b9602415021f1afaeb5ea19f)
                check_type(argname="argument motion_graphics_insertion", value=motion_graphics_insertion, expected_type=type_hints["motion_graphics_insertion"])
                check_type(argname="argument motion_graphics_settings", value=motion_graphics_settings, expected_type=type_hints["motion_graphics_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if motion_graphics_insertion is not None:
                self._values["motion_graphics_insertion"] = motion_graphics_insertion
            if motion_graphics_settings is not None:
                self._values["motion_graphics_settings"] = motion_graphics_settings

        @builtins.property
        def motion_graphics_insertion(self) -> typing.Optional[builtins.str]:
            '''Enables or disables the motion graphics overlay feature in the channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-motiongraphicsconfiguration.html#cfn-medialive-channel-motiongraphicsconfiguration-motiongraphicsinsertion
            '''
            result = self._values.get("motion_graphics_insertion")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def motion_graphics_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MotionGraphicsSettingsProperty"]]:
            '''Settings to enable and configure the motion graphics overlay feature in the channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-motiongraphicsconfiguration.html#cfn-medialive-channel-motiongraphicsconfiguration-motiongraphicssettings
            '''
            result = self._values.get("motion_graphics_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MotionGraphicsSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MotionGraphicsConfigurationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.MotionGraphicsSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"html_motion_graphics_settings": "htmlMotionGraphicsSettings"},
    )
    class MotionGraphicsSettingsProperty:
        def __init__(
            self,
            *,
            html_motion_graphics_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.HtmlMotionGraphicsSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Settings to enable and configure the motion graphics overlay feature in the channel.

            The parent of this entity is MotionGraphicsConfiguration.

            :param html_motion_graphics_settings: Settings to configure the motion graphics overlay to use an HTML asset.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-motiongraphicssettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                motion_graphics_settings_property = medialive.CfnChannel.MotionGraphicsSettingsProperty(
                    html_motion_graphics_settings=medialive.CfnChannel.HtmlMotionGraphicsSettingsProperty()
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__64c7cf6d496b378c8d31054297fbe10e5e90380713c3b080e89de1f71a225448)
                check_type(argname="argument html_motion_graphics_settings", value=html_motion_graphics_settings, expected_type=type_hints["html_motion_graphics_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if html_motion_graphics_settings is not None:
                self._values["html_motion_graphics_settings"] = html_motion_graphics_settings

        @builtins.property
        def html_motion_graphics_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HtmlMotionGraphicsSettingsProperty"]]:
            '''Settings to configure the motion graphics overlay to use an HTML asset.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-motiongraphicssettings.html#cfn-medialive-channel-motiongraphicssettings-htmlmotiongraphicssettings
            '''
            result = self._values.get("html_motion_graphics_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HtmlMotionGraphicsSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MotionGraphicsSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.Mp2SettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "bitrate": "bitrate",
            "coding_mode": "codingMode",
            "sample_rate": "sampleRate",
        },
    )
    class Mp2SettingsProperty:
        def __init__(
            self,
            *,
            bitrate: typing.Optional[jsii.Number] = None,
            coding_mode: typing.Optional[builtins.str] = None,
            sample_rate: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The configuration for this MP2 audio.

            The parent of this entity is AudioCodecSettings.

            :param bitrate: The average bitrate in bits/second.
            :param coding_mode: The MPEG2 Audio coding mode. Valid values are codingMode10 (for mono) or codingMode20 (for stereo).
            :param sample_rate: The sample rate in Hz.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mp2settings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                mp2_settings_property = medialive.CfnChannel.Mp2SettingsProperty(
                    bitrate=123,
                    coding_mode="codingMode",
                    sample_rate=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__223c9f8a434346ccf1e7bf69f3ec7d834e31a79870f7fbf1a746a41f360df164)
                check_type(argname="argument bitrate", value=bitrate, expected_type=type_hints["bitrate"])
                check_type(argname="argument coding_mode", value=coding_mode, expected_type=type_hints["coding_mode"])
                check_type(argname="argument sample_rate", value=sample_rate, expected_type=type_hints["sample_rate"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if bitrate is not None:
                self._values["bitrate"] = bitrate
            if coding_mode is not None:
                self._values["coding_mode"] = coding_mode
            if sample_rate is not None:
                self._values["sample_rate"] = sample_rate

        @builtins.property
        def bitrate(self) -> typing.Optional[jsii.Number]:
            '''The average bitrate in bits/second.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mp2settings.html#cfn-medialive-channel-mp2settings-bitrate
            '''
            result = self._values.get("bitrate")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def coding_mode(self) -> typing.Optional[builtins.str]:
            '''The MPEG2 Audio coding mode.

            Valid values are codingMode10 (for mono) or codingMode20 (for stereo).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mp2settings.html#cfn-medialive-channel-mp2settings-codingmode
            '''
            result = self._values.get("coding_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def sample_rate(self) -> typing.Optional[jsii.Number]:
            '''The sample rate in Hz.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mp2settings.html#cfn-medialive-channel-mp2settings-samplerate
            '''
            result = self._values.get("sample_rate")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "Mp2SettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.Mpeg2FilterSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"temporal_filter_settings": "temporalFilterSettings"},
    )
    class Mpeg2FilterSettingsProperty:
        def __init__(
            self,
            *,
            temporal_filter_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.TemporalFilterSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Settings to configure video filters that apply to the MPEG-2 codec.

            The parent of this entity is Mpeg2FilterSettings.

            :param temporal_filter_settings: Settings for applying the temporal filter to the video.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2filtersettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                mpeg2_filter_settings_property = medialive.CfnChannel.Mpeg2FilterSettingsProperty(
                    temporal_filter_settings=medialive.CfnChannel.TemporalFilterSettingsProperty(
                        post_filter_sharpening="postFilterSharpening",
                        strength="strength"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__5c0aedba578afe36332283478d4ae86e9f748ce6111081ba34d06a2f8901449d)
                check_type(argname="argument temporal_filter_settings", value=temporal_filter_settings, expected_type=type_hints["temporal_filter_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if temporal_filter_settings is not None:
                self._values["temporal_filter_settings"] = temporal_filter_settings

        @builtins.property
        def temporal_filter_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TemporalFilterSettingsProperty"]]:
            '''Settings for applying the temporal filter to the video.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2filtersettings.html#cfn-medialive-channel-mpeg2filtersettings-temporalfiltersettings
            '''
            result = self._values.get("temporal_filter_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TemporalFilterSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "Mpeg2FilterSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.Mpeg2SettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "adaptive_quantization": "adaptiveQuantization",
            "afd_signaling": "afdSignaling",
            "color_metadata": "colorMetadata",
            "color_space": "colorSpace",
            "display_aspect_ratio": "displayAspectRatio",
            "filter_settings": "filterSettings",
            "fixed_afd": "fixedAfd",
            "framerate_denominator": "framerateDenominator",
            "framerate_numerator": "framerateNumerator",
            "gop_closed_cadence": "gopClosedCadence",
            "gop_num_b_frames": "gopNumBFrames",
            "gop_size": "gopSize",
            "gop_size_units": "gopSizeUnits",
            "scan_type": "scanType",
            "subgop_length": "subgopLength",
            "timecode_burnin_settings": "timecodeBurninSettings",
            "timecode_insertion": "timecodeInsertion",
        },
    )
    class Mpeg2SettingsProperty:
        def __init__(
            self,
            *,
            adaptive_quantization: typing.Optional[builtins.str] = None,
            afd_signaling: typing.Optional[builtins.str] = None,
            color_metadata: typing.Optional[builtins.str] = None,
            color_space: typing.Optional[builtins.str] = None,
            display_aspect_ratio: typing.Optional[builtins.str] = None,
            filter_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.Mpeg2FilterSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            fixed_afd: typing.Optional[builtins.str] = None,
            framerate_denominator: typing.Optional[jsii.Number] = None,
            framerate_numerator: typing.Optional[jsii.Number] = None,
            gop_closed_cadence: typing.Optional[jsii.Number] = None,
            gop_num_b_frames: typing.Optional[jsii.Number] = None,
            gop_size: typing.Optional[jsii.Number] = None,
            gop_size_units: typing.Optional[builtins.str] = None,
            scan_type: typing.Optional[builtins.str] = None,
            subgop_length: typing.Optional[builtins.str] = None,
            timecode_burnin_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.TimecodeBurninSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            timecode_insertion: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The settings for the MPEG-2 codec in the output.

            The parent of this entity is VideoCodecSetting.

            :param adaptive_quantization: Choose Off to disable adaptive quantization. Or choose another value to enable the quantizer and set its strength. The strengths are: Auto, Off, Low, Medium, High. When you enable this field, MediaLive allows intra-frame quantizers to vary, which might improve visual quality.
            :param afd_signaling: Indicates the AFD values that MediaLive will write into the video encode. If you do not know what AFD signaling is, or if your downstream system has not given you guidance, choose AUTO. AUTO: MediaLive will try to preserve the input AFD value (in cases where multiple AFD values are valid). FIXED: MediaLive will use the value you specify in fixedAFD.
            :param color_metadata: Specifies whether to include the color space metadata. The metadata describes the color space that applies to the video (the colorSpace field). We recommend that you insert the metadata.
            :param color_space: Choose the type of color space conversion to apply to the output. For detailed information on setting up both the input and the output to obtain the desired color space in the output, see the section on "MediaLive Features - Video - color space" in the MediaLive User Guide. PASSTHROUGH: Keep the color space of the input content - do not convert it. AUTO:Convert all content that is SD to rec 601, and convert all content that is HD to rec 709.
            :param display_aspect_ratio: Sets the pixel aspect ratio for the encode.
            :param filter_settings: Optionally specify a noise reduction filter, which can improve quality of compressed content. If you do not choose a filter, no filter will be applied. TEMPORAL: This filter is useful for both source content that is noisy (when it has excessive digital artifacts) and source content that is clean. When the content is noisy, the filter cleans up the source content before the encoding phase, with these two effects: First, it improves the output video quality because the content has been cleaned up. Secondly, it decreases the bandwidth because MediaLive does not waste bits on encoding noise. When the content is reasonably clean, the filter tends to decrease the bitrate.
            :param fixed_afd: Complete this field only when afdSignaling is set to FIXED. Enter the AFD value (4 bits) to write on all frames of the video encode.
            :param framerate_denominator: description": "The framerate denominator. For example, 1001. The framerate is the numerator divided by the denominator. For example, 24000 / 1001 = 23.976 FPS.
            :param framerate_numerator: The framerate numerator. For example, 24000. The framerate is the numerator divided by the denominator. For example, 24000 / 1001 = 23.976 FPS.
            :param gop_closed_cadence: MPEG2: default is open GOP.
            :param gop_num_b_frames: Relates to the GOP structure. The number of B-frames between reference frames. If you do not know what a B-frame is, use the default.
            :param gop_size: Relates to the GOP structure. The GOP size (keyframe interval) in the units specified in gopSizeUnits. If you do not know what GOP is, use the default. If gopSizeUnits is frames, then the gopSize must be an integer and must be greater than or equal to 1. If gopSizeUnits is seconds, the gopSize must be greater than 0, but does not need to be an integer.
            :param gop_size_units: Relates to the GOP structure. Specifies whether the gopSize is specified in frames or seconds. If you do not plan to change the default gopSize, leave the default. If you specify SECONDS, MediaLive will internally convert the gop size to a frame count.
            :param scan_type: Set the scan type of the output to PROGRESSIVE or INTERLACED (top field first).
            :param subgop_length: Relates to the GOP structure. If you do not know what GOP is, use the default. FIXED: Set the number of B-frames in each sub-GOP to the value in gopNumBFrames. DYNAMIC: Let MediaLive optimize the number of B-frames in each sub-GOP, to improve visual quality.
            :param timecode_burnin_settings: 
            :param timecode_insertion: Determines how MediaLive inserts timecodes in the output video. For detailed information about setting up the input and the output for a timecode, see the section on "MediaLive Features - Timecode configuration" in the MediaLive User Guide. DISABLED: do not include timecodes. GOP_TIMECODE: Include timecode metadata in the GOP header.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                mpeg2_settings_property = medialive.CfnChannel.Mpeg2SettingsProperty(
                    adaptive_quantization="adaptiveQuantization",
                    afd_signaling="afdSignaling",
                    color_metadata="colorMetadata",
                    color_space="colorSpace",
                    display_aspect_ratio="displayAspectRatio",
                    filter_settings=medialive.CfnChannel.Mpeg2FilterSettingsProperty(
                        temporal_filter_settings=medialive.CfnChannel.TemporalFilterSettingsProperty(
                            post_filter_sharpening="postFilterSharpening",
                            strength="strength"
                        )
                    ),
                    fixed_afd="fixedAfd",
                    framerate_denominator=123,
                    framerate_numerator=123,
                    gop_closed_cadence=123,
                    gop_num_bFrames=123,
                    gop_size=123,
                    gop_size_units="gopSizeUnits",
                    scan_type="scanType",
                    subgop_length="subgopLength",
                    timecode_burnin_settings=medialive.CfnChannel.TimecodeBurninSettingsProperty(
                        font_size="fontSize",
                        position="position",
                        prefix="prefix"
                    ),
                    timecode_insertion="timecodeInsertion"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__701b4b4bc0caa4a53318de6c2a419bb7a89f218e5298430f76861ce86a5959d8)
                check_type(argname="argument adaptive_quantization", value=adaptive_quantization, expected_type=type_hints["adaptive_quantization"])
                check_type(argname="argument afd_signaling", value=afd_signaling, expected_type=type_hints["afd_signaling"])
                check_type(argname="argument color_metadata", value=color_metadata, expected_type=type_hints["color_metadata"])
                check_type(argname="argument color_space", value=color_space, expected_type=type_hints["color_space"])
                check_type(argname="argument display_aspect_ratio", value=display_aspect_ratio, expected_type=type_hints["display_aspect_ratio"])
                check_type(argname="argument filter_settings", value=filter_settings, expected_type=type_hints["filter_settings"])
                check_type(argname="argument fixed_afd", value=fixed_afd, expected_type=type_hints["fixed_afd"])
                check_type(argname="argument framerate_denominator", value=framerate_denominator, expected_type=type_hints["framerate_denominator"])
                check_type(argname="argument framerate_numerator", value=framerate_numerator, expected_type=type_hints["framerate_numerator"])
                check_type(argname="argument gop_closed_cadence", value=gop_closed_cadence, expected_type=type_hints["gop_closed_cadence"])
                check_type(argname="argument gop_num_b_frames", value=gop_num_b_frames, expected_type=type_hints["gop_num_b_frames"])
                check_type(argname="argument gop_size", value=gop_size, expected_type=type_hints["gop_size"])
                check_type(argname="argument gop_size_units", value=gop_size_units, expected_type=type_hints["gop_size_units"])
                check_type(argname="argument scan_type", value=scan_type, expected_type=type_hints["scan_type"])
                check_type(argname="argument subgop_length", value=subgop_length, expected_type=type_hints["subgop_length"])
                check_type(argname="argument timecode_burnin_settings", value=timecode_burnin_settings, expected_type=type_hints["timecode_burnin_settings"])
                check_type(argname="argument timecode_insertion", value=timecode_insertion, expected_type=type_hints["timecode_insertion"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if adaptive_quantization is not None:
                self._values["adaptive_quantization"] = adaptive_quantization
            if afd_signaling is not None:
                self._values["afd_signaling"] = afd_signaling
            if color_metadata is not None:
                self._values["color_metadata"] = color_metadata
            if color_space is not None:
                self._values["color_space"] = color_space
            if display_aspect_ratio is not None:
                self._values["display_aspect_ratio"] = display_aspect_ratio
            if filter_settings is not None:
                self._values["filter_settings"] = filter_settings
            if fixed_afd is not None:
                self._values["fixed_afd"] = fixed_afd
            if framerate_denominator is not None:
                self._values["framerate_denominator"] = framerate_denominator
            if framerate_numerator is not None:
                self._values["framerate_numerator"] = framerate_numerator
            if gop_closed_cadence is not None:
                self._values["gop_closed_cadence"] = gop_closed_cadence
            if gop_num_b_frames is not None:
                self._values["gop_num_b_frames"] = gop_num_b_frames
            if gop_size is not None:
                self._values["gop_size"] = gop_size
            if gop_size_units is not None:
                self._values["gop_size_units"] = gop_size_units
            if scan_type is not None:
                self._values["scan_type"] = scan_type
            if subgop_length is not None:
                self._values["subgop_length"] = subgop_length
            if timecode_burnin_settings is not None:
                self._values["timecode_burnin_settings"] = timecode_burnin_settings
            if timecode_insertion is not None:
                self._values["timecode_insertion"] = timecode_insertion

        @builtins.property
        def adaptive_quantization(self) -> typing.Optional[builtins.str]:
            '''Choose Off to disable adaptive quantization.

            Or choose another value to enable the quantizer and set its strength. The strengths are: Auto, Off, Low, Medium, High. When you enable this field, MediaLive allows intra-frame quantizers to vary, which might improve visual quality.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-adaptivequantization
            '''
            result = self._values.get("adaptive_quantization")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def afd_signaling(self) -> typing.Optional[builtins.str]:
            '''Indicates the AFD values that MediaLive will write into the video encode.

            If you do not know what AFD signaling is, or if your downstream system has not given you guidance, choose AUTO.
            AUTO: MediaLive will try to preserve the input AFD value (in cases where multiple AFD values are valid).
            FIXED: MediaLive will use the value you specify in fixedAFD.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-afdsignaling
            '''
            result = self._values.get("afd_signaling")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def color_metadata(self) -> typing.Optional[builtins.str]:
            '''Specifies whether to include the color space metadata.

            The metadata describes the color space that applies to the video (the colorSpace field). We recommend that you insert the metadata.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-colormetadata
            '''
            result = self._values.get("color_metadata")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def color_space(self) -> typing.Optional[builtins.str]:
            '''Choose the type of color space conversion to apply to the output.

            For detailed information on setting up both the input and the output to obtain the desired color space in the output, see the section on "MediaLive Features - Video - color space" in the MediaLive User Guide.
            PASSTHROUGH: Keep the color space of the input content - do not convert it.
            AUTO:Convert all content that is SD to rec 601, and convert all content that is HD to rec 709.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-colorspace
            '''
            result = self._values.get("color_space")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def display_aspect_ratio(self) -> typing.Optional[builtins.str]:
            '''Sets the pixel aspect ratio for the encode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-displayaspectratio
            '''
            result = self._values.get("display_aspect_ratio")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def filter_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Mpeg2FilterSettingsProperty"]]:
            '''Optionally specify a noise reduction filter, which can improve quality of compressed content.

            If you do not choose a filter, no filter will be applied.
            TEMPORAL: This filter is useful for both source content that is noisy (when it has excessive digital artifacts) and source content that is clean.
            When the content is noisy, the filter cleans up the source content before the encoding phase, with these two effects: First, it improves the output video quality because the content has been cleaned up. Secondly, it decreases the bandwidth because MediaLive does not waste bits on encoding noise.
            When the content is reasonably clean, the filter tends to decrease the bitrate.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-filtersettings
            '''
            result = self._values.get("filter_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Mpeg2FilterSettingsProperty"]], result)

        @builtins.property
        def fixed_afd(self) -> typing.Optional[builtins.str]:
            '''Complete this field only when afdSignaling is set to FIXED.

            Enter the AFD value (4 bits) to write on all frames of the video encode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-fixedafd
            '''
            result = self._values.get("fixed_afd")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def framerate_denominator(self) -> typing.Optional[jsii.Number]:
            '''description": "The framerate denominator.

            For example, 1001. The framerate is the numerator divided by the denominator. For example, 24000 / 1001 = 23.976 FPS.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-frameratedenominator
            '''
            result = self._values.get("framerate_denominator")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def framerate_numerator(self) -> typing.Optional[jsii.Number]:
            '''The framerate numerator.

            For example, 24000. The framerate is the numerator divided by the denominator. For example, 24000 / 1001 = 23.976 FPS.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-frameratenumerator
            '''
            result = self._values.get("framerate_numerator")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def gop_closed_cadence(self) -> typing.Optional[jsii.Number]:
            '''MPEG2: default is open GOP.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-gopclosedcadence
            '''
            result = self._values.get("gop_closed_cadence")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def gop_num_b_frames(self) -> typing.Optional[jsii.Number]:
            '''Relates to the GOP structure.

            The number of B-frames between reference frames. If you do not know what a B-frame is, use the default.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-gopnumbframes
            '''
            result = self._values.get("gop_num_b_frames")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def gop_size(self) -> typing.Optional[jsii.Number]:
            '''Relates to the GOP structure.

            The GOP size (keyframe interval) in the units specified in gopSizeUnits. If you do not know what GOP is, use the default.
            If gopSizeUnits is frames, then the gopSize must be an integer and must be greater than or equal to 1.
            If gopSizeUnits is seconds, the gopSize must be greater than 0, but does not need to be an integer.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-gopsize
            '''
            result = self._values.get("gop_size")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def gop_size_units(self) -> typing.Optional[builtins.str]:
            '''Relates to the GOP structure.

            Specifies whether the gopSize is specified in frames or seconds. If you do not plan to change the default gopSize, leave the default. If you specify SECONDS, MediaLive will internally convert the gop size to a frame count.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-gopsizeunits
            '''
            result = self._values.get("gop_size_units")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def scan_type(self) -> typing.Optional[builtins.str]:
            '''Set the scan type of the output to PROGRESSIVE or INTERLACED (top field first).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-scantype
            '''
            result = self._values.get("scan_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def subgop_length(self) -> typing.Optional[builtins.str]:
            '''Relates to the GOP structure.

            If you do not know what GOP is, use the default.
            FIXED: Set the number of B-frames in each sub-GOP to the value in gopNumBFrames.
            DYNAMIC: Let MediaLive optimize the number of B-frames in each sub-GOP, to improve visual quality.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-subgoplength
            '''
            result = self._values.get("subgop_length")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def timecode_burnin_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TimecodeBurninSettingsProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-timecodeburninsettings
            '''
            result = self._values.get("timecode_burnin_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.TimecodeBurninSettingsProperty"]], result)

        @builtins.property
        def timecode_insertion(self) -> typing.Optional[builtins.str]:
            '''Determines how MediaLive inserts timecodes in the output video.

            For detailed information about setting up the input and the output for a timecode, see the section on "MediaLive Features - Timecode configuration" in the MediaLive User Guide.
            DISABLED: do not include timecodes.
            GOP_TIMECODE: Include timecode metadata in the GOP header.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mpeg2settings.html#cfn-medialive-channel-mpeg2settings-timecodeinsertion
            '''
            result = self._values.get("timecode_insertion")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "Mpeg2SettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.MsSmoothGroupSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "acquisition_point_id": "acquisitionPointId",
            "audio_only_timecode_control": "audioOnlyTimecodeControl",
            "certificate_mode": "certificateMode",
            "connection_retry_interval": "connectionRetryInterval",
            "destination": "destination",
            "event_id": "eventId",
            "event_id_mode": "eventIdMode",
            "event_stop_behavior": "eventStopBehavior",
            "filecache_duration": "filecacheDuration",
            "fragment_length": "fragmentLength",
            "input_loss_action": "inputLossAction",
            "num_retries": "numRetries",
            "restart_delay": "restartDelay",
            "segmentation_mode": "segmentationMode",
            "send_delay_ms": "sendDelayMs",
            "sparse_track_type": "sparseTrackType",
            "stream_manifest_behavior": "streamManifestBehavior",
            "timestamp_offset": "timestampOffset",
            "timestamp_offset_mode": "timestampOffsetMode",
        },
    )
    class MsSmoothGroupSettingsProperty:
        def __init__(
            self,
            *,
            acquisition_point_id: typing.Optional[builtins.str] = None,
            audio_only_timecode_control: typing.Optional[builtins.str] = None,
            certificate_mode: typing.Optional[builtins.str] = None,
            connection_retry_interval: typing.Optional[jsii.Number] = None,
            destination: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.OutputLocationRefProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            event_id: typing.Optional[builtins.str] = None,
            event_id_mode: typing.Optional[builtins.str] = None,
            event_stop_behavior: typing.Optional[builtins.str] = None,
            filecache_duration: typing.Optional[jsii.Number] = None,
            fragment_length: typing.Optional[jsii.Number] = None,
            input_loss_action: typing.Optional[builtins.str] = None,
            num_retries: typing.Optional[jsii.Number] = None,
            restart_delay: typing.Optional[jsii.Number] = None,
            segmentation_mode: typing.Optional[builtins.str] = None,
            send_delay_ms: typing.Optional[jsii.Number] = None,
            sparse_track_type: typing.Optional[builtins.str] = None,
            stream_manifest_behavior: typing.Optional[builtins.str] = None,
            timestamp_offset: typing.Optional[builtins.str] = None,
            timestamp_offset_mode: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The settings for a Microsoft Smooth output group.

            The parent of this entity is OutputGroupSettings.

            :param acquisition_point_id: The value of the Acquisition Point Identity element that is used in each message placed in the sparse track. Enabled only if sparseTrackType is not "none."
            :param audio_only_timecode_control: If set to passthrough for an audio-only Microsoft Smooth output, the fragment absolute time is set to the current timecode. This option does not write timecodes to the audio elementary stream.
            :param certificate_mode: If set to verifyAuthenticity, verifies the HTTPS certificate chain to a trusted certificate authority (CA). This causes HTTPS outputs to self-signed certificates to fail.
            :param connection_retry_interval: The number of seconds to wait before retrying the connection to the IIS server if the connection is lost. Content is cached during this time, and the cache is delivered to the IIS server after the connection is re-established.
            :param destination: The Smooth Streaming publish point on an IIS server. MediaLive acts as a "Push" encoder to IIS.
            :param event_id: The Microsoft Smooth channel ID that is sent to the IIS server. Specify the ID only if eventIdMode is set to useConfigured.
            :param event_id_mode: Specifies whether to send a channel ID to the IIS server. If no channel ID is sent and the same channel is used without changing the publishing point, clients might see cached video from the previous run. Options: - "useConfigured" - use the value provided in eventId - "useTimestamp" - generate and send a channel ID based on the current timestamp - "noEventId" - do not send a channel ID to the IIS server.
            :param event_stop_behavior: When set to sendEos, sends an EOS signal to an IIS server when stopping the channel.
            :param filecache_duration: The size, in seconds, of the file cache for streaming outputs.
            :param fragment_length: The length, in seconds, of mp4 fragments to generate. The fragment length must be compatible with GOP size and frame rate.
            :param input_loss_action: A parameter that controls output group behavior on an input loss.
            :param num_retries: The number of retry attempts.
            :param restart_delay: The number of seconds before initiating a restart due to output failure, due to exhausting the numRetries on one segment, or exceeding filecacheDuration.
            :param segmentation_mode: useInputSegmentation has been deprecated. The configured segment size is always used.
            :param send_delay_ms: The number of milliseconds to delay the output from the second pipeline.
            :param sparse_track_type: If set to scte35, uses incoming SCTE-35 messages to generate a sparse track in this group of Microsoft Smooth outputs.
            :param stream_manifest_behavior: When set to send, sends a stream manifest so that the publishing point doesn't start until all streams start.
            :param timestamp_offset: The timestamp offset for the channel. Used only if timestampOffsetMode is set to useConfiguredOffset.
            :param timestamp_offset_mode: The type of timestamp date offset to use. - useEventStartDate: Use the date the channel was started as the offset - useConfiguredOffset: Use an explicitly configured date as the offset.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                ms_smooth_group_settings_property = medialive.CfnChannel.MsSmoothGroupSettingsProperty(
                    acquisition_point_id="acquisitionPointId",
                    audio_only_timecode_control="audioOnlyTimecodeControl",
                    certificate_mode="certificateMode",
                    connection_retry_interval=123,
                    destination=medialive.CfnChannel.OutputLocationRefProperty(
                        destination_ref_id="destinationRefId"
                    ),
                    event_id="eventId",
                    event_id_mode="eventIdMode",
                    event_stop_behavior="eventStopBehavior",
                    filecache_duration=123,
                    fragment_length=123,
                    input_loss_action="inputLossAction",
                    num_retries=123,
                    restart_delay=123,
                    segmentation_mode="segmentationMode",
                    send_delay_ms=123,
                    sparse_track_type="sparseTrackType",
                    stream_manifest_behavior="streamManifestBehavior",
                    timestamp_offset="timestampOffset",
                    timestamp_offset_mode="timestampOffsetMode"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__41ddbb98f2f6752ca6ca5582a2f99ce8e4cf486de57ce54624a5f3c99215e8ad)
                check_type(argname="argument acquisition_point_id", value=acquisition_point_id, expected_type=type_hints["acquisition_point_id"])
                check_type(argname="argument audio_only_timecode_control", value=audio_only_timecode_control, expected_type=type_hints["audio_only_timecode_control"])
                check_type(argname="argument certificate_mode", value=certificate_mode, expected_type=type_hints["certificate_mode"])
                check_type(argname="argument connection_retry_interval", value=connection_retry_interval, expected_type=type_hints["connection_retry_interval"])
                check_type(argname="argument destination", value=destination, expected_type=type_hints["destination"])
                check_type(argname="argument event_id", value=event_id, expected_type=type_hints["event_id"])
                check_type(argname="argument event_id_mode", value=event_id_mode, expected_type=type_hints["event_id_mode"])
                check_type(argname="argument event_stop_behavior", value=event_stop_behavior, expected_type=type_hints["event_stop_behavior"])
                check_type(argname="argument filecache_duration", value=filecache_duration, expected_type=type_hints["filecache_duration"])
                check_type(argname="argument fragment_length", value=fragment_length, expected_type=type_hints["fragment_length"])
                check_type(argname="argument input_loss_action", value=input_loss_action, expected_type=type_hints["input_loss_action"])
                check_type(argname="argument num_retries", value=num_retries, expected_type=type_hints["num_retries"])
                check_type(argname="argument restart_delay", value=restart_delay, expected_type=type_hints["restart_delay"])
                check_type(argname="argument segmentation_mode", value=segmentation_mode, expected_type=type_hints["segmentation_mode"])
                check_type(argname="argument send_delay_ms", value=send_delay_ms, expected_type=type_hints["send_delay_ms"])
                check_type(argname="argument sparse_track_type", value=sparse_track_type, expected_type=type_hints["sparse_track_type"])
                check_type(argname="argument stream_manifest_behavior", value=stream_manifest_behavior, expected_type=type_hints["stream_manifest_behavior"])
                check_type(argname="argument timestamp_offset", value=timestamp_offset, expected_type=type_hints["timestamp_offset"])
                check_type(argname="argument timestamp_offset_mode", value=timestamp_offset_mode, expected_type=type_hints["timestamp_offset_mode"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if acquisition_point_id is not None:
                self._values["acquisition_point_id"] = acquisition_point_id
            if audio_only_timecode_control is not None:
                self._values["audio_only_timecode_control"] = audio_only_timecode_control
            if certificate_mode is not None:
                self._values["certificate_mode"] = certificate_mode
            if connection_retry_interval is not None:
                self._values["connection_retry_interval"] = connection_retry_interval
            if destination is not None:
                self._values["destination"] = destination
            if event_id is not None:
                self._values["event_id"] = event_id
            if event_id_mode is not None:
                self._values["event_id_mode"] = event_id_mode
            if event_stop_behavior is not None:
                self._values["event_stop_behavior"] = event_stop_behavior
            if filecache_duration is not None:
                self._values["filecache_duration"] = filecache_duration
            if fragment_length is not None:
                self._values["fragment_length"] = fragment_length
            if input_loss_action is not None:
                self._values["input_loss_action"] = input_loss_action
            if num_retries is not None:
                self._values["num_retries"] = num_retries
            if restart_delay is not None:
                self._values["restart_delay"] = restart_delay
            if segmentation_mode is not None:
                self._values["segmentation_mode"] = segmentation_mode
            if send_delay_ms is not None:
                self._values["send_delay_ms"] = send_delay_ms
            if sparse_track_type is not None:
                self._values["sparse_track_type"] = sparse_track_type
            if stream_manifest_behavior is not None:
                self._values["stream_manifest_behavior"] = stream_manifest_behavior
            if timestamp_offset is not None:
                self._values["timestamp_offset"] = timestamp_offset
            if timestamp_offset_mode is not None:
                self._values["timestamp_offset_mode"] = timestamp_offset_mode

        @builtins.property
        def acquisition_point_id(self) -> typing.Optional[builtins.str]:
            '''The value of the Acquisition Point Identity element that is used in each message placed in the sparse track.

            Enabled only if sparseTrackType is not "none."

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-acquisitionpointid
            '''
            result = self._values.get("acquisition_point_id")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def audio_only_timecode_control(self) -> typing.Optional[builtins.str]:
            '''If set to passthrough for an audio-only Microsoft Smooth output, the fragment absolute time is set to the current timecode.

            This option does not write timecodes to the audio elementary stream.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-audioonlytimecodecontrol
            '''
            result = self._values.get("audio_only_timecode_control")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def certificate_mode(self) -> typing.Optional[builtins.str]:
            '''If set to verifyAuthenticity, verifies the HTTPS certificate chain to a trusted certificate authority (CA).

            This causes HTTPS outputs to self-signed certificates to fail.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-certificatemode
            '''
            result = self._values.get("certificate_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def connection_retry_interval(self) -> typing.Optional[jsii.Number]:
            '''The number of seconds to wait before retrying the connection to the IIS server if the connection is lost.

            Content is cached during this time, and the cache is delivered to the IIS server after the connection is re-established.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-connectionretryinterval
            '''
            result = self._values.get("connection_retry_interval")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def destination(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputLocationRefProperty"]]:
            '''The Smooth Streaming publish point on an IIS server.

            MediaLive acts as a "Push" encoder to IIS.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-destination
            '''
            result = self._values.get("destination")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputLocationRefProperty"]], result)

        @builtins.property
        def event_id(self) -> typing.Optional[builtins.str]:
            '''The Microsoft Smooth channel ID that is sent to the IIS server.

            Specify the ID only if eventIdMode is set to useConfigured.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-eventid
            '''
            result = self._values.get("event_id")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def event_id_mode(self) -> typing.Optional[builtins.str]:
            '''Specifies whether to send a channel ID to the IIS server.

            If no channel ID is sent and the same channel is used without changing the publishing point, clients might see cached video from the previous run. Options: - "useConfigured" - use the value provided in eventId - "useTimestamp" - generate and send a channel ID based on the current timestamp - "noEventId" - do not send a channel ID to the IIS server.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-eventidmode
            '''
            result = self._values.get("event_id_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def event_stop_behavior(self) -> typing.Optional[builtins.str]:
            '''When set to sendEos, sends an EOS signal to an IIS server when stopping the channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-eventstopbehavior
            '''
            result = self._values.get("event_stop_behavior")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def filecache_duration(self) -> typing.Optional[jsii.Number]:
            '''The size, in seconds, of the file cache for streaming outputs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-filecacheduration
            '''
            result = self._values.get("filecache_duration")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def fragment_length(self) -> typing.Optional[jsii.Number]:
            '''The length, in seconds, of mp4 fragments to generate.

            The fragment length must be compatible with GOP size and frame rate.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-fragmentlength
            '''
            result = self._values.get("fragment_length")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def input_loss_action(self) -> typing.Optional[builtins.str]:
            '''A parameter that controls output group behavior on an input loss.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-inputlossaction
            '''
            result = self._values.get("input_loss_action")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def num_retries(self) -> typing.Optional[jsii.Number]:
            '''The number of retry attempts.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-numretries
            '''
            result = self._values.get("num_retries")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def restart_delay(self) -> typing.Optional[jsii.Number]:
            '''The number of seconds before initiating a restart due to output failure, due to exhausting the numRetries on one segment, or exceeding filecacheDuration.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-restartdelay
            '''
            result = self._values.get("restart_delay")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def segmentation_mode(self) -> typing.Optional[builtins.str]:
            '''useInputSegmentation has been deprecated.

            The configured segment size is always used.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-segmentationmode
            '''
            result = self._values.get("segmentation_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def send_delay_ms(self) -> typing.Optional[jsii.Number]:
            '''The number of milliseconds to delay the output from the second pipeline.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-senddelayms
            '''
            result = self._values.get("send_delay_ms")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def sparse_track_type(self) -> typing.Optional[builtins.str]:
            '''If set to scte35, uses incoming SCTE-35 messages to generate a sparse track in this group of Microsoft Smooth outputs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-sparsetracktype
            '''
            result = self._values.get("sparse_track_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def stream_manifest_behavior(self) -> typing.Optional[builtins.str]:
            '''When set to send, sends a stream manifest so that the publishing point doesn't start until all streams start.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-streammanifestbehavior
            '''
            result = self._values.get("stream_manifest_behavior")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def timestamp_offset(self) -> typing.Optional[builtins.str]:
            '''The timestamp offset for the channel.

            Used only if timestampOffsetMode is set to useConfiguredOffset.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-timestampoffset
            '''
            result = self._values.get("timestamp_offset")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def timestamp_offset_mode(self) -> typing.Optional[builtins.str]:
            '''The type of timestamp date offset to use.

            - useEventStartDate: Use the date the channel was started as the offset - useConfiguredOffset: Use an explicitly configured date as the offset.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothgroupsettings.html#cfn-medialive-channel-mssmoothgroupsettings-timestampoffsetmode
            '''
            result = self._values.get("timestamp_offset_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MsSmoothGroupSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.MsSmoothOutputSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "h265_packaging_type": "h265PackagingType",
            "name_modifier": "nameModifier",
        },
    )
    class MsSmoothOutputSettingsProperty:
        def __init__(
            self,
            *,
            h265_packaging_type: typing.Optional[builtins.str] = None,
            name_modifier: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Configuration of a Microsoft Smooth output.

            The parent of this entity is OutputSettings.

            :param h265_packaging_type: Only applicable when this output is referencing an H.265 video description. Specifies whether MP4 segments should be packaged as HEV1 or HVC1.
            :param name_modifier: A string that is concatenated to the end of the destination file name. This is required for multiple outputs of the same type.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothoutputsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                ms_smooth_output_settings_property = medialive.CfnChannel.MsSmoothOutputSettingsProperty(
                    h265_packaging_type="h265PackagingType",
                    name_modifier="nameModifier"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__62d9d6b00924e5b0c0a069567902ed712a4ed9bcb201b0d8c484496e6218354a)
                check_type(argname="argument h265_packaging_type", value=h265_packaging_type, expected_type=type_hints["h265_packaging_type"])
                check_type(argname="argument name_modifier", value=name_modifier, expected_type=type_hints["name_modifier"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if h265_packaging_type is not None:
                self._values["h265_packaging_type"] = h265_packaging_type
            if name_modifier is not None:
                self._values["name_modifier"] = name_modifier

        @builtins.property
        def h265_packaging_type(self) -> typing.Optional[builtins.str]:
            '''Only applicable when this output is referencing an H.265 video description. Specifies whether MP4 segments should be packaged as HEV1 or HVC1.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothoutputsettings.html#cfn-medialive-channel-mssmoothoutputsettings-h265packagingtype
            '''
            result = self._values.get("h265_packaging_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def name_modifier(self) -> typing.Optional[builtins.str]:
            '''A string that is concatenated to the end of the destination file name.

            This is required for multiple outputs of the same type.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-mssmoothoutputsettings.html#cfn-medialive-channel-mssmoothoutputsettings-namemodifier
            '''
            result = self._values.get("name_modifier")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MsSmoothOutputSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.MultiplexGroupSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={},
    )
    class MultiplexGroupSettingsProperty:
        def __init__(self) -> None:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-multiplexgroupsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                multiplex_group_settings_property = medialive.CfnChannel.MultiplexGroupSettingsProperty()
            '''
            self._values: typing.Dict[builtins.str, typing.Any] = {}

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MultiplexGroupSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.MultiplexOutputSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"destination": "destination"},
    )
    class MultiplexOutputSettingsProperty:
        def __init__(
            self,
            *,
            destination: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.OutputLocationRefProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Configuration of a Multiplex output.

            The parent of this entity is OutputSettings.

            :param destination: Destination is a Multiplex.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-multiplexoutputsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                multiplex_output_settings_property = medialive.CfnChannel.MultiplexOutputSettingsProperty(
                    destination=medialive.CfnChannel.OutputLocationRefProperty(
                        destination_ref_id="destinationRefId"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__52ebebe942659e27c19c5486e05945da782f2c536964a95e7d5ae1b27ae2199b)
                check_type(argname="argument destination", value=destination, expected_type=type_hints["destination"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if destination is not None:
                self._values["destination"] = destination

        @builtins.property
        def destination(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputLocationRefProperty"]]:
            '''Destination is a Multiplex.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-multiplexoutputsettings.html#cfn-medialive-channel-multiplexoutputsettings-destination
            '''
            result = self._values.get("destination")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputLocationRefProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MultiplexOutputSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.MultiplexProgramChannelDestinationSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"multiplex_id": "multiplexId", "program_name": "programName"},
    )
    class MultiplexProgramChannelDestinationSettingsProperty:
        def __init__(
            self,
            *,
            multiplex_id: typing.Optional[builtins.str] = None,
            program_name: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Destination settings for a Multiplex output.

            The parent of this entity is OutputDestination.

            :param multiplex_id: The ID of the Multiplex that the encoder is providing output to. You do not need to specify the individual inputs to the Multiplex; MediaLive will handle the connection of the two MediaLive pipelines to the two Multiplex instances. The Multiplex must be in the same region as the Channel.
            :param program_name: The program name of the Multiplex program that the encoder is providing output to.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-multiplexprogramchanneldestinationsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                multiplex_program_channel_destination_settings_property = medialive.CfnChannel.MultiplexProgramChannelDestinationSettingsProperty(
                    multiplex_id="multiplexId",
                    program_name="programName"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__05e351a27b622d5f22d27d90943dfbe1eb20bb237f913c3a6d7e47c8bc4e8c22)
                check_type(argname="argument multiplex_id", value=multiplex_id, expected_type=type_hints["multiplex_id"])
                check_type(argname="argument program_name", value=program_name, expected_type=type_hints["program_name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if multiplex_id is not None:
                self._values["multiplex_id"] = multiplex_id
            if program_name is not None:
                self._values["program_name"] = program_name

        @builtins.property
        def multiplex_id(self) -> typing.Optional[builtins.str]:
            '''The ID of the Multiplex that the encoder is providing output to.

            You do not need to specify the individual inputs to the Multiplex; MediaLive will handle the connection of the two MediaLive pipelines to the two Multiplex instances.
            The Multiplex must be in the same region as the Channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-multiplexprogramchanneldestinationsettings.html#cfn-medialive-channel-multiplexprogramchanneldestinationsettings-multiplexid
            '''
            result = self._values.get("multiplex_id")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def program_name(self) -> typing.Optional[builtins.str]:
            '''The program name of the Multiplex program that the encoder is providing output to.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-multiplexprogramchanneldestinationsettings.html#cfn-medialive-channel-multiplexprogramchanneldestinationsettings-programname
            '''
            result = self._values.get("program_name")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MultiplexProgramChannelDestinationSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.NetworkInputSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "hls_input_settings": "hlsInputSettings",
            "server_validation": "serverValidation",
        },
    )
    class NetworkInputSettingsProperty:
        def __init__(
            self,
            *,
            hls_input_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.HlsInputSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            server_validation: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Information about how to connect to the upstream system.

            The parent of this entity is InputSettings.

            :param hls_input_settings: Information about how to connect to the upstream system.
            :param server_validation: Checks HTTPS server certificates. When set to checkCryptographyOnly, cryptography in the certificate is checked, but not the server's name. Certain subdomains (notably S3 buckets that use dots in the bucket name) don't strictly match the corresponding certificate's wildcard pattern and would otherwise cause the channel to error. This setting is ignored for protocols that do not use HTTPS.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-networkinputsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                network_input_settings_property = medialive.CfnChannel.NetworkInputSettingsProperty(
                    hls_input_settings=medialive.CfnChannel.HlsInputSettingsProperty(
                        bandwidth=123,
                        buffer_segments=123,
                        retries=123,
                        retry_interval=123,
                        scte35_source="scte35Source"
                    ),
                    server_validation="serverValidation"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ab23db986deaa43367c603c9618f01cd28c250f8c84fe85f51bb50441ecc1422)
                check_type(argname="argument hls_input_settings", value=hls_input_settings, expected_type=type_hints["hls_input_settings"])
                check_type(argname="argument server_validation", value=server_validation, expected_type=type_hints["server_validation"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if hls_input_settings is not None:
                self._values["hls_input_settings"] = hls_input_settings
            if server_validation is not None:
                self._values["server_validation"] = server_validation

        @builtins.property
        def hls_input_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HlsInputSettingsProperty"]]:
            '''Information about how to connect to the upstream system.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-networkinputsettings.html#cfn-medialive-channel-networkinputsettings-hlsinputsettings
            '''
            result = self._values.get("hls_input_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HlsInputSettingsProperty"]], result)

        @builtins.property
        def server_validation(self) -> typing.Optional[builtins.str]:
            '''Checks HTTPS server certificates.

            When set to checkCryptographyOnly, cryptography in the certificate is checked, but not the server's name. Certain subdomains (notably S3 buckets that use dots in the bucket name) don't strictly match the corresponding certificate's wildcard pattern and would otherwise cause the channel to error. This setting is ignored for protocols that do not use HTTPS.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-networkinputsettings.html#cfn-medialive-channel-networkinputsettings-servervalidation
            '''
            result = self._values.get("server_validation")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "NetworkInputSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.NielsenCBETProperty",
        jsii_struct_bases=[],
        name_mapping={
            "cbet_check_digit_string": "cbetCheckDigitString",
            "cbet_stepaside": "cbetStepaside",
            "csid": "csid",
        },
    )
    class NielsenCBETProperty:
        def __init__(
            self,
            *,
            cbet_check_digit_string: typing.Optional[builtins.str] = None,
            cbet_stepaside: typing.Optional[builtins.str] = None,
            csid: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Complete these fields only if you want to insert watermarks of type Nielsen CBET.

            The parent of this entity is NielsenWatermarksSettings

            :param cbet_check_digit_string: Enter the CBET check digits to use in the watermark.
            :param cbet_stepaside: Determines the method of CBET insertion mode when prior encoding is detected on the same layer.
            :param csid: Enter the CBET Source ID (CSID) to use in the watermark.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsencbet.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                nielsen_cBETProperty = medialive.CfnChannel.NielsenCBETProperty(
                    cbet_check_digit_string="cbetCheckDigitString",
                    cbet_stepaside="cbetStepaside",
                    csid="csid"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__b4b254a1acda7d40741901639caf488ade8cf7242ee52d2b2836be1dca68b0e7)
                check_type(argname="argument cbet_check_digit_string", value=cbet_check_digit_string, expected_type=type_hints["cbet_check_digit_string"])
                check_type(argname="argument cbet_stepaside", value=cbet_stepaside, expected_type=type_hints["cbet_stepaside"])
                check_type(argname="argument csid", value=csid, expected_type=type_hints["csid"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if cbet_check_digit_string is not None:
                self._values["cbet_check_digit_string"] = cbet_check_digit_string
            if cbet_stepaside is not None:
                self._values["cbet_stepaside"] = cbet_stepaside
            if csid is not None:
                self._values["csid"] = csid

        @builtins.property
        def cbet_check_digit_string(self) -> typing.Optional[builtins.str]:
            '''Enter the CBET check digits to use in the watermark.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsencbet.html#cfn-medialive-channel-nielsencbet-cbetcheckdigitstring
            '''
            result = self._values.get("cbet_check_digit_string")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def cbet_stepaside(self) -> typing.Optional[builtins.str]:
            '''Determines the method of CBET insertion mode when prior encoding is detected on the same layer.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsencbet.html#cfn-medialive-channel-nielsencbet-cbetstepaside
            '''
            result = self._values.get("cbet_stepaside")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def csid(self) -> typing.Optional[builtins.str]:
            '''Enter the CBET Source ID (CSID) to use in the watermark.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsencbet.html#cfn-medialive-channel-nielsencbet-csid
            '''
            result = self._values.get("csid")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "NielsenCBETProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.NielsenConfigurationProperty",
        jsii_struct_bases=[],
        name_mapping={
            "distributor_id": "distributorId",
            "nielsen_pcm_to_id3_tagging": "nielsenPcmToId3Tagging",
        },
    )
    class NielsenConfigurationProperty:
        def __init__(
            self,
            *,
            distributor_id: typing.Optional[builtins.str] = None,
            nielsen_pcm_to_id3_tagging: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The settings to configure Nielsen watermarks.

            The parent of this entity is EncoderSettings.

            :param distributor_id: Enter the Distributor ID assigned to your organization by Nielsen.
            :param nielsen_pcm_to_id3_tagging: Enables Nielsen PCM to ID3 tagging.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsenconfiguration.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                nielsen_configuration_property = medialive.CfnChannel.NielsenConfigurationProperty(
                    distributor_id="distributorId",
                    nielsen_pcm_to_id3_tagging="nielsenPcmToId3Tagging"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__f3e77cb7fcad1c5904be396c9efa5af888056641c091eed6de9dd32d0f450500)
                check_type(argname="argument distributor_id", value=distributor_id, expected_type=type_hints["distributor_id"])
                check_type(argname="argument nielsen_pcm_to_id3_tagging", value=nielsen_pcm_to_id3_tagging, expected_type=type_hints["nielsen_pcm_to_id3_tagging"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if distributor_id is not None:
                self._values["distributor_id"] = distributor_id
            if nielsen_pcm_to_id3_tagging is not None:
                self._values["nielsen_pcm_to_id3_tagging"] = nielsen_pcm_to_id3_tagging

        @builtins.property
        def distributor_id(self) -> typing.Optional[builtins.str]:
            '''Enter the Distributor ID assigned to your organization by Nielsen.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsenconfiguration.html#cfn-medialive-channel-nielsenconfiguration-distributorid
            '''
            result = self._values.get("distributor_id")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def nielsen_pcm_to_id3_tagging(self) -> typing.Optional[builtins.str]:
            '''Enables Nielsen PCM to ID3 tagging.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsenconfiguration.html#cfn-medialive-channel-nielsenconfiguration-nielsenpcmtoid3tagging
            '''
            result = self._values.get("nielsen_pcm_to_id3_tagging")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "NielsenConfigurationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.NielsenNaesIiNwProperty",
        jsii_struct_bases=[],
        name_mapping={
            "check_digit_string": "checkDigitString",
            "sid": "sid",
            "timezone": "timezone",
        },
    )
    class NielsenNaesIiNwProperty:
        def __init__(
            self,
            *,
            check_digit_string: typing.Optional[builtins.str] = None,
            sid: typing.Optional[jsii.Number] = None,
            timezone: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Complete these fields only if you want to insert watermarks of type Nielsen NAES II (N2) and Nielsen NAES VI (NW).

            The parent of this entity is NielsenWatermarksSettings.

            :param check_digit_string: Enter the check digit string for the watermark.
            :param sid: Enter the Nielsen Source ID (SID) to include in the watermark.
            :param timezone: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsennaesiinw.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                nielsen_naes_ii_nw_property = medialive.CfnChannel.NielsenNaesIiNwProperty(
                    check_digit_string="checkDigitString",
                    sid=123,
                    timezone="timezone"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__5486358a38d9072aa9cea1007a7ed50c25e020f301a9f22ca820fa859fbd02b5)
                check_type(argname="argument check_digit_string", value=check_digit_string, expected_type=type_hints["check_digit_string"])
                check_type(argname="argument sid", value=sid, expected_type=type_hints["sid"])
                check_type(argname="argument timezone", value=timezone, expected_type=type_hints["timezone"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if check_digit_string is not None:
                self._values["check_digit_string"] = check_digit_string
            if sid is not None:
                self._values["sid"] = sid
            if timezone is not None:
                self._values["timezone"] = timezone

        @builtins.property
        def check_digit_string(self) -> typing.Optional[builtins.str]:
            '''Enter the check digit string for the watermark.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsennaesiinw.html#cfn-medialive-channel-nielsennaesiinw-checkdigitstring
            '''
            result = self._values.get("check_digit_string")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def sid(self) -> typing.Optional[jsii.Number]:
            '''Enter the Nielsen Source ID (SID) to include in the watermark.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsennaesiinw.html#cfn-medialive-channel-nielsennaesiinw-sid
            '''
            result = self._values.get("sid")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def timezone(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsennaesiinw.html#cfn-medialive-channel-nielsennaesiinw-timezone
            '''
            result = self._values.get("timezone")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "NielsenNaesIiNwProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.NielsenWatermarksSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "nielsen_cbet_settings": "nielsenCbetSettings",
            "nielsen_distribution_type": "nielsenDistributionType",
            "nielsen_naes_ii_nw_settings": "nielsenNaesIiNwSettings",
        },
    )
    class NielsenWatermarksSettingsProperty:
        def __init__(
            self,
            *,
            nielsen_cbet_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.NielsenCBETProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            nielsen_distribution_type: typing.Optional[builtins.str] = None,
            nielsen_naes_ii_nw_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.NielsenNaesIiNwProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Settings to configure Nielsen Watermarks in the audio encode.

            The parent of this entity is AudioWatermarkSettings.

            :param nielsen_cbet_settings: Complete these fields only if you want to insert watermarks of type Nielsen CBET.
            :param nielsen_distribution_type: Choose the distribution types that you want to assign to the watermarks: - PROGRAM_CONTENT - FINAL_DISTRIBUTOR.
            :param nielsen_naes_ii_nw_settings: Complete these fields only if you want to insert watermarks of type Nielsen NAES II (N2) and Nielsen NAES VI (NW).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsenwatermarkssettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                nielsen_watermarks_settings_property = medialive.CfnChannel.NielsenWatermarksSettingsProperty(
                    nielsen_cbet_settings=medialive.CfnChannel.NielsenCBETProperty(
                        cbet_check_digit_string="cbetCheckDigitString",
                        cbet_stepaside="cbetStepaside",
                        csid="csid"
                    ),
                    nielsen_distribution_type="nielsenDistributionType",
                    nielsen_naes_ii_nw_settings=medialive.CfnChannel.NielsenNaesIiNwProperty(
                        check_digit_string="checkDigitString",
                        sid=123,
                        timezone="timezone"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__9e5624fe566342243b7ed3e5c7b82883302c5f225edc78912ef46db7518d8a35)
                check_type(argname="argument nielsen_cbet_settings", value=nielsen_cbet_settings, expected_type=type_hints["nielsen_cbet_settings"])
                check_type(argname="argument nielsen_distribution_type", value=nielsen_distribution_type, expected_type=type_hints["nielsen_distribution_type"])
                check_type(argname="argument nielsen_naes_ii_nw_settings", value=nielsen_naes_ii_nw_settings, expected_type=type_hints["nielsen_naes_ii_nw_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if nielsen_cbet_settings is not None:
                self._values["nielsen_cbet_settings"] = nielsen_cbet_settings
            if nielsen_distribution_type is not None:
                self._values["nielsen_distribution_type"] = nielsen_distribution_type
            if nielsen_naes_ii_nw_settings is not None:
                self._values["nielsen_naes_ii_nw_settings"] = nielsen_naes_ii_nw_settings

        @builtins.property
        def nielsen_cbet_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.NielsenCBETProperty"]]:
            '''Complete these fields only if you want to insert watermarks of type Nielsen CBET.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsenwatermarkssettings.html#cfn-medialive-channel-nielsenwatermarkssettings-nielsencbetsettings
            '''
            result = self._values.get("nielsen_cbet_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.NielsenCBETProperty"]], result)

        @builtins.property
        def nielsen_distribution_type(self) -> typing.Optional[builtins.str]:
            '''Choose the distribution types that you want to assign to the watermarks: - PROGRAM_CONTENT - FINAL_DISTRIBUTOR.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsenwatermarkssettings.html#cfn-medialive-channel-nielsenwatermarkssettings-nielsendistributiontype
            '''
            result = self._values.get("nielsen_distribution_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def nielsen_naes_ii_nw_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.NielsenNaesIiNwProperty"]]:
            '''Complete these fields only if you want to insert watermarks of type Nielsen NAES II (N2) and Nielsen NAES VI (NW).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-nielsenwatermarkssettings.html#cfn-medialive-channel-nielsenwatermarkssettings-nielsennaesiinwsettings
            '''
            result = self._values.get("nielsen_naes_ii_nw_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.NielsenNaesIiNwProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "NielsenWatermarksSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.OutputDestinationProperty",
        jsii_struct_bases=[],
        name_mapping={
            "id": "id",
            "media_package_settings": "mediaPackageSettings",
            "multiplex_settings": "multiplexSettings",
            "settings": "settings",
        },
    )
    class OutputDestinationProperty:
        def __init__(
            self,
            *,
            id: typing.Optional[builtins.str] = None,
            media_package_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.MediaPackageOutputDestinationSettingsProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            multiplex_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.MultiplexProgramChannelDestinationSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.OutputDestinationSettingsProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        ) -> None:
            '''Configuration information for an output.

            This entity is at the top level in the channel.

            :param id: The ID for this destination.
            :param media_package_settings: The destination settings for a MediaPackage output.
            :param multiplex_settings: Destination settings for a Multiplex output; one destination for both encoders.
            :param settings: The destination settings for an output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestination.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                output_destination_property = medialive.CfnChannel.OutputDestinationProperty(
                    id="id",
                    media_package_settings=[medialive.CfnChannel.MediaPackageOutputDestinationSettingsProperty(
                        channel_id="channelId"
                    )],
                    multiplex_settings=medialive.CfnChannel.MultiplexProgramChannelDestinationSettingsProperty(
                        multiplex_id="multiplexId",
                        program_name="programName"
                    ),
                    settings=[medialive.CfnChannel.OutputDestinationSettingsProperty(
                        password_param="passwordParam",
                        stream_name="streamName",
                        url="url",
                        username="username"
                    )]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__d1c3f4cbc44fec2f5cf6dcc1097499d83d328f8fd1f15b8dd6ce6bc45153265a)
                check_type(argname="argument id", value=id, expected_type=type_hints["id"])
                check_type(argname="argument media_package_settings", value=media_package_settings, expected_type=type_hints["media_package_settings"])
                check_type(argname="argument multiplex_settings", value=multiplex_settings, expected_type=type_hints["multiplex_settings"])
                check_type(argname="argument settings", value=settings, expected_type=type_hints["settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if id is not None:
                self._values["id"] = id
            if media_package_settings is not None:
                self._values["media_package_settings"] = media_package_settings
            if multiplex_settings is not None:
                self._values["multiplex_settings"] = multiplex_settings
            if settings is not None:
                self._values["settings"] = settings

        @builtins.property
        def id(self) -> typing.Optional[builtins.str]:
            '''The ID for this destination.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestination.html#cfn-medialive-channel-outputdestination-id
            '''
            result = self._values.get("id")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def media_package_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.MediaPackageOutputDestinationSettingsProperty"]]]]:
            '''The destination settings for a MediaPackage output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestination.html#cfn-medialive-channel-outputdestination-mediapackagesettings
            '''
            result = self._values.get("media_package_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.MediaPackageOutputDestinationSettingsProperty"]]]], result)

        @builtins.property
        def multiplex_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MultiplexProgramChannelDestinationSettingsProperty"]]:
            '''Destination settings for a Multiplex output;

            one destination for both encoders.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestination.html#cfn-medialive-channel-outputdestination-multiplexsettings
            '''
            result = self._values.get("multiplex_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MultiplexProgramChannelDestinationSettingsProperty"]], result)

        @builtins.property
        def settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputDestinationSettingsProperty"]]]]:
            '''The destination settings for an output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestination.html#cfn-medialive-channel-outputdestination-settings
            '''
            result = self._values.get("settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputDestinationSettingsProperty"]]]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "OutputDestinationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.OutputDestinationSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "password_param": "passwordParam",
            "stream_name": "streamName",
            "url": "url",
            "username": "username",
        },
    )
    class OutputDestinationSettingsProperty:
        def __init__(
            self,
            *,
            password_param: typing.Optional[builtins.str] = None,
            stream_name: typing.Optional[builtins.str] = None,
            url: typing.Optional[builtins.str] = None,
            username: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The configuration information for this output.

            The parent of this entity is OutputDestination.

            :param password_param: The password parameter that holds the password for accessing the downstream system. This password parameter applies only if the downstream system requires credentials.
            :param stream_name: The stream name for the content. This applies only to RTMP outputs.
            :param url: The URL for the destination.
            :param username: The user name to connect to the downstream system. This applies only if the downstream system requires credentials.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestinationsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                output_destination_settings_property = medialive.CfnChannel.OutputDestinationSettingsProperty(
                    password_param="passwordParam",
                    stream_name="streamName",
                    url="url",
                    username="username"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__7a269efb72488b0dcdc8c596268ad0ed5fc30128a0e556b9b5dd12a4794b0395)
                check_type(argname="argument password_param", value=password_param, expected_type=type_hints["password_param"])
                check_type(argname="argument stream_name", value=stream_name, expected_type=type_hints["stream_name"])
                check_type(argname="argument url", value=url, expected_type=type_hints["url"])
                check_type(argname="argument username", value=username, expected_type=type_hints["username"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if password_param is not None:
                self._values["password_param"] = password_param
            if stream_name is not None:
                self._values["stream_name"] = stream_name
            if url is not None:
                self._values["url"] = url
            if username is not None:
                self._values["username"] = username

        @builtins.property
        def password_param(self) -> typing.Optional[builtins.str]:
            '''The password parameter that holds the password for accessing the downstream system.

            This password parameter applies only if the downstream system requires credentials.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestinationsettings.html#cfn-medialive-channel-outputdestinationsettings-passwordparam
            '''
            result = self._values.get("password_param")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def stream_name(self) -> typing.Optional[builtins.str]:
            '''The stream name for the content.

            This applies only to RTMP outputs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestinationsettings.html#cfn-medialive-channel-outputdestinationsettings-streamname
            '''
            result = self._values.get("stream_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def url(self) -> typing.Optional[builtins.str]:
            '''The URL for the destination.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestinationsettings.html#cfn-medialive-channel-outputdestinationsettings-url
            '''
            result = self._values.get("url")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def username(self) -> typing.Optional[builtins.str]:
            '''The user name to connect to the downstream system.

            This applies only if the downstream system requires credentials.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputdestinationsettings.html#cfn-medialive-channel-outputdestinationsettings-username
            '''
            result = self._values.get("username")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "OutputDestinationSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.OutputGroupProperty",
        jsii_struct_bases=[],
        name_mapping={
            "name": "name",
            "output_group_settings": "outputGroupSettings",
            "outputs": "outputs",
        },
    )
    class OutputGroupProperty:
        def __init__(
            self,
            *,
            name: typing.Optional[builtins.str] = None,
            output_group_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.OutputGroupSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            outputs: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.OutputProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        ) -> None:
            '''The settings for one output group.

            The parent of this entity is EncoderSettings.

            :param name: A custom output group name that you can optionally define. Only letters, numbers, and the underscore character are allowed. The maximum length is 32 characters.
            :param output_group_settings: The settings associated with the output group.
            :param outputs: The settings for the outputs in the output group.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroup.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                output_group_property = medialive.CfnChannel.OutputGroupProperty(
                    name="name",
                    output_group_settings=medialive.CfnChannel.OutputGroupSettingsProperty(
                        archive_group_settings=medialive.CfnChannel.ArchiveGroupSettingsProperty(
                            archive_cdn_settings=medialive.CfnChannel.ArchiveCdnSettingsProperty(
                                archive_s3_settings=medialive.CfnChannel.ArchiveS3SettingsProperty(
                                    canned_acl="cannedAcl"
                                )
                            ),
                            destination=medialive.CfnChannel.OutputLocationRefProperty(
                                destination_ref_id="destinationRefId"
                            ),
                            rollover_interval=123
                        ),
                        frame_capture_group_settings=medialive.CfnChannel.FrameCaptureGroupSettingsProperty(
                            destination=medialive.CfnChannel.OutputLocationRefProperty(
                                destination_ref_id="destinationRefId"
                            ),
                            frame_capture_cdn_settings=medialive.CfnChannel.FrameCaptureCdnSettingsProperty(
                                frame_capture_s3_settings=medialive.CfnChannel.FrameCaptureS3SettingsProperty(
                                    canned_acl="cannedAcl"
                                )
                            )
                        ),
                        hls_group_settings=medialive.CfnChannel.HlsGroupSettingsProperty(
                            ad_markers=["adMarkers"],
                            base_url_content="baseUrlContent",
                            base_url_content1="baseUrlContent1",
                            base_url_manifest="baseUrlManifest",
                            base_url_manifest1="baseUrlManifest1",
                            caption_language_mappings=[medialive.CfnChannel.CaptionLanguageMappingProperty(
                                caption_channel=123,
                                language_code="languageCode",
                                language_description="languageDescription"
                            )],
                            caption_language_setting="captionLanguageSetting",
                            client_cache="clientCache",
                            codec_specification="codecSpecification",
                            constant_iv="constantIv",
                            destination=medialive.CfnChannel.OutputLocationRefProperty(
                                destination_ref_id="destinationRefId"
                            ),
                            directory_structure="directoryStructure",
                            discontinuity_tags="discontinuityTags",
                            encryption_type="encryptionType",
                            hls_cdn_settings=medialive.CfnChannel.HlsCdnSettingsProperty(
                                hls_akamai_settings=medialive.CfnChannel.HlsAkamaiSettingsProperty(
                                    connection_retry_interval=123,
                                    filecache_duration=123,
                                    http_transfer_mode="httpTransferMode",
                                    num_retries=123,
                                    restart_delay=123,
                                    salt="salt",
                                    token="token"
                                ),
                                hls_basic_put_settings=medialive.CfnChannel.HlsBasicPutSettingsProperty(
                                    connection_retry_interval=123,
                                    filecache_duration=123,
                                    num_retries=123,
                                    restart_delay=123
                                ),
                                hls_media_store_settings=medialive.CfnChannel.HlsMediaStoreSettingsProperty(
                                    connection_retry_interval=123,
                                    filecache_duration=123,
                                    media_store_storage_class="mediaStoreStorageClass",
                                    num_retries=123,
                                    restart_delay=123
                                ),
                                hls_s3_settings=medialive.CfnChannel.HlsS3SettingsProperty(
                                    canned_acl="cannedAcl"
                                ),
                                hls_webdav_settings=medialive.CfnChannel.HlsWebdavSettingsProperty(
                                    connection_retry_interval=123,
                                    filecache_duration=123,
                                    http_transfer_mode="httpTransferMode",
                                    num_retries=123,
                                    restart_delay=123
                                )
                            ),
                            hls_id3_segment_tagging="hlsId3SegmentTagging",
                            i_frame_only_playlists="iFrameOnlyPlaylists",
                            incomplete_segment_behavior="incompleteSegmentBehavior",
                            index_nSegments=123,
                            input_loss_action="inputLossAction",
                            iv_in_manifest="ivInManifest",
                            iv_source="ivSource",
                            keep_segments=123,
                            key_format="keyFormat",
                            key_format_versions="keyFormatVersions",
                            key_provider_settings=medialive.CfnChannel.KeyProviderSettingsProperty(
                                static_key_settings=medialive.CfnChannel.StaticKeySettingsProperty(
                                    key_provider_server=medialive.CfnChannel.InputLocationProperty(
                                        password_param="passwordParam",
                                        uri="uri",
                                        username="username"
                                    ),
                                    static_key_value="staticKeyValue"
                                )
                            ),
                            manifest_compression="manifestCompression",
                            manifest_duration_format="manifestDurationFormat",
                            min_segment_length=123,
                            mode="mode",
                            output_selection="outputSelection",
                            program_date_time="programDateTime",
                            program_date_time_clock="programDateTimeClock",
                            program_date_time_period=123,
                            redundant_manifest="redundantManifest",
                            segmentation_mode="segmentationMode",
                            segment_length=123,
                            segments_per_subdirectory=123,
                            stream_inf_resolution="streamInfResolution",
                            timed_metadata_id3_frame="timedMetadataId3Frame",
                            timed_metadata_id3_period=123,
                            timestamp_delta_milliseconds=123,
                            ts_file_mode="tsFileMode"
                        ),
                        media_package_group_settings=medialive.CfnChannel.MediaPackageGroupSettingsProperty(
                            destination=medialive.CfnChannel.OutputLocationRefProperty(
                                destination_ref_id="destinationRefId"
                            )
                        ),
                        ms_smooth_group_settings=medialive.CfnChannel.MsSmoothGroupSettingsProperty(
                            acquisition_point_id="acquisitionPointId",
                            audio_only_timecode_control="audioOnlyTimecodeControl",
                            certificate_mode="certificateMode",
                            connection_retry_interval=123,
                            destination=medialive.CfnChannel.OutputLocationRefProperty(
                                destination_ref_id="destinationRefId"
                            ),
                            event_id="eventId",
                            event_id_mode="eventIdMode",
                            event_stop_behavior="eventStopBehavior",
                            filecache_duration=123,
                            fragment_length=123,
                            input_loss_action="inputLossAction",
                            num_retries=123,
                            restart_delay=123,
                            segmentation_mode="segmentationMode",
                            send_delay_ms=123,
                            sparse_track_type="sparseTrackType",
                            stream_manifest_behavior="streamManifestBehavior",
                            timestamp_offset="timestampOffset",
                            timestamp_offset_mode="timestampOffsetMode"
                        ),
                        multiplex_group_settings=medialive.CfnChannel.MultiplexGroupSettingsProperty(),
                        rtmp_group_settings=medialive.CfnChannel.RtmpGroupSettingsProperty(
                            ad_markers=["adMarkers"],
                            authentication_scheme="authenticationScheme",
                            cache_full_behavior="cacheFullBehavior",
                            cache_length=123,
                            caption_data="captionData",
                            include_filler_nal_units="includeFillerNalUnits",
                            input_loss_action="inputLossAction",
                            restart_delay=123
                        ),
                        udp_group_settings=medialive.CfnChannel.UdpGroupSettingsProperty(
                            input_loss_action="inputLossAction",
                            timed_metadata_id3_frame="timedMetadataId3Frame",
                            timed_metadata_id3_period=123
                        )
                    ),
                    outputs=[medialive.CfnChannel.OutputProperty(
                        audio_description_names=["audioDescriptionNames"],
                        caption_description_names=["captionDescriptionNames"],
                        output_name="outputName",
                        output_settings=medialive.CfnChannel.OutputSettingsProperty(
                            archive_output_settings=medialive.CfnChannel.ArchiveOutputSettingsProperty(
                                container_settings=medialive.CfnChannel.ArchiveContainerSettingsProperty(
                                    m2_ts_settings=medialive.CfnChannel.M2tsSettingsProperty(
                                        absent_input_audio_behavior="absentInputAudioBehavior",
                                        arib="arib",
                                        arib_captions_pid="aribCaptionsPid",
                                        arib_captions_pid_control="aribCaptionsPidControl",
                                        audio_buffer_model="audioBufferModel",
                                        audio_frames_per_pes=123,
                                        audio_pids="audioPids",
                                        audio_stream_type="audioStreamType",
                                        bitrate=123,
                                        buffer_model="bufferModel",
                                        cc_descriptor="ccDescriptor",
                                        dvb_nit_settings=medialive.CfnChannel.DvbNitSettingsProperty(
                                            network_id=123,
                                            network_name="networkName",
                                            rep_interval=123
                                        ),
                                        dvb_sdt_settings=medialive.CfnChannel.DvbSdtSettingsProperty(
                                            output_sdt="outputSdt",
                                            rep_interval=123,
                                            service_name="serviceName",
                                            service_provider_name="serviceProviderName"
                                        ),
                                        dvb_sub_pids="dvbSubPids",
                                        dvb_tdt_settings=medialive.CfnChannel.DvbTdtSettingsProperty(
                                            rep_interval=123
                                        ),
                                        dvb_teletext_pid="dvbTeletextPid",
                                        ebif="ebif",
                                        ebp_audio_interval="ebpAudioInterval",
                                        ebp_lookahead_ms=123,
                                        ebp_placement="ebpPlacement",
                                        ecm_pid="ecmPid",
                                        es_rate_in_pes="esRateInPes",
                                        etv_platform_pid="etvPlatformPid",
                                        etv_signal_pid="etvSignalPid",
                                        fragment_time=123,
                                        klv="klv",
                                        klv_data_pids="klvDataPids",
                                        nielsen_id3_behavior="nielsenId3Behavior",
                                        null_packet_bitrate=123,
                                        pat_interval=123,
                                        pcr_control="pcrControl",
                                        pcr_period=123,
                                        pcr_pid="pcrPid",
                                        pmt_interval=123,
                                        pmt_pid="pmtPid",
                                        program_num=123,
                                        rate_mode="rateMode",
                                        scte27_pids="scte27Pids",
                                        scte35_control="scte35Control",
                                        scte35_pid="scte35Pid",
                                        scte35_preroll_pullup_milliseconds=123,
                                        segmentation_markers="segmentationMarkers",
                                        segmentation_style="segmentationStyle",
                                        segmentation_time=123,
                                        timed_metadata_behavior="timedMetadataBehavior",
                                        timed_metadata_pid="timedMetadataPid",
                                        transport_stream_id=123,
                                        video_pid="videoPid"
                                    ),
                                    raw_settings=medialive.CfnChannel.RawSettingsProperty()
                                ),
                                extension="extension",
                                name_modifier="nameModifier"
                            ),
                            frame_capture_output_settings=medialive.CfnChannel.FrameCaptureOutputSettingsProperty(
                                name_modifier="nameModifier"
                            ),
                            hls_output_settings=medialive.CfnChannel.HlsOutputSettingsProperty(
                                h265_packaging_type="h265PackagingType",
                                hls_settings=medialive.CfnChannel.HlsSettingsProperty(
                                    audio_only_hls_settings=medialive.CfnChannel.AudioOnlyHlsSettingsProperty(
                                        audio_group_id="audioGroupId",
                                        audio_only_image=medialive.CfnChannel.InputLocationProperty(
                                            password_param="passwordParam",
                                            uri="uri",
                                            username="username"
                                        ),
                                        audio_track_type="audioTrackType",
                                        segment_type="segmentType"
                                    ),
                                    fmp4_hls_settings=medialive.CfnChannel.Fmp4HlsSettingsProperty(
                                        audio_rendition_sets="audioRenditionSets",
                                        nielsen_id3_behavior="nielsenId3Behavior",
                                        timed_metadata_behavior="timedMetadataBehavior"
                                    ),
                                    frame_capture_hls_settings=medialive.CfnChannel.FrameCaptureHlsSettingsProperty(),
                                    standard_hls_settings=medialive.CfnChannel.StandardHlsSettingsProperty(
                                        audio_rendition_sets="audioRenditionSets",
                                        m3_u8_settings=medialive.CfnChannel.M3u8SettingsProperty(
                                            audio_frames_per_pes=123,
                                            audio_pids="audioPids",
                                            ecm_pid="ecmPid",
                                            klv_behavior="klvBehavior",
                                            klv_data_pids="klvDataPids",
                                            nielsen_id3_behavior="nielsenId3Behavior",
                                            pat_interval=123,
                                            pcr_control="pcrControl",
                                            pcr_period=123,
                                            pcr_pid="pcrPid",
                                            pmt_interval=123,
                                            pmt_pid="pmtPid",
                                            program_num=123,
                                            scte35_behavior="scte35Behavior",
                                            scte35_pid="scte35Pid",
                                            timed_metadata_behavior="timedMetadataBehavior",
                                            timed_metadata_pid="timedMetadataPid",
                                            transport_stream_id=123,
                                            video_pid="videoPid"
                                        )
                                    )
                                ),
                                name_modifier="nameModifier",
                                segment_modifier="segmentModifier"
                            ),
                            media_package_output_settings=medialive.CfnChannel.MediaPackageOutputSettingsProperty(),
                            ms_smooth_output_settings=medialive.CfnChannel.MsSmoothOutputSettingsProperty(
                                h265_packaging_type="h265PackagingType",
                                name_modifier="nameModifier"
                            ),
                            multiplex_output_settings=medialive.CfnChannel.MultiplexOutputSettingsProperty(
                                destination=medialive.CfnChannel.OutputLocationRefProperty(
                                    destination_ref_id="destinationRefId"
                                )
                            ),
                            rtmp_output_settings=medialive.CfnChannel.RtmpOutputSettingsProperty(
                                certificate_mode="certificateMode",
                                connection_retry_interval=123,
                                destination=medialive.CfnChannel.OutputLocationRefProperty(
                                    destination_ref_id="destinationRefId"
                                ),
                                num_retries=123
                            ),
                            udp_output_settings=medialive.CfnChannel.UdpOutputSettingsProperty(
                                buffer_msec=123,
                                container_settings=medialive.CfnChannel.UdpContainerSettingsProperty(
                                    m2_ts_settings=medialive.CfnChannel.M2tsSettingsProperty(
                                        absent_input_audio_behavior="absentInputAudioBehavior",
                                        arib="arib",
                                        arib_captions_pid="aribCaptionsPid",
                                        arib_captions_pid_control="aribCaptionsPidControl",
                                        audio_buffer_model="audioBufferModel",
                                        audio_frames_per_pes=123,
                                        audio_pids="audioPids",
                                        audio_stream_type="audioStreamType",
                                        bitrate=123,
                                        buffer_model="bufferModel",
                                        cc_descriptor="ccDescriptor",
                                        dvb_nit_settings=medialive.CfnChannel.DvbNitSettingsProperty(
                                            network_id=123,
                                            network_name="networkName",
                                            rep_interval=123
                                        ),
                                        dvb_sdt_settings=medialive.CfnChannel.DvbSdtSettingsProperty(
                                            output_sdt="outputSdt",
                                            rep_interval=123,
                                            service_name="serviceName",
                                            service_provider_name="serviceProviderName"
                                        ),
                                        dvb_sub_pids="dvbSubPids",
                                        dvb_tdt_settings=medialive.CfnChannel.DvbTdtSettingsProperty(
                                            rep_interval=123
                                        ),
                                        dvb_teletext_pid="dvbTeletextPid",
                                        ebif="ebif",
                                        ebp_audio_interval="ebpAudioInterval",
                                        ebp_lookahead_ms=123,
                                        ebp_placement="ebpPlacement",
                                        ecm_pid="ecmPid",
                                        es_rate_in_pes="esRateInPes",
                                        etv_platform_pid="etvPlatformPid",
                                        etv_signal_pid="etvSignalPid",
                                        fragment_time=123,
                                        klv="klv",
                                        klv_data_pids="klvDataPids",
                                        nielsen_id3_behavior="nielsenId3Behavior",
                                        null_packet_bitrate=123,
                                        pat_interval=123,
                                        pcr_control="pcrControl",
                                        pcr_period=123,
                                        pcr_pid="pcrPid",
                                        pmt_interval=123,
                                        pmt_pid="pmtPid",
                                        program_num=123,
                                        rate_mode="rateMode",
                                        scte27_pids="scte27Pids",
                                        scte35_control="scte35Control",
                                        scte35_pid="scte35Pid",
                                        scte35_preroll_pullup_milliseconds=123,
                                        segmentation_markers="segmentationMarkers",
                                        segmentation_style="segmentationStyle",
                                        segmentation_time=123,
                                        timed_metadata_behavior="timedMetadataBehavior",
                                        timed_metadata_pid="timedMetadataPid",
                                        transport_stream_id=123,
                                        video_pid="videoPid"
                                    )
                                ),
                                destination=medialive.CfnChannel.OutputLocationRefProperty(
                                    destination_ref_id="destinationRefId"
                                ),
                                fec_output_settings=medialive.CfnChannel.FecOutputSettingsProperty(
                                    column_depth=123,
                                    include_fec="includeFec",
                                    row_length=123
                                )
                            )
                        ),
                        video_description_name="videoDescriptionName"
                    )]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__5886afe17c469b30f6234f5b35aa1cb7d8baae50c424479126239a3238af2d52)
                check_type(argname="argument name", value=name, expected_type=type_hints["name"])
                check_type(argname="argument output_group_settings", value=output_group_settings, expected_type=type_hints["output_group_settings"])
                check_type(argname="argument outputs", value=outputs, expected_type=type_hints["outputs"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if name is not None:
                self._values["name"] = name
            if output_group_settings is not None:
                self._values["output_group_settings"] = output_group_settings
            if outputs is not None:
                self._values["outputs"] = outputs

        @builtins.property
        def name(self) -> typing.Optional[builtins.str]:
            '''A custom output group name that you can optionally define.

            Only letters, numbers, and the underscore character are allowed. The maximum length is 32 characters.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroup.html#cfn-medialive-channel-outputgroup-name
            '''
            result = self._values.get("name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def output_group_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputGroupSettingsProperty"]]:
            '''The settings associated with the output group.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroup.html#cfn-medialive-channel-outputgroup-outputgroupsettings
            '''
            result = self._values.get("output_group_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputGroupSettingsProperty"]], result)

        @builtins.property
        def outputs(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputProperty"]]]]:
            '''The settings for the outputs in the output group.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroup.html#cfn-medialive-channel-outputgroup-outputs
            '''
            result = self._values.get("outputs")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputProperty"]]]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "OutputGroupProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.OutputGroupSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "archive_group_settings": "archiveGroupSettings",
            "frame_capture_group_settings": "frameCaptureGroupSettings",
            "hls_group_settings": "hlsGroupSettings",
            "media_package_group_settings": "mediaPackageGroupSettings",
            "ms_smooth_group_settings": "msSmoothGroupSettings",
            "multiplex_group_settings": "multiplexGroupSettings",
            "rtmp_group_settings": "rtmpGroupSettings",
            "udp_group_settings": "udpGroupSettings",
        },
    )
    class OutputGroupSettingsProperty:
        def __init__(
            self,
            *,
            archive_group_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.ArchiveGroupSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            frame_capture_group_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.FrameCaptureGroupSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            hls_group_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.HlsGroupSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            media_package_group_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.MediaPackageGroupSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            ms_smooth_group_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.MsSmoothGroupSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            multiplex_group_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.MultiplexGroupSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            rtmp_group_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.RtmpGroupSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            udp_group_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.UdpGroupSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The configuration of the output group.

            The parent of this entity is OutputGroup.

            :param archive_group_settings: The configuration of an archive output group. The parent of this entity is OutputGroupSettings.
            :param frame_capture_group_settings: The configuration of a frame capture output group.
            :param hls_group_settings: The configuration of an HLS output group.
            :param media_package_group_settings: The configuration of a MediaPackage output group.
            :param ms_smooth_group_settings: The configuration of a Microsoft Smooth output group.
            :param multiplex_group_settings: The settings for a Multiplex output group.
            :param rtmp_group_settings: The configuration of an RTMP output group.
            :param udp_group_settings: The configuration of a UDP output group.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                output_group_settings_property = medialive.CfnChannel.OutputGroupSettingsProperty(
                    archive_group_settings=medialive.CfnChannel.ArchiveGroupSettingsProperty(
                        archive_cdn_settings=medialive.CfnChannel.ArchiveCdnSettingsProperty(
                            archive_s3_settings=medialive.CfnChannel.ArchiveS3SettingsProperty(
                                canned_acl="cannedAcl"
                            )
                        ),
                        destination=medialive.CfnChannel.OutputLocationRefProperty(
                            destination_ref_id="destinationRefId"
                        ),
                        rollover_interval=123
                    ),
                    frame_capture_group_settings=medialive.CfnChannel.FrameCaptureGroupSettingsProperty(
                        destination=medialive.CfnChannel.OutputLocationRefProperty(
                            destination_ref_id="destinationRefId"
                        ),
                        frame_capture_cdn_settings=medialive.CfnChannel.FrameCaptureCdnSettingsProperty(
                            frame_capture_s3_settings=medialive.CfnChannel.FrameCaptureS3SettingsProperty(
                                canned_acl="cannedAcl"
                            )
                        )
                    ),
                    hls_group_settings=medialive.CfnChannel.HlsGroupSettingsProperty(
                        ad_markers=["adMarkers"],
                        base_url_content="baseUrlContent",
                        base_url_content1="baseUrlContent1",
                        base_url_manifest="baseUrlManifest",
                        base_url_manifest1="baseUrlManifest1",
                        caption_language_mappings=[medialive.CfnChannel.CaptionLanguageMappingProperty(
                            caption_channel=123,
                            language_code="languageCode",
                            language_description="languageDescription"
                        )],
                        caption_language_setting="captionLanguageSetting",
                        client_cache="clientCache",
                        codec_specification="codecSpecification",
                        constant_iv="constantIv",
                        destination=medialive.CfnChannel.OutputLocationRefProperty(
                            destination_ref_id="destinationRefId"
                        ),
                        directory_structure="directoryStructure",
                        discontinuity_tags="discontinuityTags",
                        encryption_type="encryptionType",
                        hls_cdn_settings=medialive.CfnChannel.HlsCdnSettingsProperty(
                            hls_akamai_settings=medialive.CfnChannel.HlsAkamaiSettingsProperty(
                                connection_retry_interval=123,
                                filecache_duration=123,
                                http_transfer_mode="httpTransferMode",
                                num_retries=123,
                                restart_delay=123,
                                salt="salt",
                                token="token"
                            ),
                            hls_basic_put_settings=medialive.CfnChannel.HlsBasicPutSettingsProperty(
                                connection_retry_interval=123,
                                filecache_duration=123,
                                num_retries=123,
                                restart_delay=123
                            ),
                            hls_media_store_settings=medialive.CfnChannel.HlsMediaStoreSettingsProperty(
                                connection_retry_interval=123,
                                filecache_duration=123,
                                media_store_storage_class="mediaStoreStorageClass",
                                num_retries=123,
                                restart_delay=123
                            ),
                            hls_s3_settings=medialive.CfnChannel.HlsS3SettingsProperty(
                                canned_acl="cannedAcl"
                            ),
                            hls_webdav_settings=medialive.CfnChannel.HlsWebdavSettingsProperty(
                                connection_retry_interval=123,
                                filecache_duration=123,
                                http_transfer_mode="httpTransferMode",
                                num_retries=123,
                                restart_delay=123
                            )
                        ),
                        hls_id3_segment_tagging="hlsId3SegmentTagging",
                        i_frame_only_playlists="iFrameOnlyPlaylists",
                        incomplete_segment_behavior="incompleteSegmentBehavior",
                        index_nSegments=123,
                        input_loss_action="inputLossAction",
                        iv_in_manifest="ivInManifest",
                        iv_source="ivSource",
                        keep_segments=123,
                        key_format="keyFormat",
                        key_format_versions="keyFormatVersions",
                        key_provider_settings=medialive.CfnChannel.KeyProviderSettingsProperty(
                            static_key_settings=medialive.CfnChannel.StaticKeySettingsProperty(
                                key_provider_server=medialive.CfnChannel.InputLocationProperty(
                                    password_param="passwordParam",
                                    uri="uri",
                                    username="username"
                                ),
                                static_key_value="staticKeyValue"
                            )
                        ),
                        manifest_compression="manifestCompression",
                        manifest_duration_format="manifestDurationFormat",
                        min_segment_length=123,
                        mode="mode",
                        output_selection="outputSelection",
                        program_date_time="programDateTime",
                        program_date_time_clock="programDateTimeClock",
                        program_date_time_period=123,
                        redundant_manifest="redundantManifest",
                        segmentation_mode="segmentationMode",
                        segment_length=123,
                        segments_per_subdirectory=123,
                        stream_inf_resolution="streamInfResolution",
                        timed_metadata_id3_frame="timedMetadataId3Frame",
                        timed_metadata_id3_period=123,
                        timestamp_delta_milliseconds=123,
                        ts_file_mode="tsFileMode"
                    ),
                    media_package_group_settings=medialive.CfnChannel.MediaPackageGroupSettingsProperty(
                        destination=medialive.CfnChannel.OutputLocationRefProperty(
                            destination_ref_id="destinationRefId"
                        )
                    ),
                    ms_smooth_group_settings=medialive.CfnChannel.MsSmoothGroupSettingsProperty(
                        acquisition_point_id="acquisitionPointId",
                        audio_only_timecode_control="audioOnlyTimecodeControl",
                        certificate_mode="certificateMode",
                        connection_retry_interval=123,
                        destination=medialive.CfnChannel.OutputLocationRefProperty(
                            destination_ref_id="destinationRefId"
                        ),
                        event_id="eventId",
                        event_id_mode="eventIdMode",
                        event_stop_behavior="eventStopBehavior",
                        filecache_duration=123,
                        fragment_length=123,
                        input_loss_action="inputLossAction",
                        num_retries=123,
                        restart_delay=123,
                        segmentation_mode="segmentationMode",
                        send_delay_ms=123,
                        sparse_track_type="sparseTrackType",
                        stream_manifest_behavior="streamManifestBehavior",
                        timestamp_offset="timestampOffset",
                        timestamp_offset_mode="timestampOffsetMode"
                    ),
                    multiplex_group_settings=medialive.CfnChannel.MultiplexGroupSettingsProperty(),
                    rtmp_group_settings=medialive.CfnChannel.RtmpGroupSettingsProperty(
                        ad_markers=["adMarkers"],
                        authentication_scheme="authenticationScheme",
                        cache_full_behavior="cacheFullBehavior",
                        cache_length=123,
                        caption_data="captionData",
                        include_filler_nal_units="includeFillerNalUnits",
                        input_loss_action="inputLossAction",
                        restart_delay=123
                    ),
                    udp_group_settings=medialive.CfnChannel.UdpGroupSettingsProperty(
                        input_loss_action="inputLossAction",
                        timed_metadata_id3_frame="timedMetadataId3Frame",
                        timed_metadata_id3_period=123
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__99268924a18ec05b9988ead6054214f4699ced2eb8edf3f3c278090682ca5641)
                check_type(argname="argument archive_group_settings", value=archive_group_settings, expected_type=type_hints["archive_group_settings"])
                check_type(argname="argument frame_capture_group_settings", value=frame_capture_group_settings, expected_type=type_hints["frame_capture_group_settings"])
                check_type(argname="argument hls_group_settings", value=hls_group_settings, expected_type=type_hints["hls_group_settings"])
                check_type(argname="argument media_package_group_settings", value=media_package_group_settings, expected_type=type_hints["media_package_group_settings"])
                check_type(argname="argument ms_smooth_group_settings", value=ms_smooth_group_settings, expected_type=type_hints["ms_smooth_group_settings"])
                check_type(argname="argument multiplex_group_settings", value=multiplex_group_settings, expected_type=type_hints["multiplex_group_settings"])
                check_type(argname="argument rtmp_group_settings", value=rtmp_group_settings, expected_type=type_hints["rtmp_group_settings"])
                check_type(argname="argument udp_group_settings", value=udp_group_settings, expected_type=type_hints["udp_group_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if archive_group_settings is not None:
                self._values["archive_group_settings"] = archive_group_settings
            if frame_capture_group_settings is not None:
                self._values["frame_capture_group_settings"] = frame_capture_group_settings
            if hls_group_settings is not None:
                self._values["hls_group_settings"] = hls_group_settings
            if media_package_group_settings is not None:
                self._values["media_package_group_settings"] = media_package_group_settings
            if ms_smooth_group_settings is not None:
                self._values["ms_smooth_group_settings"] = ms_smooth_group_settings
            if multiplex_group_settings is not None:
                self._values["multiplex_group_settings"] = multiplex_group_settings
            if rtmp_group_settings is not None:
                self._values["rtmp_group_settings"] = rtmp_group_settings
            if udp_group_settings is not None:
                self._values["udp_group_settings"] = udp_group_settings

        @builtins.property
        def archive_group_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.ArchiveGroupSettingsProperty"]]:
            '''The configuration of an archive output group.

            The parent of this entity is OutputGroupSettings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-archivegroupsettings
            '''
            result = self._values.get("archive_group_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.ArchiveGroupSettingsProperty"]], result)

        @builtins.property
        def frame_capture_group_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.FrameCaptureGroupSettingsProperty"]]:
            '''The configuration of a frame capture output group.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-framecapturegroupsettings
            '''
            result = self._values.get("frame_capture_group_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.FrameCaptureGroupSettingsProperty"]], result)

        @builtins.property
        def hls_group_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HlsGroupSettingsProperty"]]:
            '''The configuration of an HLS output group.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-hlsgroupsettings
            '''
            result = self._values.get("hls_group_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HlsGroupSettingsProperty"]], result)

        @builtins.property
        def media_package_group_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MediaPackageGroupSettingsProperty"]]:
            '''The configuration of a MediaPackage output group.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-mediapackagegroupsettings
            '''
            result = self._values.get("media_package_group_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MediaPackageGroupSettingsProperty"]], result)

        @builtins.property
        def ms_smooth_group_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MsSmoothGroupSettingsProperty"]]:
            '''The configuration of a Microsoft Smooth output group.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-mssmoothgroupsettings
            '''
            result = self._values.get("ms_smooth_group_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MsSmoothGroupSettingsProperty"]], result)

        @builtins.property
        def multiplex_group_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MultiplexGroupSettingsProperty"]]:
            '''The settings for a Multiplex output group.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-multiplexgroupsettings
            '''
            result = self._values.get("multiplex_group_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MultiplexGroupSettingsProperty"]], result)

        @builtins.property
        def rtmp_group_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.RtmpGroupSettingsProperty"]]:
            '''The configuration of an RTMP output group.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-rtmpgroupsettings
            '''
            result = self._values.get("rtmp_group_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.RtmpGroupSettingsProperty"]], result)

        @builtins.property
        def udp_group_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.UdpGroupSettingsProperty"]]:
            '''The configuration of a UDP output group.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputgroupsettings.html#cfn-medialive-channel-outputgroupsettings-udpgroupsettings
            '''
            result = self._values.get("udp_group_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.UdpGroupSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "OutputGroupSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.OutputLocationRefProperty",
        jsii_struct_bases=[],
        name_mapping={"destination_ref_id": "destinationRefId"},
    )
    class OutputLocationRefProperty:
        def __init__(
            self,
            *,
            destination_ref_id: typing.Optional[builtins.str] = None,
        ) -> None:
            '''A reference to an OutputDestination ID that is defined in the channel.

            This entity is used by ArchiveGroupSettings, FrameCaptureGroupSettings, HlsGroupSettings, MediaPackageGroupSettings, MSSmoothGroupSettings, RtmpOutputSettings, and UdpOutputSettings.

            :param destination_ref_id: A reference ID for this destination.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputlocationref.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                output_location_ref_property = medialive.CfnChannel.OutputLocationRefProperty(
                    destination_ref_id="destinationRefId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__d9a83db324046f2d43b5ec241310d3cc50795f2e43fe0806f8d04b7c3cdde950)
                check_type(argname="argument destination_ref_id", value=destination_ref_id, expected_type=type_hints["destination_ref_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if destination_ref_id is not None:
                self._values["destination_ref_id"] = destination_ref_id

        @builtins.property
        def destination_ref_id(self) -> typing.Optional[builtins.str]:
            '''A reference ID for this destination.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputlocationref.html#cfn-medialive-channel-outputlocationref-destinationrefid
            '''
            result = self._values.get("destination_ref_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "OutputLocationRefProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.OutputLockingSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "epoch_locking_settings": "epochLockingSettings",
            "pipeline_locking_settings": "pipelineLockingSettings",
        },
    )
    class OutputLockingSettingsProperty:
        def __init__(
            self,
            *,
            epoch_locking_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.EpochLockingSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            pipeline_locking_settings: typing.Any = None,
        ) -> None:
            '''
            :param epoch_locking_settings: 
            :param pipeline_locking_settings: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputlockingsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                # pipeline_locking_settings: Any
                
                output_locking_settings_property = medialive.CfnChannel.OutputLockingSettingsProperty(
                    epoch_locking_settings=medialive.CfnChannel.EpochLockingSettingsProperty(
                        custom_epoch="customEpoch",
                        jam_sync_time="jamSyncTime"
                    ),
                    pipeline_locking_settings=pipeline_locking_settings
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__91d4fff7a9a1aba5da0f0ac1b509a8ddbcfbb4e071e4401a2dcf97e150353724)
                check_type(argname="argument epoch_locking_settings", value=epoch_locking_settings, expected_type=type_hints["epoch_locking_settings"])
                check_type(argname="argument pipeline_locking_settings", value=pipeline_locking_settings, expected_type=type_hints["pipeline_locking_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if epoch_locking_settings is not None:
                self._values["epoch_locking_settings"] = epoch_locking_settings
            if pipeline_locking_settings is not None:
                self._values["pipeline_locking_settings"] = pipeline_locking_settings

        @builtins.property
        def epoch_locking_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.EpochLockingSettingsProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputlockingsettings.html#cfn-medialive-channel-outputlockingsettings-epochlockingsettings
            '''
            result = self._values.get("epoch_locking_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.EpochLockingSettingsProperty"]], result)

        @builtins.property
        def pipeline_locking_settings(self) -> typing.Any:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputlockingsettings.html#cfn-medialive-channel-outputlockingsettings-pipelinelockingsettings
            '''
            result = self._values.get("pipeline_locking_settings")
            return typing.cast(typing.Any, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "OutputLockingSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.OutputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "audio_description_names": "audioDescriptionNames",
            "caption_description_names": "captionDescriptionNames",
            "output_name": "outputName",
            "output_settings": "outputSettings",
            "video_description_name": "videoDescriptionName",
        },
    )
    class OutputProperty:
        def __init__(
            self,
            *,
            audio_description_names: typing.Optional[typing.Sequence[builtins.str]] = None,
            caption_description_names: typing.Optional[typing.Sequence[builtins.str]] = None,
            output_name: typing.Optional[builtins.str] = None,
            output_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.OutputSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            video_description_name: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The output settings.

            The parent of this entity is OutputGroup.

            :param audio_description_names: The names of the audio descriptions that are used as audio sources for this output.
            :param caption_description_names: The names of the caption descriptions that are used as captions sources for this output.
            :param output_name: The name that is used to identify an output.
            :param output_settings: The output type-specific settings.
            :param video_description_name: The name of the VideoDescription that is used as the source for this output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-output.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                output_property = medialive.CfnChannel.OutputProperty(
                    audio_description_names=["audioDescriptionNames"],
                    caption_description_names=["captionDescriptionNames"],
                    output_name="outputName",
                    output_settings=medialive.CfnChannel.OutputSettingsProperty(
                        archive_output_settings=medialive.CfnChannel.ArchiveOutputSettingsProperty(
                            container_settings=medialive.CfnChannel.ArchiveContainerSettingsProperty(
                                m2_ts_settings=medialive.CfnChannel.M2tsSettingsProperty(
                                    absent_input_audio_behavior="absentInputAudioBehavior",
                                    arib="arib",
                                    arib_captions_pid="aribCaptionsPid",
                                    arib_captions_pid_control="aribCaptionsPidControl",
                                    audio_buffer_model="audioBufferModel",
                                    audio_frames_per_pes=123,
                                    audio_pids="audioPids",
                                    audio_stream_type="audioStreamType",
                                    bitrate=123,
                                    buffer_model="bufferModel",
                                    cc_descriptor="ccDescriptor",
                                    dvb_nit_settings=medialive.CfnChannel.DvbNitSettingsProperty(
                                        network_id=123,
                                        network_name="networkName",
                                        rep_interval=123
                                    ),
                                    dvb_sdt_settings=medialive.CfnChannel.DvbSdtSettingsProperty(
                                        output_sdt="outputSdt",
                                        rep_interval=123,
                                        service_name="serviceName",
                                        service_provider_name="serviceProviderName"
                                    ),
                                    dvb_sub_pids="dvbSubPids",
                                    dvb_tdt_settings=medialive.CfnChannel.DvbTdtSettingsProperty(
                                        rep_interval=123
                                    ),
                                    dvb_teletext_pid="dvbTeletextPid",
                                    ebif="ebif",
                                    ebp_audio_interval="ebpAudioInterval",
                                    ebp_lookahead_ms=123,
                                    ebp_placement="ebpPlacement",
                                    ecm_pid="ecmPid",
                                    es_rate_in_pes="esRateInPes",
                                    etv_platform_pid="etvPlatformPid",
                                    etv_signal_pid="etvSignalPid",
                                    fragment_time=123,
                                    klv="klv",
                                    klv_data_pids="klvDataPids",
                                    nielsen_id3_behavior="nielsenId3Behavior",
                                    null_packet_bitrate=123,
                                    pat_interval=123,
                                    pcr_control="pcrControl",
                                    pcr_period=123,
                                    pcr_pid="pcrPid",
                                    pmt_interval=123,
                                    pmt_pid="pmtPid",
                                    program_num=123,
                                    rate_mode="rateMode",
                                    scte27_pids="scte27Pids",
                                    scte35_control="scte35Control",
                                    scte35_pid="scte35Pid",
                                    scte35_preroll_pullup_milliseconds=123,
                                    segmentation_markers="segmentationMarkers",
                                    segmentation_style="segmentationStyle",
                                    segmentation_time=123,
                                    timed_metadata_behavior="timedMetadataBehavior",
                                    timed_metadata_pid="timedMetadataPid",
                                    transport_stream_id=123,
                                    video_pid="videoPid"
                                ),
                                raw_settings=medialive.CfnChannel.RawSettingsProperty()
                            ),
                            extension="extension",
                            name_modifier="nameModifier"
                        ),
                        frame_capture_output_settings=medialive.CfnChannel.FrameCaptureOutputSettingsProperty(
                            name_modifier="nameModifier"
                        ),
                        hls_output_settings=medialive.CfnChannel.HlsOutputSettingsProperty(
                            h265_packaging_type="h265PackagingType",
                            hls_settings=medialive.CfnChannel.HlsSettingsProperty(
                                audio_only_hls_settings=medialive.CfnChannel.AudioOnlyHlsSettingsProperty(
                                    audio_group_id="audioGroupId",
                                    audio_only_image=medialive.CfnChannel.InputLocationProperty(
                                        password_param="passwordParam",
                                        uri="uri",
                                        username="username"
                                    ),
                                    audio_track_type="audioTrackType",
                                    segment_type="segmentType"
                                ),
                                fmp4_hls_settings=medialive.CfnChannel.Fmp4HlsSettingsProperty(
                                    audio_rendition_sets="audioRenditionSets",
                                    nielsen_id3_behavior="nielsenId3Behavior",
                                    timed_metadata_behavior="timedMetadataBehavior"
                                ),
                                frame_capture_hls_settings=medialive.CfnChannel.FrameCaptureHlsSettingsProperty(),
                                standard_hls_settings=medialive.CfnChannel.StandardHlsSettingsProperty(
                                    audio_rendition_sets="audioRenditionSets",
                                    m3_u8_settings=medialive.CfnChannel.M3u8SettingsProperty(
                                        audio_frames_per_pes=123,
                                        audio_pids="audioPids",
                                        ecm_pid="ecmPid",
                                        klv_behavior="klvBehavior",
                                        klv_data_pids="klvDataPids",
                                        nielsen_id3_behavior="nielsenId3Behavior",
                                        pat_interval=123,
                                        pcr_control="pcrControl",
                                        pcr_period=123,
                                        pcr_pid="pcrPid",
                                        pmt_interval=123,
                                        pmt_pid="pmtPid",
                                        program_num=123,
                                        scte35_behavior="scte35Behavior",
                                        scte35_pid="scte35Pid",
                                        timed_metadata_behavior="timedMetadataBehavior",
                                        timed_metadata_pid="timedMetadataPid",
                                        transport_stream_id=123,
                                        video_pid="videoPid"
                                    )
                                )
                            ),
                            name_modifier="nameModifier",
                            segment_modifier="segmentModifier"
                        ),
                        media_package_output_settings=medialive.CfnChannel.MediaPackageOutputSettingsProperty(),
                        ms_smooth_output_settings=medialive.CfnChannel.MsSmoothOutputSettingsProperty(
                            h265_packaging_type="h265PackagingType",
                            name_modifier="nameModifier"
                        ),
                        multiplex_output_settings=medialive.CfnChannel.MultiplexOutputSettingsProperty(
                            destination=medialive.CfnChannel.OutputLocationRefProperty(
                                destination_ref_id="destinationRefId"
                            )
                        ),
                        rtmp_output_settings=medialive.CfnChannel.RtmpOutputSettingsProperty(
                            certificate_mode="certificateMode",
                            connection_retry_interval=123,
                            destination=medialive.CfnChannel.OutputLocationRefProperty(
                                destination_ref_id="destinationRefId"
                            ),
                            num_retries=123
                        ),
                        udp_output_settings=medialive.CfnChannel.UdpOutputSettingsProperty(
                            buffer_msec=123,
                            container_settings=medialive.CfnChannel.UdpContainerSettingsProperty(
                                m2_ts_settings=medialive.CfnChannel.M2tsSettingsProperty(
                                    absent_input_audio_behavior="absentInputAudioBehavior",
                                    arib="arib",
                                    arib_captions_pid="aribCaptionsPid",
                                    arib_captions_pid_control="aribCaptionsPidControl",
                                    audio_buffer_model="audioBufferModel",
                                    audio_frames_per_pes=123,
                                    audio_pids="audioPids",
                                    audio_stream_type="audioStreamType",
                                    bitrate=123,
                                    buffer_model="bufferModel",
                                    cc_descriptor="ccDescriptor",
                                    dvb_nit_settings=medialive.CfnChannel.DvbNitSettingsProperty(
                                        network_id=123,
                                        network_name="networkName",
                                        rep_interval=123
                                    ),
                                    dvb_sdt_settings=medialive.CfnChannel.DvbSdtSettingsProperty(
                                        output_sdt="outputSdt",
                                        rep_interval=123,
                                        service_name="serviceName",
                                        service_provider_name="serviceProviderName"
                                    ),
                                    dvb_sub_pids="dvbSubPids",
                                    dvb_tdt_settings=medialive.CfnChannel.DvbTdtSettingsProperty(
                                        rep_interval=123
                                    ),
                                    dvb_teletext_pid="dvbTeletextPid",
                                    ebif="ebif",
                                    ebp_audio_interval="ebpAudioInterval",
                                    ebp_lookahead_ms=123,
                                    ebp_placement="ebpPlacement",
                                    ecm_pid="ecmPid",
                                    es_rate_in_pes="esRateInPes",
                                    etv_platform_pid="etvPlatformPid",
                                    etv_signal_pid="etvSignalPid",
                                    fragment_time=123,
                                    klv="klv",
                                    klv_data_pids="klvDataPids",
                                    nielsen_id3_behavior="nielsenId3Behavior",
                                    null_packet_bitrate=123,
                                    pat_interval=123,
                                    pcr_control="pcrControl",
                                    pcr_period=123,
                                    pcr_pid="pcrPid",
                                    pmt_interval=123,
                                    pmt_pid="pmtPid",
                                    program_num=123,
                                    rate_mode="rateMode",
                                    scte27_pids="scte27Pids",
                                    scte35_control="scte35Control",
                                    scte35_pid="scte35Pid",
                                    scte35_preroll_pullup_milliseconds=123,
                                    segmentation_markers="segmentationMarkers",
                                    segmentation_style="segmentationStyle",
                                    segmentation_time=123,
                                    timed_metadata_behavior="timedMetadataBehavior",
                                    timed_metadata_pid="timedMetadataPid",
                                    transport_stream_id=123,
                                    video_pid="videoPid"
                                )
                            ),
                            destination=medialive.CfnChannel.OutputLocationRefProperty(
                                destination_ref_id="destinationRefId"
                            ),
                            fec_output_settings=medialive.CfnChannel.FecOutputSettingsProperty(
                                column_depth=123,
                                include_fec="includeFec",
                                row_length=123
                            )
                        )
                    ),
                    video_description_name="videoDescriptionName"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__a33aaebc955d92537d615c92d210337ac828a0647a81c8d2761ba79e3eade93d)
                check_type(argname="argument audio_description_names", value=audio_description_names, expected_type=type_hints["audio_description_names"])
                check_type(argname="argument caption_description_names", value=caption_description_names, expected_type=type_hints["caption_description_names"])
                check_type(argname="argument output_name", value=output_name, expected_type=type_hints["output_name"])
                check_type(argname="argument output_settings", value=output_settings, expected_type=type_hints["output_settings"])
                check_type(argname="argument video_description_name", value=video_description_name, expected_type=type_hints["video_description_name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if audio_description_names is not None:
                self._values["audio_description_names"] = audio_description_names
            if caption_description_names is not None:
                self._values["caption_description_names"] = caption_description_names
            if output_name is not None:
                self._values["output_name"] = output_name
            if output_settings is not None:
                self._values["output_settings"] = output_settings
            if video_description_name is not None:
                self._values["video_description_name"] = video_description_name

        @builtins.property
        def audio_description_names(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The names of the audio descriptions that are used as audio sources for this output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-output.html#cfn-medialive-channel-output-audiodescriptionnames
            '''
            result = self._values.get("audio_description_names")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def caption_description_names(
            self,
        ) -> typing.Optional[typing.List[builtins.str]]:
            '''The names of the caption descriptions that are used as captions sources for this output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-output.html#cfn-medialive-channel-output-captiondescriptionnames
            '''
            result = self._values.get("caption_description_names")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def output_name(self) -> typing.Optional[builtins.str]:
            '''The name that is used to identify an output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-output.html#cfn-medialive-channel-output-outputname
            '''
            result = self._values.get("output_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def output_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputSettingsProperty"]]:
            '''The output type-specific settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-output.html#cfn-medialive-channel-output-outputsettings
            '''
            result = self._values.get("output_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputSettingsProperty"]], result)

        @builtins.property
        def video_description_name(self) -> typing.Optional[builtins.str]:
            '''The name of the VideoDescription that is used as the source for this output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-output.html#cfn-medialive-channel-output-videodescriptionname
            '''
            result = self._values.get("video_description_name")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "OutputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.OutputSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "archive_output_settings": "archiveOutputSettings",
            "frame_capture_output_settings": "frameCaptureOutputSettings",
            "hls_output_settings": "hlsOutputSettings",
            "media_package_output_settings": "mediaPackageOutputSettings",
            "ms_smooth_output_settings": "msSmoothOutputSettings",
            "multiplex_output_settings": "multiplexOutputSettings",
            "rtmp_output_settings": "rtmpOutputSettings",
            "udp_output_settings": "udpOutputSettings",
        },
    )
    class OutputSettingsProperty:
        def __init__(
            self,
            *,
            archive_output_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.ArchiveOutputSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            frame_capture_output_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.FrameCaptureOutputSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            hls_output_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.HlsOutputSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            media_package_output_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.MediaPackageOutputSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            ms_smooth_output_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.MsSmoothOutputSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            multiplex_output_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.MultiplexOutputSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            rtmp_output_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.RtmpOutputSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            udp_output_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.UdpOutputSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The output settings.

            The parent of this entity is Output.

            :param archive_output_settings: The settings for an archive output.
            :param frame_capture_output_settings: The settings for a frame capture output. The parent of this entity is OutputGroupSettings.
            :param hls_output_settings: The settings for an HLS output. The parent of this entity is OutputGroupSettings.
            :param media_package_output_settings: The settings for a MediaPackage output. The parent of this entity is OutputGroupSettings.
            :param ms_smooth_output_settings: The settings for a Microsoft Smooth output.
            :param multiplex_output_settings: Configuration of a Multiplex output.
            :param rtmp_output_settings: The settings for an RTMP output. The parent of this entity is OutputGroupSettings.
            :param udp_output_settings: The settings for a UDP output. The parent of this entity is OutputGroupSettings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                output_settings_property = medialive.CfnChannel.OutputSettingsProperty(
                    archive_output_settings=medialive.CfnChannel.ArchiveOutputSettingsProperty(
                        container_settings=medialive.CfnChannel.ArchiveContainerSettingsProperty(
                            m2_ts_settings=medialive.CfnChannel.M2tsSettingsProperty(
                                absent_input_audio_behavior="absentInputAudioBehavior",
                                arib="arib",
                                arib_captions_pid="aribCaptionsPid",
                                arib_captions_pid_control="aribCaptionsPidControl",
                                audio_buffer_model="audioBufferModel",
                                audio_frames_per_pes=123,
                                audio_pids="audioPids",
                                audio_stream_type="audioStreamType",
                                bitrate=123,
                                buffer_model="bufferModel",
                                cc_descriptor="ccDescriptor",
                                dvb_nit_settings=medialive.CfnChannel.DvbNitSettingsProperty(
                                    network_id=123,
                                    network_name="networkName",
                                    rep_interval=123
                                ),
                                dvb_sdt_settings=medialive.CfnChannel.DvbSdtSettingsProperty(
                                    output_sdt="outputSdt",
                                    rep_interval=123,
                                    service_name="serviceName",
                                    service_provider_name="serviceProviderName"
                                ),
                                dvb_sub_pids="dvbSubPids",
                                dvb_tdt_settings=medialive.CfnChannel.DvbTdtSettingsProperty(
                                    rep_interval=123
                                ),
                                dvb_teletext_pid="dvbTeletextPid",
                                ebif="ebif",
                                ebp_audio_interval="ebpAudioInterval",
                                ebp_lookahead_ms=123,
                                ebp_placement="ebpPlacement",
                                ecm_pid="ecmPid",
                                es_rate_in_pes="esRateInPes",
                                etv_platform_pid="etvPlatformPid",
                                etv_signal_pid="etvSignalPid",
                                fragment_time=123,
                                klv="klv",
                                klv_data_pids="klvDataPids",
                                nielsen_id3_behavior="nielsenId3Behavior",
                                null_packet_bitrate=123,
                                pat_interval=123,
                                pcr_control="pcrControl",
                                pcr_period=123,
                                pcr_pid="pcrPid",
                                pmt_interval=123,
                                pmt_pid="pmtPid",
                                program_num=123,
                                rate_mode="rateMode",
                                scte27_pids="scte27Pids",
                                scte35_control="scte35Control",
                                scte35_pid="scte35Pid",
                                scte35_preroll_pullup_milliseconds=123,
                                segmentation_markers="segmentationMarkers",
                                segmentation_style="segmentationStyle",
                                segmentation_time=123,
                                timed_metadata_behavior="timedMetadataBehavior",
                                timed_metadata_pid="timedMetadataPid",
                                transport_stream_id=123,
                                video_pid="videoPid"
                            ),
                            raw_settings=medialive.CfnChannel.RawSettingsProperty()
                        ),
                        extension="extension",
                        name_modifier="nameModifier"
                    ),
                    frame_capture_output_settings=medialive.CfnChannel.FrameCaptureOutputSettingsProperty(
                        name_modifier="nameModifier"
                    ),
                    hls_output_settings=medialive.CfnChannel.HlsOutputSettingsProperty(
                        h265_packaging_type="h265PackagingType",
                        hls_settings=medialive.CfnChannel.HlsSettingsProperty(
                            audio_only_hls_settings=medialive.CfnChannel.AudioOnlyHlsSettingsProperty(
                                audio_group_id="audioGroupId",
                                audio_only_image=medialive.CfnChannel.InputLocationProperty(
                                    password_param="passwordParam",
                                    uri="uri",
                                    username="username"
                                ),
                                audio_track_type="audioTrackType",
                                segment_type="segmentType"
                            ),
                            fmp4_hls_settings=medialive.CfnChannel.Fmp4HlsSettingsProperty(
                                audio_rendition_sets="audioRenditionSets",
                                nielsen_id3_behavior="nielsenId3Behavior",
                                timed_metadata_behavior="timedMetadataBehavior"
                            ),
                            frame_capture_hls_settings=medialive.CfnChannel.FrameCaptureHlsSettingsProperty(),
                            standard_hls_settings=medialive.CfnChannel.StandardHlsSettingsProperty(
                                audio_rendition_sets="audioRenditionSets",
                                m3_u8_settings=medialive.CfnChannel.M3u8SettingsProperty(
                                    audio_frames_per_pes=123,
                                    audio_pids="audioPids",
                                    ecm_pid="ecmPid",
                                    klv_behavior="klvBehavior",
                                    klv_data_pids="klvDataPids",
                                    nielsen_id3_behavior="nielsenId3Behavior",
                                    pat_interval=123,
                                    pcr_control="pcrControl",
                                    pcr_period=123,
                                    pcr_pid="pcrPid",
                                    pmt_interval=123,
                                    pmt_pid="pmtPid",
                                    program_num=123,
                                    scte35_behavior="scte35Behavior",
                                    scte35_pid="scte35Pid",
                                    timed_metadata_behavior="timedMetadataBehavior",
                                    timed_metadata_pid="timedMetadataPid",
                                    transport_stream_id=123,
                                    video_pid="videoPid"
                                )
                            )
                        ),
                        name_modifier="nameModifier",
                        segment_modifier="segmentModifier"
                    ),
                    media_package_output_settings=medialive.CfnChannel.MediaPackageOutputSettingsProperty(),
                    ms_smooth_output_settings=medialive.CfnChannel.MsSmoothOutputSettingsProperty(
                        h265_packaging_type="h265PackagingType",
                        name_modifier="nameModifier"
                    ),
                    multiplex_output_settings=medialive.CfnChannel.MultiplexOutputSettingsProperty(
                        destination=medialive.CfnChannel.OutputLocationRefProperty(
                            destination_ref_id="destinationRefId"
                        )
                    ),
                    rtmp_output_settings=medialive.CfnChannel.RtmpOutputSettingsProperty(
                        certificate_mode="certificateMode",
                        connection_retry_interval=123,
                        destination=medialive.CfnChannel.OutputLocationRefProperty(
                            destination_ref_id="destinationRefId"
                        ),
                        num_retries=123
                    ),
                    udp_output_settings=medialive.CfnChannel.UdpOutputSettingsProperty(
                        buffer_msec=123,
                        container_settings=medialive.CfnChannel.UdpContainerSettingsProperty(
                            m2_ts_settings=medialive.CfnChannel.M2tsSettingsProperty(
                                absent_input_audio_behavior="absentInputAudioBehavior",
                                arib="arib",
                                arib_captions_pid="aribCaptionsPid",
                                arib_captions_pid_control="aribCaptionsPidControl",
                                audio_buffer_model="audioBufferModel",
                                audio_frames_per_pes=123,
                                audio_pids="audioPids",
                                audio_stream_type="audioStreamType",
                                bitrate=123,
                                buffer_model="bufferModel",
                                cc_descriptor="ccDescriptor",
                                dvb_nit_settings=medialive.CfnChannel.DvbNitSettingsProperty(
                                    network_id=123,
                                    network_name="networkName",
                                    rep_interval=123
                                ),
                                dvb_sdt_settings=medialive.CfnChannel.DvbSdtSettingsProperty(
                                    output_sdt="outputSdt",
                                    rep_interval=123,
                                    service_name="serviceName",
                                    service_provider_name="serviceProviderName"
                                ),
                                dvb_sub_pids="dvbSubPids",
                                dvb_tdt_settings=medialive.CfnChannel.DvbTdtSettingsProperty(
                                    rep_interval=123
                                ),
                                dvb_teletext_pid="dvbTeletextPid",
                                ebif="ebif",
                                ebp_audio_interval="ebpAudioInterval",
                                ebp_lookahead_ms=123,
                                ebp_placement="ebpPlacement",
                                ecm_pid="ecmPid",
                                es_rate_in_pes="esRateInPes",
                                etv_platform_pid="etvPlatformPid",
                                etv_signal_pid="etvSignalPid",
                                fragment_time=123,
                                klv="klv",
                                klv_data_pids="klvDataPids",
                                nielsen_id3_behavior="nielsenId3Behavior",
                                null_packet_bitrate=123,
                                pat_interval=123,
                                pcr_control="pcrControl",
                                pcr_period=123,
                                pcr_pid="pcrPid",
                                pmt_interval=123,
                                pmt_pid="pmtPid",
                                program_num=123,
                                rate_mode="rateMode",
                                scte27_pids="scte27Pids",
                                scte35_control="scte35Control",
                                scte35_pid="scte35Pid",
                                scte35_preroll_pullup_milliseconds=123,
                                segmentation_markers="segmentationMarkers",
                                segmentation_style="segmentationStyle",
                                segmentation_time=123,
                                timed_metadata_behavior="timedMetadataBehavior",
                                timed_metadata_pid="timedMetadataPid",
                                transport_stream_id=123,
                                video_pid="videoPid"
                            )
                        ),
                        destination=medialive.CfnChannel.OutputLocationRefProperty(
                            destination_ref_id="destinationRefId"
                        ),
                        fec_output_settings=medialive.CfnChannel.FecOutputSettingsProperty(
                            column_depth=123,
                            include_fec="includeFec",
                            row_length=123
                        )
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__f51710b013df89803afb3f2517730a72a64c710d2e8f52fa7b934290b9b4fd24)
                check_type(argname="argument archive_output_settings", value=archive_output_settings, expected_type=type_hints["archive_output_settings"])
                check_type(argname="argument frame_capture_output_settings", value=frame_capture_output_settings, expected_type=type_hints["frame_capture_output_settings"])
                check_type(argname="argument hls_output_settings", value=hls_output_settings, expected_type=type_hints["hls_output_settings"])
                check_type(argname="argument media_package_output_settings", value=media_package_output_settings, expected_type=type_hints["media_package_output_settings"])
                check_type(argname="argument ms_smooth_output_settings", value=ms_smooth_output_settings, expected_type=type_hints["ms_smooth_output_settings"])
                check_type(argname="argument multiplex_output_settings", value=multiplex_output_settings, expected_type=type_hints["multiplex_output_settings"])
                check_type(argname="argument rtmp_output_settings", value=rtmp_output_settings, expected_type=type_hints["rtmp_output_settings"])
                check_type(argname="argument udp_output_settings", value=udp_output_settings, expected_type=type_hints["udp_output_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if archive_output_settings is not None:
                self._values["archive_output_settings"] = archive_output_settings
            if frame_capture_output_settings is not None:
                self._values["frame_capture_output_settings"] = frame_capture_output_settings
            if hls_output_settings is not None:
                self._values["hls_output_settings"] = hls_output_settings
            if media_package_output_settings is not None:
                self._values["media_package_output_settings"] = media_package_output_settings
            if ms_smooth_output_settings is not None:
                self._values["ms_smooth_output_settings"] = ms_smooth_output_settings
            if multiplex_output_settings is not None:
                self._values["multiplex_output_settings"] = multiplex_output_settings
            if rtmp_output_settings is not None:
                self._values["rtmp_output_settings"] = rtmp_output_settings
            if udp_output_settings is not None:
                self._values["udp_output_settings"] = udp_output_settings

        @builtins.property
        def archive_output_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.ArchiveOutputSettingsProperty"]]:
            '''The settings for an archive output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-archiveoutputsettings
            '''
            result = self._values.get("archive_output_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.ArchiveOutputSettingsProperty"]], result)

        @builtins.property
        def frame_capture_output_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.FrameCaptureOutputSettingsProperty"]]:
            '''The settings for a frame capture output.

            The parent of this entity is OutputGroupSettings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-framecaptureoutputsettings
            '''
            result = self._values.get("frame_capture_output_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.FrameCaptureOutputSettingsProperty"]], result)

        @builtins.property
        def hls_output_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HlsOutputSettingsProperty"]]:
            '''The settings for an HLS output.

            The parent of this entity is OutputGroupSettings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-hlsoutputsettings
            '''
            result = self._values.get("hls_output_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.HlsOutputSettingsProperty"]], result)

        @builtins.property
        def media_package_output_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MediaPackageOutputSettingsProperty"]]:
            '''The settings for a MediaPackage output.

            The parent of this entity is OutputGroupSettings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-mediapackageoutputsettings
            '''
            result = self._values.get("media_package_output_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MediaPackageOutputSettingsProperty"]], result)

        @builtins.property
        def ms_smooth_output_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MsSmoothOutputSettingsProperty"]]:
            '''The settings for a Microsoft Smooth output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-mssmoothoutputsettings
            '''
            result = self._values.get("ms_smooth_output_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MsSmoothOutputSettingsProperty"]], result)

        @builtins.property
        def multiplex_output_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MultiplexOutputSettingsProperty"]]:
            '''Configuration of a Multiplex output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-multiplexoutputsettings
            '''
            result = self._values.get("multiplex_output_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.MultiplexOutputSettingsProperty"]], result)

        @builtins.property
        def rtmp_output_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.RtmpOutputSettingsProperty"]]:
            '''The settings for an RTMP output.

            The parent of this entity is OutputGroupSettings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-rtmpoutputsettings
            '''
            result = self._values.get("rtmp_output_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.RtmpOutputSettingsProperty"]], result)

        @builtins.property
        def udp_output_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.UdpOutputSettingsProperty"]]:
            '''The settings for a UDP output.

            The parent of this entity is OutputGroupSettings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-outputsettings.html#cfn-medialive-channel-outputsettings-udpoutputsettings
            '''
            result = self._values.get("udp_output_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.UdpOutputSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "OutputSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.PassThroughSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={},
    )
    class PassThroughSettingsProperty:
        def __init__(self) -> None:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-passthroughsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                pass_through_settings_property = medialive.CfnChannel.PassThroughSettingsProperty()
            '''
            self._values: typing.Dict[builtins.str, typing.Any] = {}

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "PassThroughSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.RawSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={},
    )
    class RawSettingsProperty:
        def __init__(self) -> None:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rawsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                raw_settings_property = medialive.CfnChannel.RawSettingsProperty()
            '''
            self._values: typing.Dict[builtins.str, typing.Any] = {}

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "RawSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.Rec601SettingsProperty",
        jsii_struct_bases=[],
        name_mapping={},
    )
    class Rec601SettingsProperty:
        def __init__(self) -> None:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rec601settings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                rec601_settings_property = medialive.CfnChannel.Rec601SettingsProperty()
            '''
            self._values: typing.Dict[builtins.str, typing.Any] = {}

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "Rec601SettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.Rec709SettingsProperty",
        jsii_struct_bases=[],
        name_mapping={},
    )
    class Rec709SettingsProperty:
        def __init__(self) -> None:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rec709settings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                rec709_settings_property = medialive.CfnChannel.Rec709SettingsProperty()
            '''
            self._values: typing.Dict[builtins.str, typing.Any] = {}

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "Rec709SettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.RemixSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "channel_mappings": "channelMappings",
            "channels_in": "channelsIn",
            "channels_out": "channelsOut",
        },
    )
    class RemixSettingsProperty:
        def __init__(
            self,
            *,
            channel_mappings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.AudioChannelMappingProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            channels_in: typing.Optional[jsii.Number] = None,
            channels_out: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The settings for remixing audio in the output.

            The parent of this entity is AudioDescription.

            :param channel_mappings: A mapping of input channels to output channels, with appropriate gain adjustments.
            :param channels_in: The number of input channels to be used.
            :param channels_out: The number of output channels to be produced. Valid values: 1, 2, 4, 6, 8.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-remixsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                remix_settings_property = medialive.CfnChannel.RemixSettingsProperty(
                    channel_mappings=[medialive.CfnChannel.AudioChannelMappingProperty(
                        input_channel_levels=[medialive.CfnChannel.InputChannelLevelProperty(
                            gain=123,
                            input_channel=123
                        )],
                        output_channel=123
                    )],
                    channels_in=123,
                    channels_out=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__7f45d0853444d06099d7494d2f94e86e3388fa2fb96cc8adbbf6545a8725bfac)
                check_type(argname="argument channel_mappings", value=channel_mappings, expected_type=type_hints["channel_mappings"])
                check_type(argname="argument channels_in", value=channels_in, expected_type=type_hints["channels_in"])
                check_type(argname="argument channels_out", value=channels_out, expected_type=type_hints["channels_out"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if channel_mappings is not None:
                self._values["channel_mappings"] = channel_mappings
            if channels_in is not None:
                self._values["channels_in"] = channels_in
            if channels_out is not None:
                self._values["channels_out"] = channels_out

        @builtins.property
        def channel_mappings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioChannelMappingProperty"]]]]:
            '''A mapping of input channels to output channels, with appropriate gain adjustments.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-remixsettings.html#cfn-medialive-channel-remixsettings-channelmappings
            '''
            result = self._values.get("channel_mappings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnChannel.AudioChannelMappingProperty"]]]], result)

        @builtins.property
        def channels_in(self) -> typing.Optional[jsii.Number]:
            '''The number of input channels to be used.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-remixsettings.html#cfn-medialive-channel-remixsettings-channelsin
            '''
            result = self._values.get("channels_in")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def channels_out(self) -> typing.Optional[jsii.Number]:
            '''The number of output channels to be produced.

            Valid values: 1, 2, 4, 6, 8.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-remixsettings.html#cfn-medialive-channel-remixsettings-channelsout
            '''
            result = self._values.get("channels_out")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "RemixSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.RtmpCaptionInfoDestinationSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={},
    )
    class RtmpCaptionInfoDestinationSettingsProperty:
        def __init__(self) -> None:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpcaptioninfodestinationsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                rtmp_caption_info_destination_settings_property = medialive.CfnChannel.RtmpCaptionInfoDestinationSettingsProperty()
            '''
            self._values: typing.Dict[builtins.str, typing.Any] = {}

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "RtmpCaptionInfoDestinationSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.RtmpGroupSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "ad_markers": "adMarkers",
            "authentication_scheme": "authenticationScheme",
            "cache_full_behavior": "cacheFullBehavior",
            "cache_length": "cacheLength",
            "caption_data": "captionData",
            "include_filler_nal_units": "includeFillerNalUnits",
            "input_loss_action": "inputLossAction",
            "restart_delay": "restartDelay",
        },
    )
    class RtmpGroupSettingsProperty:
        def __init__(
            self,
            *,
            ad_markers: typing.Optional[typing.Sequence[builtins.str]] = None,
            authentication_scheme: typing.Optional[builtins.str] = None,
            cache_full_behavior: typing.Optional[builtins.str] = None,
            cache_length: typing.Optional[jsii.Number] = None,
            caption_data: typing.Optional[builtins.str] = None,
            include_filler_nal_units: typing.Optional[builtins.str] = None,
            input_loss_action: typing.Optional[builtins.str] = None,
            restart_delay: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The configuration of an RTMP output group.

            The parent of this entity is OutputGroupSettings.

            :param ad_markers: Choose the ad marker type for this output group. MediaLive will create a message based on the content of each SCTE-35 message, format it for that marker type, and insert it in the datastream.
            :param authentication_scheme: An authentication scheme to use when connecting with a CDN.
            :param cache_full_behavior: Controls behavior when the content cache fills up. If a remote origin server stalls the RTMP connection and doesn't accept content fast enough, the media cache fills up. When the cache reaches the duration specified by cacheLength, the cache stops accepting new content. If set to disconnectImmediately, the RTMP output forces a disconnect. Clear the media cache, and reconnect after restartDelay seconds. If set to waitForServer, the RTMP output waits up to 5 minutes to allow the origin server to begin accepting data again.
            :param cache_length: The cache length, in seconds, that is used to calculate buffer size.
            :param caption_data: Controls the types of data that pass to onCaptionInfo outputs. If set to all, 608 and 708 carried DTVCC data is passed. If set to field1AndField2608, DTVCC data is stripped out, but 608 data from both fields is passed. If set to field1608, only the data carried in 608 from field 1 video is passed.
            :param include_filler_nal_units: 
            :param input_loss_action: Controls the behavior of this RTMP group if the input becomes unavailable. emitOutput: Emit a slate until the input returns. pauseOutput: Stop transmitting data until the input returns. This does not close the underlying RTMP connection.
            :param restart_delay: If a streaming output fails, the number of seconds to wait until a restart is initiated. A value of 0 means never restart.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                rtmp_group_settings_property = medialive.CfnChannel.RtmpGroupSettingsProperty(
                    ad_markers=["adMarkers"],
                    authentication_scheme="authenticationScheme",
                    cache_full_behavior="cacheFullBehavior",
                    cache_length=123,
                    caption_data="captionData",
                    include_filler_nal_units="includeFillerNalUnits",
                    input_loss_action="inputLossAction",
                    restart_delay=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__0295440a065d9a2b0e9f9b565a0db8ee1f7e2d6a9d52e91e2e83d6174761d0b8)
                check_type(argname="argument ad_markers", value=ad_markers, expected_type=type_hints["ad_markers"])
                check_type(argname="argument authentication_scheme", value=authentication_scheme, expected_type=type_hints["authentication_scheme"])
                check_type(argname="argument cache_full_behavior", value=cache_full_behavior, expected_type=type_hints["cache_full_behavior"])
                check_type(argname="argument cache_length", value=cache_length, expected_type=type_hints["cache_length"])
                check_type(argname="argument caption_data", value=caption_data, expected_type=type_hints["caption_data"])
                check_type(argname="argument include_filler_nal_units", value=include_filler_nal_units, expected_type=type_hints["include_filler_nal_units"])
                check_type(argname="argument input_loss_action", value=input_loss_action, expected_type=type_hints["input_loss_action"])
                check_type(argname="argument restart_delay", value=restart_delay, expected_type=type_hints["restart_delay"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if ad_markers is not None:
                self._values["ad_markers"] = ad_markers
            if authentication_scheme is not None:
                self._values["authentication_scheme"] = authentication_scheme
            if cache_full_behavior is not None:
                self._values["cache_full_behavior"] = cache_full_behavior
            if cache_length is not None:
                self._values["cache_length"] = cache_length
            if caption_data is not None:
                self._values["caption_data"] = caption_data
            if include_filler_nal_units is not None:
                self._values["include_filler_nal_units"] = include_filler_nal_units
            if input_loss_action is not None:
                self._values["input_loss_action"] = input_loss_action
            if restart_delay is not None:
                self._values["restart_delay"] = restart_delay

        @builtins.property
        def ad_markers(self) -> typing.Optional[typing.List[builtins.str]]:
            '''Choose the ad marker type for this output group.

            MediaLive will create a message based on the content of each SCTE-35 message, format it for that marker type, and insert it in the datastream.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-admarkers
            '''
            result = self._values.get("ad_markers")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def authentication_scheme(self) -> typing.Optional[builtins.str]:
            '''An authentication scheme to use when connecting with a CDN.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-authenticationscheme
            '''
            result = self._values.get("authentication_scheme")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def cache_full_behavior(self) -> typing.Optional[builtins.str]:
            '''Controls behavior when the content cache fills up.

            If a remote origin server stalls the RTMP connection and doesn't accept content fast enough, the media cache fills up. When the cache reaches the duration specified by cacheLength, the cache stops accepting new content. If set to disconnectImmediately, the RTMP output forces a disconnect. Clear the media cache, and reconnect after restartDelay seconds. If set to waitForServer, the RTMP output waits up to 5 minutes to allow the origin server to begin accepting data again.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-cachefullbehavior
            '''
            result = self._values.get("cache_full_behavior")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def cache_length(self) -> typing.Optional[jsii.Number]:
            '''The cache length, in seconds, that is used to calculate buffer size.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-cachelength
            '''
            result = self._values.get("cache_length")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def caption_data(self) -> typing.Optional[builtins.str]:
            '''Controls the types of data that pass to onCaptionInfo outputs.

            If set to all, 608 and 708 carried DTVCC data is passed. If set to field1AndField2608, DTVCC data is stripped out, but 608 data from both fields is passed. If set to field1608, only the data carried in 608 from field 1 video is passed.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-captiondata
            '''
            result = self._values.get("caption_data")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def include_filler_nal_units(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-includefillernalunits
            '''
            result = self._values.get("include_filler_nal_units")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def input_loss_action(self) -> typing.Optional[builtins.str]:
            '''Controls the behavior of this RTMP group if the input becomes unavailable.

            emitOutput: Emit a slate until the input returns. pauseOutput: Stop transmitting data until the input returns. This does not close the underlying RTMP connection.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-inputlossaction
            '''
            result = self._values.get("input_loss_action")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def restart_delay(self) -> typing.Optional[jsii.Number]:
            '''If a streaming output fails, the number of seconds to wait until a restart is initiated.

            A value of 0 means never restart.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpgroupsettings.html#cfn-medialive-channel-rtmpgroupsettings-restartdelay
            '''
            result = self._values.get("restart_delay")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "RtmpGroupSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.RtmpOutputSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "certificate_mode": "certificateMode",
            "connection_retry_interval": "connectionRetryInterval",
            "destination": "destination",
            "num_retries": "numRetries",
        },
    )
    class RtmpOutputSettingsProperty:
        def __init__(
            self,
            *,
            certificate_mode: typing.Optional[builtins.str] = None,
            connection_retry_interval: typing.Optional[jsii.Number] = None,
            destination: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.OutputLocationRefProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            num_retries: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The settings for one RTMP output.

            The parent of this entity is OutputSettings.

            :param certificate_mode: If set to verifyAuthenticity, verifies the TLS certificate chain to a trusted certificate authority (CA). This causes RTMPS outputs with self-signed certificates to fail.
            :param connection_retry_interval: The number of seconds to wait before retrying a connection to the Flash Media server if the connection is lost.
            :param destination: The RTMP endpoint excluding the stream name (for example, rtmp://host/appname).
            :param num_retries: The number of retry attempts.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpoutputsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                rtmp_output_settings_property = medialive.CfnChannel.RtmpOutputSettingsProperty(
                    certificate_mode="certificateMode",
                    connection_retry_interval=123,
                    destination=medialive.CfnChannel.OutputLocationRefProperty(
                        destination_ref_id="destinationRefId"
                    ),
                    num_retries=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__74e3497409d8b2fef6c9eedfcc637c11b5dfbbea46a2d3c522e192356cb77825)
                check_type(argname="argument certificate_mode", value=certificate_mode, expected_type=type_hints["certificate_mode"])
                check_type(argname="argument connection_retry_interval", value=connection_retry_interval, expected_type=type_hints["connection_retry_interval"])
                check_type(argname="argument destination", value=destination, expected_type=type_hints["destination"])
                check_type(argname="argument num_retries", value=num_retries, expected_type=type_hints["num_retries"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if certificate_mode is not None:
                self._values["certificate_mode"] = certificate_mode
            if connection_retry_interval is not None:
                self._values["connection_retry_interval"] = connection_retry_interval
            if destination is not None:
                self._values["destination"] = destination
            if num_retries is not None:
                self._values["num_retries"] = num_retries

        @builtins.property
        def certificate_mode(self) -> typing.Optional[builtins.str]:
            '''If set to verifyAuthenticity, verifies the TLS certificate chain to a trusted certificate authority (CA).

            This causes RTMPS outputs with self-signed certificates to fail.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpoutputsettings.html#cfn-medialive-channel-rtmpoutputsettings-certificatemode
            '''
            result = self._values.get("certificate_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def connection_retry_interval(self) -> typing.Optional[jsii.Number]:
            '''The number of seconds to wait before retrying a connection to the Flash Media server if the connection is lost.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpoutputsettings.html#cfn-medialive-channel-rtmpoutputsettings-connectionretryinterval
            '''
            result = self._values.get("connection_retry_interval")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def destination(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputLocationRefProperty"]]:
            '''The RTMP endpoint excluding the stream name (for example, rtmp://host/appname).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpoutputsettings.html#cfn-medialive-channel-rtmpoutputsettings-destination
            '''
            result = self._values.get("destination")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputLocationRefProperty"]], result)

        @builtins.property
        def num_retries(self) -> typing.Optional[jsii.Number]:
            '''The number of retry attempts.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-rtmpoutputsettings.html#cfn-medialive-channel-rtmpoutputsettings-numretries
            '''
            result = self._values.get("num_retries")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "RtmpOutputSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.Scte20PlusEmbeddedDestinationSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={},
    )
    class Scte20PlusEmbeddedDestinationSettingsProperty:
        def __init__(self) -> None:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte20plusembeddeddestinationsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                scte20_plus_embedded_destination_settings_property = medialive.CfnChannel.Scte20PlusEmbeddedDestinationSettingsProperty()
            '''
            self._values: typing.Dict[builtins.str, typing.Any] = {}

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "Scte20PlusEmbeddedDestinationSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.Scte20SourceSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "convert608_to708": "convert608To708",
            "source608_channel_number": "source608ChannelNumber",
        },
    )
    class Scte20SourceSettingsProperty:
        def __init__(
            self,
            *,
            convert608_to708: typing.Optional[builtins.str] = None,
            source608_channel_number: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Information about the SCTE-20 captions to extract from the input.

            The parent of this entity is CaptionSelectorSettings.

            :param convert608_to708: If upconvert, 608 data is both passed through the "608 compatibility bytes" fields of the 708 wrapper as well as translated into 708. Any 708 data present in the source content is discarded.
            :param source608_channel_number: Specifies the 608/708 channel number within the video track from which to extract captions.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte20sourcesettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                scte20_source_settings_property = medialive.CfnChannel.Scte20SourceSettingsProperty(
                    convert608_to708="convert608To708",
                    source608_channel_number=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__b4a19544dd82483bb8a69ecf1bef1bd646ca34f273d99369d8a65d44b2129bcc)
                check_type(argname="argument convert608_to708", value=convert608_to708, expected_type=type_hints["convert608_to708"])
                check_type(argname="argument source608_channel_number", value=source608_channel_number, expected_type=type_hints["source608_channel_number"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if convert608_to708 is not None:
                self._values["convert608_to708"] = convert608_to708
            if source608_channel_number is not None:
                self._values["source608_channel_number"] = source608_channel_number

        @builtins.property
        def convert608_to708(self) -> typing.Optional[builtins.str]:
            '''If upconvert, 608 data is both passed through the "608 compatibility bytes" fields of the 708 wrapper as well as translated into 708.

            Any 708 data present in the source content is discarded.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte20sourcesettings.html#cfn-medialive-channel-scte20sourcesettings-convert608to708
            '''
            result = self._values.get("convert608_to708")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def source608_channel_number(self) -> typing.Optional[jsii.Number]:
            '''Specifies the 608/708 channel number within the video track from which to extract captions.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte20sourcesettings.html#cfn-medialive-channel-scte20sourcesettings-source608channelnumber
            '''
            result = self._values.get("source608_channel_number")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "Scte20SourceSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.Scte27DestinationSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={},
    )
    class Scte27DestinationSettingsProperty:
        def __init__(self) -> None:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte27destinationsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                scte27_destination_settings_property = medialive.CfnChannel.Scte27DestinationSettingsProperty()
            '''
            self._values: typing.Dict[builtins.str, typing.Any] = {}

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "Scte27DestinationSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.Scte27SourceSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"ocr_language": "ocrLanguage", "pid": "pid"},
    )
    class Scte27SourceSettingsProperty:
        def __init__(
            self,
            *,
            ocr_language: typing.Optional[builtins.str] = None,
            pid: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Information about the SCTE-27 captions to extract from the input.

            The parent of this entity is CaptionSelectorSettings.

            :param ocr_language: If you will configure a WebVTT caption description that references this caption selector, use this field to provide the language to consider when translating the image-based source to text.
            :param pid: The PID field is used in conjunction with the captions selector languageCode field as follows: Specify PID and Language: Extracts captions from that PID; the language is "informational." Specify PID and omit Language: Extracts the specified PID. Omit PID and specify Language: Extracts the specified language, whichever PID that happens to be. Omit PID and omit Language: Valid only if source is DVB-Sub that is being passed through; all languages are passed through.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte27sourcesettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                scte27_source_settings_property = medialive.CfnChannel.Scte27SourceSettingsProperty(
                    ocr_language="ocrLanguage",
                    pid=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__01b61a555f88a4661d6bded9dd0b713190dddc3a647ad4a9fb2e521ab3715e2f)
                check_type(argname="argument ocr_language", value=ocr_language, expected_type=type_hints["ocr_language"])
                check_type(argname="argument pid", value=pid, expected_type=type_hints["pid"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if ocr_language is not None:
                self._values["ocr_language"] = ocr_language
            if pid is not None:
                self._values["pid"] = pid

        @builtins.property
        def ocr_language(self) -> typing.Optional[builtins.str]:
            '''If you will configure a WebVTT caption description that references this caption selector, use this field to provide the language to consider when translating the image-based source to text.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte27sourcesettings.html#cfn-medialive-channel-scte27sourcesettings-ocrlanguage
            '''
            result = self._values.get("ocr_language")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def pid(self) -> typing.Optional[jsii.Number]:
            '''The PID field is used in conjunction with the captions selector languageCode field as follows: Specify PID and Language: Extracts captions from that PID;

            the language is "informational." Specify PID and omit Language: Extracts the specified PID. Omit PID and specify Language: Extracts the specified language, whichever PID that happens to be. Omit PID and omit Language: Valid only if source is DVB-Sub that is being passed through; all languages are passed through.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte27sourcesettings.html#cfn-medialive-channel-scte27sourcesettings-pid
            '''
            result = self._values.get("pid")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "Scte27SourceSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.Scte35SpliceInsertProperty",
        jsii_struct_bases=[],
        name_mapping={
            "ad_avail_offset": "adAvailOffset",
            "no_regional_blackout_flag": "noRegionalBlackoutFlag",
            "web_delivery_allowed_flag": "webDeliveryAllowedFlag",
        },
    )
    class Scte35SpliceInsertProperty:
        def __init__(
            self,
            *,
            ad_avail_offset: typing.Optional[jsii.Number] = None,
            no_regional_blackout_flag: typing.Optional[builtins.str] = None,
            web_delivery_allowed_flag: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The setup of SCTE-35 splice insert handling.

            The parent of this entity is AvailSettings.

            :param ad_avail_offset: When specified, this offset (in milliseconds) is added to the input ad avail PTS time. This applies only to embedded SCTE 104/35 messages. It doesn't apply to OOB messages.
            :param no_regional_blackout_flag: When set to ignore, segment descriptors with noRegionalBlackoutFlag set to 0 no longer trigger blackouts or ad avail slates.
            :param web_delivery_allowed_flag: When set to ignore, segment descriptors with webDeliveryAllowedFlag set to 0 no longer trigger blackouts or ad avail slates.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35spliceinsert.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                scte35_splice_insert_property = medialive.CfnChannel.Scte35SpliceInsertProperty(
                    ad_avail_offset=123,
                    no_regional_blackout_flag="noRegionalBlackoutFlag",
                    web_delivery_allowed_flag="webDeliveryAllowedFlag"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__cd5728050502cafe4266390cab341bfc52ac23cbd4e63e61b41e733c7de3e4d1)
                check_type(argname="argument ad_avail_offset", value=ad_avail_offset, expected_type=type_hints["ad_avail_offset"])
                check_type(argname="argument no_regional_blackout_flag", value=no_regional_blackout_flag, expected_type=type_hints["no_regional_blackout_flag"])
                check_type(argname="argument web_delivery_allowed_flag", value=web_delivery_allowed_flag, expected_type=type_hints["web_delivery_allowed_flag"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if ad_avail_offset is not None:
                self._values["ad_avail_offset"] = ad_avail_offset
            if no_regional_blackout_flag is not None:
                self._values["no_regional_blackout_flag"] = no_regional_blackout_flag
            if web_delivery_allowed_flag is not None:
                self._values["web_delivery_allowed_flag"] = web_delivery_allowed_flag

        @builtins.property
        def ad_avail_offset(self) -> typing.Optional[jsii.Number]:
            '''When specified, this offset (in milliseconds) is added to the input ad avail PTS time.

            This applies only to embedded SCTE 104/35 messages. It doesn't apply to OOB messages.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35spliceinsert.html#cfn-medialive-channel-scte35spliceinsert-adavailoffset
            '''
            result = self._values.get("ad_avail_offset")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def no_regional_blackout_flag(self) -> typing.Optional[builtins.str]:
            '''When set to ignore, segment descriptors with noRegionalBlackoutFlag set to 0 no longer trigger blackouts or ad avail slates.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35spliceinsert.html#cfn-medialive-channel-scte35spliceinsert-noregionalblackoutflag
            '''
            result = self._values.get("no_regional_blackout_flag")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def web_delivery_allowed_flag(self) -> typing.Optional[builtins.str]:
            '''When set to ignore, segment descriptors with webDeliveryAllowedFlag set to 0 no longer trigger blackouts or ad avail slates.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35spliceinsert.html#cfn-medialive-channel-scte35spliceinsert-webdeliveryallowedflag
            '''
            result = self._values.get("web_delivery_allowed_flag")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "Scte35SpliceInsertProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.Scte35TimeSignalAposProperty",
        jsii_struct_bases=[],
        name_mapping={
            "ad_avail_offset": "adAvailOffset",
            "no_regional_blackout_flag": "noRegionalBlackoutFlag",
            "web_delivery_allowed_flag": "webDeliveryAllowedFlag",
        },
    )
    class Scte35TimeSignalAposProperty:
        def __init__(
            self,
            *,
            ad_avail_offset: typing.Optional[jsii.Number] = None,
            no_regional_blackout_flag: typing.Optional[builtins.str] = None,
            web_delivery_allowed_flag: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The settings for the SCTE-35 time signal APOS mode.

            The parent of this entity is AvailSettings.

            :param ad_avail_offset: When specified, this offset (in milliseconds) is added to the input ad avail PTS time. This applies only to embedded SCTE 104/35 messages. It doesn't apply to OOB messages.
            :param no_regional_blackout_flag: When set to ignore, segment descriptors with noRegionalBlackoutFlag set to 0 no longer trigger blackouts or ad avail slates.
            :param web_delivery_allowed_flag: When set to ignore, segment descriptors with webDeliveryAllowedFlag set to 0 no longer trigger blackouts or ad avail slates.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35timesignalapos.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                scte35_time_signal_apos_property = medialive.CfnChannel.Scte35TimeSignalAposProperty(
                    ad_avail_offset=123,
                    no_regional_blackout_flag="noRegionalBlackoutFlag",
                    web_delivery_allowed_flag="webDeliveryAllowedFlag"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__10d53938ab39b895d66d51ac4942026de711810f8220771dd959a93c12fe8394)
                check_type(argname="argument ad_avail_offset", value=ad_avail_offset, expected_type=type_hints["ad_avail_offset"])
                check_type(argname="argument no_regional_blackout_flag", value=no_regional_blackout_flag, expected_type=type_hints["no_regional_blackout_flag"])
                check_type(argname="argument web_delivery_allowed_flag", value=web_delivery_allowed_flag, expected_type=type_hints["web_delivery_allowed_flag"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if ad_avail_offset is not None:
                self._values["ad_avail_offset"] = ad_avail_offset
            if no_regional_blackout_flag is not None:
                self._values["no_regional_blackout_flag"] = no_regional_blackout_flag
            if web_delivery_allowed_flag is not None:
                self._values["web_delivery_allowed_flag"] = web_delivery_allowed_flag

        @builtins.property
        def ad_avail_offset(self) -> typing.Optional[jsii.Number]:
            '''When specified, this offset (in milliseconds) is added to the input ad avail PTS time.

            This applies only to embedded SCTE 104/35 messages. It doesn't apply to OOB messages.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35timesignalapos.html#cfn-medialive-channel-scte35timesignalapos-adavailoffset
            '''
            result = self._values.get("ad_avail_offset")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def no_regional_blackout_flag(self) -> typing.Optional[builtins.str]:
            '''When set to ignore, segment descriptors with noRegionalBlackoutFlag set to 0 no longer trigger blackouts or ad avail slates.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35timesignalapos.html#cfn-medialive-channel-scte35timesignalapos-noregionalblackoutflag
            '''
            result = self._values.get("no_regional_blackout_flag")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def web_delivery_allowed_flag(self) -> typing.Optional[builtins.str]:
            '''When set to ignore, segment descriptors with webDeliveryAllowedFlag set to 0 no longer trigger blackouts or ad avail slates.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-scte35timesignalapos.html#cfn-medialive-channel-scte35timesignalapos-webdeliveryallowedflag
            '''
            result = self._values.get("web_delivery_allowed_flag")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "Scte35TimeSignalAposProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.SmpteTtDestinationSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={},
    )
    class SmpteTtDestinationSettingsProperty:
        def __init__(self) -> None:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-smptettdestinationsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                smpte_tt_destination_settings_property = medialive.CfnChannel.SmpteTtDestinationSettingsProperty()
            '''
            self._values: typing.Dict[builtins.str, typing.Any] = {}

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "SmpteTtDestinationSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.StandardHlsSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "audio_rendition_sets": "audioRenditionSets",
            "m3_u8_settings": "m3U8Settings",
        },
    )
    class StandardHlsSettingsProperty:
        def __init__(
            self,
            *,
            audio_rendition_sets: typing.Optional[builtins.str] = None,
            m3_u8_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.M3u8SettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The configuration of an HLS output that is a standard output (not an audio-only output).

            The parent of this entity is HlsSettings.

            :param audio_rendition_sets: Lists all the audio groups that are used with the video output stream. This inputs all the audio GROUP-IDs that are associated with the video, separated by a comma (,).
            :param m3_u8_settings: Settings for the M3U8 container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-standardhlssettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                standard_hls_settings_property = medialive.CfnChannel.StandardHlsSettingsProperty(
                    audio_rendition_sets="audioRenditionSets",
                    m3_u8_settings=medialive.CfnChannel.M3u8SettingsProperty(
                        audio_frames_per_pes=123,
                        audio_pids="audioPids",
                        ecm_pid="ecmPid",
                        klv_behavior="klvBehavior",
                        klv_data_pids="klvDataPids",
                        nielsen_id3_behavior="nielsenId3Behavior",
                        pat_interval=123,
                        pcr_control="pcrControl",
                        pcr_period=123,
                        pcr_pid="pcrPid",
                        pmt_interval=123,
                        pmt_pid="pmtPid",
                        program_num=123,
                        scte35_behavior="scte35Behavior",
                        scte35_pid="scte35Pid",
                        timed_metadata_behavior="timedMetadataBehavior",
                        timed_metadata_pid="timedMetadataPid",
                        transport_stream_id=123,
                        video_pid="videoPid"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__6282ff8146dd7047a6e35269e1ea9d022c2ba9ef828b8a798d53cf288e598b31)
                check_type(argname="argument audio_rendition_sets", value=audio_rendition_sets, expected_type=type_hints["audio_rendition_sets"])
                check_type(argname="argument m3_u8_settings", value=m3_u8_settings, expected_type=type_hints["m3_u8_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if audio_rendition_sets is not None:
                self._values["audio_rendition_sets"] = audio_rendition_sets
            if m3_u8_settings is not None:
                self._values["m3_u8_settings"] = m3_u8_settings

        @builtins.property
        def audio_rendition_sets(self) -> typing.Optional[builtins.str]:
            '''Lists all the audio groups that are used with the video output stream.

            This inputs all the audio GROUP-IDs that are associated with the video, separated by a comma (,).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-standardhlssettings.html#cfn-medialive-channel-standardhlssettings-audiorenditionsets
            '''
            result = self._values.get("audio_rendition_sets")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def m3_u8_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.M3u8SettingsProperty"]]:
            '''Settings for the M3U8 container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-standardhlssettings.html#cfn-medialive-channel-standardhlssettings-m3u8settings
            '''
            result = self._values.get("m3_u8_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.M3u8SettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "StandardHlsSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.StaticKeySettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "key_provider_server": "keyProviderServer",
            "static_key_value": "staticKeyValue",
        },
    )
    class StaticKeySettingsProperty:
        def __init__(
            self,
            *,
            key_provider_server: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.InputLocationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            static_key_value: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The static key settings.

            The parent of this entity is KeyProviderSettings.

            :param key_provider_server: The URL of the license server that is used for protecting content.
            :param static_key_value: The static key value as a 32 character hexadecimal string.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-statickeysettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                static_key_settings_property = medialive.CfnChannel.StaticKeySettingsProperty(
                    key_provider_server=medialive.CfnChannel.InputLocationProperty(
                        password_param="passwordParam",
                        uri="uri",
                        username="username"
                    ),
                    static_key_value="staticKeyValue"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__0c42637a242c4fddc1c7f3bdb57e6b6a7d79fda8b49885dfbfa497ba2ce035c3)
                check_type(argname="argument key_provider_server", value=key_provider_server, expected_type=type_hints["key_provider_server"])
                check_type(argname="argument static_key_value", value=static_key_value, expected_type=type_hints["static_key_value"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if key_provider_server is not None:
                self._values["key_provider_server"] = key_provider_server
            if static_key_value is not None:
                self._values["static_key_value"] = static_key_value

        @builtins.property
        def key_provider_server(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputLocationProperty"]]:
            '''The URL of the license server that is used for protecting content.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-statickeysettings.html#cfn-medialive-channel-statickeysettings-keyproviderserver
            '''
            result = self._values.get("key_provider_server")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.InputLocationProperty"]], result)

        @builtins.property
        def static_key_value(self) -> typing.Optional[builtins.str]:
            '''The static key value as a 32 character hexadecimal string.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-statickeysettings.html#cfn-medialive-channel-statickeysettings-statickeyvalue
            '''
            result = self._values.get("static_key_value")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "StaticKeySettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.TeletextDestinationSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={},
    )
    class TeletextDestinationSettingsProperty:
        def __init__(self) -> None:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-teletextdestinationsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                teletext_destination_settings_property = medialive.CfnChannel.TeletextDestinationSettingsProperty()
            '''
            self._values: typing.Dict[builtins.str, typing.Any] = {}

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "TeletextDestinationSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.TeletextSourceSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "output_rectangle": "outputRectangle",
            "page_number": "pageNumber",
        },
    )
    class TeletextSourceSettingsProperty:
        def __init__(
            self,
            *,
            output_rectangle: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.CaptionRectangleProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            page_number: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Information about the Teletext captions to extract from the input.

            The parent of this entity is CaptionSelectorSettings.

            :param output_rectangle: Settings to configure the caption rectangle for an output captions that will be created using this Teletext source captions.
            :param page_number: Specifies the Teletext page number within the data stream from which to extract captions. The range is 0x100 (256) to 0x8FF (2303). This is unused for passthrough. It should be specified as a hexadecimal string with no "0x" prefix.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-teletextsourcesettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                teletext_source_settings_property = medialive.CfnChannel.TeletextSourceSettingsProperty(
                    output_rectangle=medialive.CfnChannel.CaptionRectangleProperty(
                        height=123,
                        left_offset=123,
                        top_offset=123,
                        width=123
                    ),
                    page_number="pageNumber"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__4b7c17e94bced98dc97ab415790d86e43392aa9b05ff6fe73db783a3081de3e0)
                check_type(argname="argument output_rectangle", value=output_rectangle, expected_type=type_hints["output_rectangle"])
                check_type(argname="argument page_number", value=page_number, expected_type=type_hints["page_number"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if output_rectangle is not None:
                self._values["output_rectangle"] = output_rectangle
            if page_number is not None:
                self._values["page_number"] = page_number

        @builtins.property
        def output_rectangle(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.CaptionRectangleProperty"]]:
            '''Settings to configure the caption rectangle for an output captions that will be created using this Teletext source captions.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-teletextsourcesettings.html#cfn-medialive-channel-teletextsourcesettings-outputrectangle
            '''
            result = self._values.get("output_rectangle")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.CaptionRectangleProperty"]], result)

        @builtins.property
        def page_number(self) -> typing.Optional[builtins.str]:
            '''Specifies the Teletext page number within the data stream from which to extract captions.

            The range is 0x100 (256) to 0x8FF (2303). This is unused for passthrough. It should be specified as a hexadecimal string with no "0x" prefix.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-teletextsourcesettings.html#cfn-medialive-channel-teletextsourcesettings-pagenumber
            '''
            result = self._values.get("page_number")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "TeletextSourceSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.TemporalFilterSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "post_filter_sharpening": "postFilterSharpening",
            "strength": "strength",
        },
    )
    class TemporalFilterSettingsProperty:
        def __init__(
            self,
            *,
            post_filter_sharpening: typing.Optional[builtins.str] = None,
            strength: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Settings for the temporal filter to apply to the video.

            The parents of this entity are H264FilterSettings, H265FilterSettings, and Mpeg2FilterSettings.

            :param post_filter_sharpening: If you enable this filter, the results are the following: - If the source content is noisy (it contains excessive digital artifacts), the filter cleans up the source. - If the source content is already clean, the filter tends to decrease the bitrate, especially when the rate control mode is QVBR.
            :param strength: Choose a filter strength. We recommend a strength of 1 or 2. A higher strength might take out good information, resulting in an image that is overly soft.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-temporalfiltersettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                temporal_filter_settings_property = medialive.CfnChannel.TemporalFilterSettingsProperty(
                    post_filter_sharpening="postFilterSharpening",
                    strength="strength"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__4041001c3f58cac0e8727dda099da6151fbeb3d601eca7a05bdf1b889774ee76)
                check_type(argname="argument post_filter_sharpening", value=post_filter_sharpening, expected_type=type_hints["post_filter_sharpening"])
                check_type(argname="argument strength", value=strength, expected_type=type_hints["strength"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if post_filter_sharpening is not None:
                self._values["post_filter_sharpening"] = post_filter_sharpening
            if strength is not None:
                self._values["strength"] = strength

        @builtins.property
        def post_filter_sharpening(self) -> typing.Optional[builtins.str]:
            '''If you enable this filter, the results are the following: - If the source content is noisy (it contains excessive digital artifacts), the filter cleans up the source.

            - If the source content is already clean, the filter tends to decrease the bitrate, especially when the rate control mode is QVBR.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-temporalfiltersettings.html#cfn-medialive-channel-temporalfiltersettings-postfiltersharpening
            '''
            result = self._values.get("post_filter_sharpening")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def strength(self) -> typing.Optional[builtins.str]:
            '''Choose a filter strength.

            We recommend a strength of 1 or 2. A higher strength might take out good information, resulting in an image that is overly soft.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-temporalfiltersettings.html#cfn-medialive-channel-temporalfiltersettings-strength
            '''
            result = self._values.get("strength")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "TemporalFilterSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.ThumbnailConfigurationProperty",
        jsii_struct_bases=[],
        name_mapping={"state": "state"},
    )
    class ThumbnailConfigurationProperty:
        def __init__(self, *, state: typing.Optional[builtins.str] = None) -> None:
            '''
            :param state: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-thumbnailconfiguration.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                thumbnail_configuration_property = medialive.CfnChannel.ThumbnailConfigurationProperty(
                    state="state"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__4acdfd91d8e420caae7697e44720207ed0a85171d211d0a02a042d3f4fae4806)
                check_type(argname="argument state", value=state, expected_type=type_hints["state"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if state is not None:
                self._values["state"] = state

        @builtins.property
        def state(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-thumbnailconfiguration.html#cfn-medialive-channel-thumbnailconfiguration-state
            '''
            result = self._values.get("state")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ThumbnailConfigurationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.TimecodeBurninSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "font_size": "fontSize",
            "position": "position",
            "prefix": "prefix",
        },
    )
    class TimecodeBurninSettingsProperty:
        def __init__(
            self,
            *,
            font_size: typing.Optional[builtins.str] = None,
            position: typing.Optional[builtins.str] = None,
            prefix: typing.Optional[builtins.str] = None,
        ) -> None:
            '''
            :param font_size: 
            :param position: 
            :param prefix: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-timecodeburninsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                timecode_burnin_settings_property = medialive.CfnChannel.TimecodeBurninSettingsProperty(
                    font_size="fontSize",
                    position="position",
                    prefix="prefix"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__2d6f9c37484b2c816642daacc79b039618c8dbe8c7a82de9fc7051995af5098b)
                check_type(argname="argument font_size", value=font_size, expected_type=type_hints["font_size"])
                check_type(argname="argument position", value=position, expected_type=type_hints["position"])
                check_type(argname="argument prefix", value=prefix, expected_type=type_hints["prefix"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if font_size is not None:
                self._values["font_size"] = font_size
            if position is not None:
                self._values["position"] = position
            if prefix is not None:
                self._values["prefix"] = prefix

        @builtins.property
        def font_size(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-timecodeburninsettings.html#cfn-medialive-channel-timecodeburninsettings-fontsize
            '''
            result = self._values.get("font_size")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def position(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-timecodeburninsettings.html#cfn-medialive-channel-timecodeburninsettings-position
            '''
            result = self._values.get("position")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def prefix(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-timecodeburninsettings.html#cfn-medialive-channel-timecodeburninsettings-prefix
            '''
            result = self._values.get("prefix")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "TimecodeBurninSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.TimecodeConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"source": "source", "sync_threshold": "syncThreshold"},
    )
    class TimecodeConfigProperty:
        def __init__(
            self,
            *,
            source: typing.Optional[builtins.str] = None,
            sync_threshold: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The configuration of the timecode in the output.

            The parent of this entity is EncoderSettings.

            :param source: Identifies the source for the timecode that will be associated with the channel outputs. Embedded (embedded): Initialize the output timecode with timecode from the source. If no embedded timecode is detected in the source, the system falls back to using "Start at 0" (zerobased). System Clock (systemclock): Use the UTC time. Start at 0 (zerobased): The time of the first frame of the channel will be 00:00:00:00.
            :param sync_threshold: The threshold in frames beyond which output timecode is resynchronized to the input timecode. Discrepancies below this threshold are permitted to avoid unnecessary discontinuities in the output timecode. There is no timecode sync when this is not specified.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-timecodeconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                timecode_config_property = medialive.CfnChannel.TimecodeConfigProperty(
                    source="source",
                    sync_threshold=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__b61ce73d0d5ba2fae4ed90dcdba3020870d646aa62230e9c170100f3ae3e549f)
                check_type(argname="argument source", value=source, expected_type=type_hints["source"])
                check_type(argname="argument sync_threshold", value=sync_threshold, expected_type=type_hints["sync_threshold"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if source is not None:
                self._values["source"] = source
            if sync_threshold is not None:
                self._values["sync_threshold"] = sync_threshold

        @builtins.property
        def source(self) -> typing.Optional[builtins.str]:
            '''Identifies the source for the timecode that will be associated with the channel outputs.

            Embedded (embedded): Initialize the output timecode with timecode from the source. If no embedded timecode is detected in the source, the system falls back to using "Start at 0" (zerobased). System Clock (systemclock): Use the UTC time. Start at 0 (zerobased): The time of the first frame of the channel will be 00:00:00:00.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-timecodeconfig.html#cfn-medialive-channel-timecodeconfig-source
            '''
            result = self._values.get("source")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def sync_threshold(self) -> typing.Optional[jsii.Number]:
            '''The threshold in frames beyond which output timecode is resynchronized to the input timecode.

            Discrepancies below this threshold are permitted to avoid unnecessary discontinuities in the output timecode. There is no timecode sync when this is not specified.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-timecodeconfig.html#cfn-medialive-channel-timecodeconfig-syncthreshold
            '''
            result = self._values.get("sync_threshold")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "TimecodeConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.TtmlDestinationSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"style_control": "styleControl"},
    )
    class TtmlDestinationSettingsProperty:
        def __init__(
            self,
            *,
            style_control: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The setup of TTML captions in the output.

            The parent of this entity is CaptionDestinationSettings.

            :param style_control: When set to passthrough, passes through style and position information from a TTML-like input source (TTML, SMPTE-TT, CFF-TT) to the CFF-TT output or TTML output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ttmldestinationsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                ttml_destination_settings_property = medialive.CfnChannel.TtmlDestinationSettingsProperty(
                    style_control="styleControl"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__2181e12c4fa358ba7b93757ed64a91bee0a4bbcdfd93b078d2112aef707a0ab9)
                check_type(argname="argument style_control", value=style_control, expected_type=type_hints["style_control"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if style_control is not None:
                self._values["style_control"] = style_control

        @builtins.property
        def style_control(self) -> typing.Optional[builtins.str]:
            '''When set to passthrough, passes through style and position information from a TTML-like input source (TTML, SMPTE-TT, CFF-TT) to the CFF-TT output or TTML output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-ttmldestinationsettings.html#cfn-medialive-channel-ttmldestinationsettings-stylecontrol
            '''
            result = self._values.get("style_control")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "TtmlDestinationSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.UdpContainerSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"m2_ts_settings": "m2TsSettings"},
    )
    class UdpContainerSettingsProperty:
        def __init__(
            self,
            *,
            m2_ts_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.M2tsSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The configuration of a UDP output.

            The parent of this entity is UdpOutputSettings.

            :param m2_ts_settings: The M2TS configuration for this UDP output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpcontainersettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                udp_container_settings_property = medialive.CfnChannel.UdpContainerSettingsProperty(
                    m2_ts_settings=medialive.CfnChannel.M2tsSettingsProperty(
                        absent_input_audio_behavior="absentInputAudioBehavior",
                        arib="arib",
                        arib_captions_pid="aribCaptionsPid",
                        arib_captions_pid_control="aribCaptionsPidControl",
                        audio_buffer_model="audioBufferModel",
                        audio_frames_per_pes=123,
                        audio_pids="audioPids",
                        audio_stream_type="audioStreamType",
                        bitrate=123,
                        buffer_model="bufferModel",
                        cc_descriptor="ccDescriptor",
                        dvb_nit_settings=medialive.CfnChannel.DvbNitSettingsProperty(
                            network_id=123,
                            network_name="networkName",
                            rep_interval=123
                        ),
                        dvb_sdt_settings=medialive.CfnChannel.DvbSdtSettingsProperty(
                            output_sdt="outputSdt",
                            rep_interval=123,
                            service_name="serviceName",
                            service_provider_name="serviceProviderName"
                        ),
                        dvb_sub_pids="dvbSubPids",
                        dvb_tdt_settings=medialive.CfnChannel.DvbTdtSettingsProperty(
                            rep_interval=123
                        ),
                        dvb_teletext_pid="dvbTeletextPid",
                        ebif="ebif",
                        ebp_audio_interval="ebpAudioInterval",
                        ebp_lookahead_ms=123,
                        ebp_placement="ebpPlacement",
                        ecm_pid="ecmPid",
                        es_rate_in_pes="esRateInPes",
                        etv_platform_pid="etvPlatformPid",
                        etv_signal_pid="etvSignalPid",
                        fragment_time=123,
                        klv="klv",
                        klv_data_pids="klvDataPids",
                        nielsen_id3_behavior="nielsenId3Behavior",
                        null_packet_bitrate=123,
                        pat_interval=123,
                        pcr_control="pcrControl",
                        pcr_period=123,
                        pcr_pid="pcrPid",
                        pmt_interval=123,
                        pmt_pid="pmtPid",
                        program_num=123,
                        rate_mode="rateMode",
                        scte27_pids="scte27Pids",
                        scte35_control="scte35Control",
                        scte35_pid="scte35Pid",
                        scte35_preroll_pullup_milliseconds=123,
                        segmentation_markers="segmentationMarkers",
                        segmentation_style="segmentationStyle",
                        segmentation_time=123,
                        timed_metadata_behavior="timedMetadataBehavior",
                        timed_metadata_pid="timedMetadataPid",
                        transport_stream_id=123,
                        video_pid="videoPid"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__8fb5c1fe7bf33a5f1a54ccb4c98ba31a4e8c79fccc734b033ede818a2b47172e)
                check_type(argname="argument m2_ts_settings", value=m2_ts_settings, expected_type=type_hints["m2_ts_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if m2_ts_settings is not None:
                self._values["m2_ts_settings"] = m2_ts_settings

        @builtins.property
        def m2_ts_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.M2tsSettingsProperty"]]:
            '''The M2TS configuration for this UDP output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpcontainersettings.html#cfn-medialive-channel-udpcontainersettings-m2tssettings
            '''
            result = self._values.get("m2_ts_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.M2tsSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "UdpContainerSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.UdpGroupSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "input_loss_action": "inputLossAction",
            "timed_metadata_id3_frame": "timedMetadataId3Frame",
            "timed_metadata_id3_period": "timedMetadataId3Period",
        },
    )
    class UdpGroupSettingsProperty:
        def __init__(
            self,
            *,
            input_loss_action: typing.Optional[builtins.str] = None,
            timed_metadata_id3_frame: typing.Optional[builtins.str] = None,
            timed_metadata_id3_period: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The configuration of a UDP output group.

            The parent of this entity is OutputGroupSettings.

            :param input_loss_action: Specifies the behavior of the last resort when the input video is lost, and no more backup inputs are available. When dropTs is selected, the entire transport stream stops emitting. When dropProgram is selected, the program can be dropped from the transport stream (and replaced with null packets to meet the TS bitrate requirement). Or when emitProgram is selected, the transport stream continues to be produced normally with repeat frames, black frames, or slate frames substituted for the absent input video.
            :param timed_metadata_id3_frame: Indicates the ID3 frame that has the timecode.
            :param timed_metadata_id3_period: The timed metadata interval in seconds.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpgroupsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                udp_group_settings_property = medialive.CfnChannel.UdpGroupSettingsProperty(
                    input_loss_action="inputLossAction",
                    timed_metadata_id3_frame="timedMetadataId3Frame",
                    timed_metadata_id3_period=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__dd077cf89169f1eefbeed92ea9dd80884c2ed3cf9c1b923c96f56c187a3f7e47)
                check_type(argname="argument input_loss_action", value=input_loss_action, expected_type=type_hints["input_loss_action"])
                check_type(argname="argument timed_metadata_id3_frame", value=timed_metadata_id3_frame, expected_type=type_hints["timed_metadata_id3_frame"])
                check_type(argname="argument timed_metadata_id3_period", value=timed_metadata_id3_period, expected_type=type_hints["timed_metadata_id3_period"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if input_loss_action is not None:
                self._values["input_loss_action"] = input_loss_action
            if timed_metadata_id3_frame is not None:
                self._values["timed_metadata_id3_frame"] = timed_metadata_id3_frame
            if timed_metadata_id3_period is not None:
                self._values["timed_metadata_id3_period"] = timed_metadata_id3_period

        @builtins.property
        def input_loss_action(self) -> typing.Optional[builtins.str]:
            '''Specifies the behavior of the last resort when the input video is lost, and no more backup inputs are available.

            When dropTs is selected, the entire transport stream stops emitting. When dropProgram is selected, the program can be dropped from the transport stream (and replaced with null packets to meet the TS bitrate requirement). Or when emitProgram is selected, the transport stream continues to be produced normally with repeat frames, black frames, or slate frames substituted for the absent input video.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpgroupsettings.html#cfn-medialive-channel-udpgroupsettings-inputlossaction
            '''
            result = self._values.get("input_loss_action")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def timed_metadata_id3_frame(self) -> typing.Optional[builtins.str]:
            '''Indicates the ID3 frame that has the timecode.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpgroupsettings.html#cfn-medialive-channel-udpgroupsettings-timedmetadataid3frame
            '''
            result = self._values.get("timed_metadata_id3_frame")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def timed_metadata_id3_period(self) -> typing.Optional[jsii.Number]:
            '''The timed metadata interval in seconds.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpgroupsettings.html#cfn-medialive-channel-udpgroupsettings-timedmetadataid3period
            '''
            result = self._values.get("timed_metadata_id3_period")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "UdpGroupSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.UdpOutputSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "buffer_msec": "bufferMsec",
            "container_settings": "containerSettings",
            "destination": "destination",
            "fec_output_settings": "fecOutputSettings",
        },
    )
    class UdpOutputSettingsProperty:
        def __init__(
            self,
            *,
            buffer_msec: typing.Optional[jsii.Number] = None,
            container_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.UdpContainerSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            destination: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.OutputLocationRefProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            fec_output_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.FecOutputSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The settings for one UDP output.

            The parent of this entity is OutputSettings.

            :param buffer_msec: The UDP output buffering in milliseconds. Larger values increase latency through the transcoder but simultaneously assist the transcoder in maintaining a constant, low-jitter UDP/RTP output while accommodating clock recovery, input switching, input disruptions, picture reordering, and so on.
            :param container_settings: The settings for the UDP output.
            :param destination: The destination address and port number for RTP or UDP packets. These can be unicast or multicast RTP or UDP (for example, rtp://239.10.10.10:5001 or udp://10.100.100.100:5002).
            :param fec_output_settings: The settings for enabling and adjusting Forward Error Correction on UDP outputs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpoutputsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                udp_output_settings_property = medialive.CfnChannel.UdpOutputSettingsProperty(
                    buffer_msec=123,
                    container_settings=medialive.CfnChannel.UdpContainerSettingsProperty(
                        m2_ts_settings=medialive.CfnChannel.M2tsSettingsProperty(
                            absent_input_audio_behavior="absentInputAudioBehavior",
                            arib="arib",
                            arib_captions_pid="aribCaptionsPid",
                            arib_captions_pid_control="aribCaptionsPidControl",
                            audio_buffer_model="audioBufferModel",
                            audio_frames_per_pes=123,
                            audio_pids="audioPids",
                            audio_stream_type="audioStreamType",
                            bitrate=123,
                            buffer_model="bufferModel",
                            cc_descriptor="ccDescriptor",
                            dvb_nit_settings=medialive.CfnChannel.DvbNitSettingsProperty(
                                network_id=123,
                                network_name="networkName",
                                rep_interval=123
                            ),
                            dvb_sdt_settings=medialive.CfnChannel.DvbSdtSettingsProperty(
                                output_sdt="outputSdt",
                                rep_interval=123,
                                service_name="serviceName",
                                service_provider_name="serviceProviderName"
                            ),
                            dvb_sub_pids="dvbSubPids",
                            dvb_tdt_settings=medialive.CfnChannel.DvbTdtSettingsProperty(
                                rep_interval=123
                            ),
                            dvb_teletext_pid="dvbTeletextPid",
                            ebif="ebif",
                            ebp_audio_interval="ebpAudioInterval",
                            ebp_lookahead_ms=123,
                            ebp_placement="ebpPlacement",
                            ecm_pid="ecmPid",
                            es_rate_in_pes="esRateInPes",
                            etv_platform_pid="etvPlatformPid",
                            etv_signal_pid="etvSignalPid",
                            fragment_time=123,
                            klv="klv",
                            klv_data_pids="klvDataPids",
                            nielsen_id3_behavior="nielsenId3Behavior",
                            null_packet_bitrate=123,
                            pat_interval=123,
                            pcr_control="pcrControl",
                            pcr_period=123,
                            pcr_pid="pcrPid",
                            pmt_interval=123,
                            pmt_pid="pmtPid",
                            program_num=123,
                            rate_mode="rateMode",
                            scte27_pids="scte27Pids",
                            scte35_control="scte35Control",
                            scte35_pid="scte35Pid",
                            scte35_preroll_pullup_milliseconds=123,
                            segmentation_markers="segmentationMarkers",
                            segmentation_style="segmentationStyle",
                            segmentation_time=123,
                            timed_metadata_behavior="timedMetadataBehavior",
                            timed_metadata_pid="timedMetadataPid",
                            transport_stream_id=123,
                            video_pid="videoPid"
                        )
                    ),
                    destination=medialive.CfnChannel.OutputLocationRefProperty(
                        destination_ref_id="destinationRefId"
                    ),
                    fec_output_settings=medialive.CfnChannel.FecOutputSettingsProperty(
                        column_depth=123,
                        include_fec="includeFec",
                        row_length=123
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__c92d35d997681a1da39917e53172381548a4faa273034afe7ebc4f83309ea92d)
                check_type(argname="argument buffer_msec", value=buffer_msec, expected_type=type_hints["buffer_msec"])
                check_type(argname="argument container_settings", value=container_settings, expected_type=type_hints["container_settings"])
                check_type(argname="argument destination", value=destination, expected_type=type_hints["destination"])
                check_type(argname="argument fec_output_settings", value=fec_output_settings, expected_type=type_hints["fec_output_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if buffer_msec is not None:
                self._values["buffer_msec"] = buffer_msec
            if container_settings is not None:
                self._values["container_settings"] = container_settings
            if destination is not None:
                self._values["destination"] = destination
            if fec_output_settings is not None:
                self._values["fec_output_settings"] = fec_output_settings

        @builtins.property
        def buffer_msec(self) -> typing.Optional[jsii.Number]:
            '''The UDP output buffering in milliseconds.

            Larger values increase latency through the transcoder but simultaneously assist the transcoder in maintaining a constant, low-jitter UDP/RTP output while accommodating clock recovery, input switching, input disruptions, picture reordering, and so on.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpoutputsettings.html#cfn-medialive-channel-udpoutputsettings-buffermsec
            '''
            result = self._values.get("buffer_msec")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def container_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.UdpContainerSettingsProperty"]]:
            '''The settings for the UDP output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpoutputsettings.html#cfn-medialive-channel-udpoutputsettings-containersettings
            '''
            result = self._values.get("container_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.UdpContainerSettingsProperty"]], result)

        @builtins.property
        def destination(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputLocationRefProperty"]]:
            '''The destination address and port number for RTP or UDP packets.

            These can be unicast or multicast RTP or UDP (for example, rtp://239.10.10.10:5001 or udp://10.100.100.100:5002).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpoutputsettings.html#cfn-medialive-channel-udpoutputsettings-destination
            '''
            result = self._values.get("destination")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.OutputLocationRefProperty"]], result)

        @builtins.property
        def fec_output_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.FecOutputSettingsProperty"]]:
            '''The settings for enabling and adjusting Forward Error Correction on UDP outputs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-udpoutputsettings.html#cfn-medialive-channel-udpoutputsettings-fecoutputsettings
            '''
            result = self._values.get("fec_output_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.FecOutputSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "UdpOutputSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.VideoBlackFailoverSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "black_detect_threshold": "blackDetectThreshold",
            "video_black_threshold_msec": "videoBlackThresholdMsec",
        },
    )
    class VideoBlackFailoverSettingsProperty:
        def __init__(
            self,
            *,
            black_detect_threshold: typing.Optional[jsii.Number] = None,
            video_black_threshold_msec: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''MediaLive will perform a failover if content is considered black for the specified period.

            The parent of this entity is FailoverConditionSettings.

            :param black_detect_threshold: A value used in calculating the threshold below which MediaLive considers a pixel to be 'black'. For the input to be considered black, every pixel in a frame must be below this threshold. The threshold is calculated as a percentage (expressed as a decimal) of white. Therefore .1 means 10% white (or 90% black). Note how the formula works for any color depth. For example, if you set this field to 0.1 in 10-bit color depth: (1023*0.1=102.3), which means a pixel value of 102 or less is 'black'. If you set this field to .1 in an 8-bit color depth: (255*0.1=25.5), which means a pixel value of 25 or less is 'black'. The range is 0.0 to 1.0, with any number of decimal places.
            :param video_black_threshold_msec: The amount of time (in milliseconds) that the active input must be black before automatic input failover occurs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoblackfailoversettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                video_black_failover_settings_property = medialive.CfnChannel.VideoBlackFailoverSettingsProperty(
                    black_detect_threshold=123,
                    video_black_threshold_msec=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__2efe3318d61d9cda558d7cd8116765a8df488cebc18165074826aaedb259166e)
                check_type(argname="argument black_detect_threshold", value=black_detect_threshold, expected_type=type_hints["black_detect_threshold"])
                check_type(argname="argument video_black_threshold_msec", value=video_black_threshold_msec, expected_type=type_hints["video_black_threshold_msec"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if black_detect_threshold is not None:
                self._values["black_detect_threshold"] = black_detect_threshold
            if video_black_threshold_msec is not None:
                self._values["video_black_threshold_msec"] = video_black_threshold_msec

        @builtins.property
        def black_detect_threshold(self) -> typing.Optional[jsii.Number]:
            '''A value used in calculating the threshold below which MediaLive considers a pixel to be 'black'.

            For the input to be considered black, every pixel in a frame must be below this threshold. The threshold is calculated as a percentage (expressed as a decimal) of white. Therefore .1 means 10% white (or 90% black). Note how the formula works for any color depth. For example, if you set this field to 0.1 in 10-bit color depth: (1023*0.1=102.3), which means a pixel value of 102 or less is 'black'. If you set this field to .1 in an 8-bit color depth: (255*0.1=25.5), which means a pixel value of 25 or less is 'black'. The range is 0.0 to 1.0, with any number of decimal places.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoblackfailoversettings.html#cfn-medialive-channel-videoblackfailoversettings-blackdetectthreshold
            '''
            result = self._values.get("black_detect_threshold")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def video_black_threshold_msec(self) -> typing.Optional[jsii.Number]:
            '''The amount of time (in milliseconds) that the active input must be black before automatic input failover occurs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoblackfailoversettings.html#cfn-medialive-channel-videoblackfailoversettings-videoblackthresholdmsec
            '''
            result = self._values.get("video_black_threshold_msec")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "VideoBlackFailoverSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.VideoCodecSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "frame_capture_settings": "frameCaptureSettings",
            "h264_settings": "h264Settings",
            "h265_settings": "h265Settings",
            "mpeg2_settings": "mpeg2Settings",
        },
    )
    class VideoCodecSettingsProperty:
        def __init__(
            self,
            *,
            frame_capture_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.FrameCaptureSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            h264_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.H264SettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            h265_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.H265SettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            mpeg2_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.Mpeg2SettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The settings for the video codec in the output.

            The parent of this entity is VideoDescription.

            :param frame_capture_settings: The settings for the video codec in a frame capture output.
            :param h264_settings: The settings for the H.264 codec in the output.
            :param h265_settings: Settings for video encoded with the H265 codec.
            :param mpeg2_settings: Settings for video encoded with the MPEG-2 codec.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videocodecsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                video_codec_settings_property = medialive.CfnChannel.VideoCodecSettingsProperty(
                    frame_capture_settings=medialive.CfnChannel.FrameCaptureSettingsProperty(
                        capture_interval=123,
                        capture_interval_units="captureIntervalUnits",
                        timecode_burnin_settings=medialive.CfnChannel.TimecodeBurninSettingsProperty(
                            font_size="fontSize",
                            position="position",
                            prefix="prefix"
                        )
                    ),
                    h264_settings=medialive.CfnChannel.H264SettingsProperty(
                        adaptive_quantization="adaptiveQuantization",
                        afd_signaling="afdSignaling",
                        bitrate=123,
                        buf_fill_pct=123,
                        buf_size=123,
                        color_metadata="colorMetadata",
                        color_space_settings=medialive.CfnChannel.H264ColorSpaceSettingsProperty(
                            color_space_passthrough_settings=medialive.CfnChannel.ColorSpacePassthroughSettingsProperty(),
                            rec601_settings=medialive.CfnChannel.Rec601SettingsProperty(),
                            rec709_settings=medialive.CfnChannel.Rec709SettingsProperty()
                        ),
                        entropy_encoding="entropyEncoding",
                        filter_settings=medialive.CfnChannel.H264FilterSettingsProperty(
                            temporal_filter_settings=medialive.CfnChannel.TemporalFilterSettingsProperty(
                                post_filter_sharpening="postFilterSharpening",
                                strength="strength"
                            )
                        ),
                        fixed_afd="fixedAfd",
                        flicker_aq="flickerAq",
                        force_field_pictures="forceFieldPictures",
                        framerate_control="framerateControl",
                        framerate_denominator=123,
                        framerate_numerator=123,
                        gop_bReference="gopBReference",
                        gop_closed_cadence=123,
                        gop_num_bFrames=123,
                        gop_size=123,
                        gop_size_units="gopSizeUnits",
                        level="level",
                        look_ahead_rate_control="lookAheadRateControl",
                        max_bitrate=123,
                        min_iInterval=123,
                        num_ref_frames=123,
                        par_control="parControl",
                        par_denominator=123,
                        par_numerator=123,
                        profile="profile",
                        quality_level="qualityLevel",
                        qvbr_quality_level=123,
                        rate_control_mode="rateControlMode",
                        scan_type="scanType",
                        scene_change_detect="sceneChangeDetect",
                        slices=123,
                        softness=123,
                        spatial_aq="spatialAq",
                        subgop_length="subgopLength",
                        syntax="syntax",
                        temporal_aq="temporalAq",
                        timecode_burnin_settings=medialive.CfnChannel.TimecodeBurninSettingsProperty(
                            font_size="fontSize",
                            position="position",
                            prefix="prefix"
                        ),
                        timecode_insertion="timecodeInsertion"
                    ),
                    h265_settings=medialive.CfnChannel.H265SettingsProperty(
                        adaptive_quantization="adaptiveQuantization",
                        afd_signaling="afdSignaling",
                        alternative_transfer_function="alternativeTransferFunction",
                        bitrate=123,
                        buf_size=123,
                        color_metadata="colorMetadata",
                        color_space_settings=medialive.CfnChannel.H265ColorSpaceSettingsProperty(
                            color_space_passthrough_settings=medialive.CfnChannel.ColorSpacePassthroughSettingsProperty(),
                            dolby_vision81_settings=medialive.CfnChannel.DolbyVision81SettingsProperty(),
                            hdr10_settings=medialive.CfnChannel.Hdr10SettingsProperty(
                                max_cll=123,
                                max_fall=123
                            ),
                            rec601_settings=medialive.CfnChannel.Rec601SettingsProperty(),
                            rec709_settings=medialive.CfnChannel.Rec709SettingsProperty()
                        ),
                        filter_settings=medialive.CfnChannel.H265FilterSettingsProperty(
                            temporal_filter_settings=medialive.CfnChannel.TemporalFilterSettingsProperty(
                                post_filter_sharpening="postFilterSharpening",
                                strength="strength"
                            )
                        ),
                        fixed_afd="fixedAfd",
                        flicker_aq="flickerAq",
                        framerate_denominator=123,
                        framerate_numerator=123,
                        gop_closed_cadence=123,
                        gop_size=123,
                        gop_size_units="gopSizeUnits",
                        level="level",
                        look_ahead_rate_control="lookAheadRateControl",
                        max_bitrate=123,
                        min_iInterval=123,
                        par_denominator=123,
                        par_numerator=123,
                        profile="profile",
                        qvbr_quality_level=123,
                        rate_control_mode="rateControlMode",
                        scan_type="scanType",
                        scene_change_detect="sceneChangeDetect",
                        slices=123,
                        tier="tier",
                        timecode_burnin_settings=medialive.CfnChannel.TimecodeBurninSettingsProperty(
                            font_size="fontSize",
                            position="position",
                            prefix="prefix"
                        ),
                        timecode_insertion="timecodeInsertion"
                    ),
                    mpeg2_settings=medialive.CfnChannel.Mpeg2SettingsProperty(
                        adaptive_quantization="adaptiveQuantization",
                        afd_signaling="afdSignaling",
                        color_metadata="colorMetadata",
                        color_space="colorSpace",
                        display_aspect_ratio="displayAspectRatio",
                        filter_settings=medialive.CfnChannel.Mpeg2FilterSettingsProperty(
                            temporal_filter_settings=medialive.CfnChannel.TemporalFilterSettingsProperty(
                                post_filter_sharpening="postFilterSharpening",
                                strength="strength"
                            )
                        ),
                        fixed_afd="fixedAfd",
                        framerate_denominator=123,
                        framerate_numerator=123,
                        gop_closed_cadence=123,
                        gop_num_bFrames=123,
                        gop_size=123,
                        gop_size_units="gopSizeUnits",
                        scan_type="scanType",
                        subgop_length="subgopLength",
                        timecode_burnin_settings=medialive.CfnChannel.TimecodeBurninSettingsProperty(
                            font_size="fontSize",
                            position="position",
                            prefix="prefix"
                        ),
                        timecode_insertion="timecodeInsertion"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__c80dde1bf6f6c24a8ef9eb602868cb10de17563bdf49656f508df14eff7b5c19)
                check_type(argname="argument frame_capture_settings", value=frame_capture_settings, expected_type=type_hints["frame_capture_settings"])
                check_type(argname="argument h264_settings", value=h264_settings, expected_type=type_hints["h264_settings"])
                check_type(argname="argument h265_settings", value=h265_settings, expected_type=type_hints["h265_settings"])
                check_type(argname="argument mpeg2_settings", value=mpeg2_settings, expected_type=type_hints["mpeg2_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if frame_capture_settings is not None:
                self._values["frame_capture_settings"] = frame_capture_settings
            if h264_settings is not None:
                self._values["h264_settings"] = h264_settings
            if h265_settings is not None:
                self._values["h265_settings"] = h265_settings
            if mpeg2_settings is not None:
                self._values["mpeg2_settings"] = mpeg2_settings

        @builtins.property
        def frame_capture_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.FrameCaptureSettingsProperty"]]:
            '''The settings for the video codec in a frame capture output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videocodecsettings.html#cfn-medialive-channel-videocodecsettings-framecapturesettings
            '''
            result = self._values.get("frame_capture_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.FrameCaptureSettingsProperty"]], result)

        @builtins.property
        def h264_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.H264SettingsProperty"]]:
            '''The settings for the H.264 codec in the output.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videocodecsettings.html#cfn-medialive-channel-videocodecsettings-h264settings
            '''
            result = self._values.get("h264_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.H264SettingsProperty"]], result)

        @builtins.property
        def h265_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.H265SettingsProperty"]]:
            '''Settings for video encoded with the H265 codec.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videocodecsettings.html#cfn-medialive-channel-videocodecsettings-h265settings
            '''
            result = self._values.get("h265_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.H265SettingsProperty"]], result)

        @builtins.property
        def mpeg2_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Mpeg2SettingsProperty"]]:
            '''Settings for video encoded with the MPEG-2 codec.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videocodecsettings.html#cfn-medialive-channel-videocodecsettings-mpeg2settings
            '''
            result = self._values.get("mpeg2_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Mpeg2SettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "VideoCodecSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.VideoDescriptionProperty",
        jsii_struct_bases=[],
        name_mapping={
            "codec_settings": "codecSettings",
            "height": "height",
            "name": "name",
            "respond_to_afd": "respondToAfd",
            "scaling_behavior": "scalingBehavior",
            "sharpness": "sharpness",
            "width": "width",
        },
    )
    class VideoDescriptionProperty:
        def __init__(
            self,
            *,
            codec_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.VideoCodecSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            height: typing.Optional[jsii.Number] = None,
            name: typing.Optional[builtins.str] = None,
            respond_to_afd: typing.Optional[builtins.str] = None,
            scaling_behavior: typing.Optional[builtins.str] = None,
            sharpness: typing.Optional[jsii.Number] = None,
            width: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Encoding information for one output video.

            The parent of this entity is EncoderSettings.

            :param codec_settings: The video codec settings.
            :param height: The output video height, in pixels. This must be an even number. For most codecs, you can keep this field and width blank in order to use the height and width (resolution) from the source. Note that we don't recommend keeping the field blank. For the Frame Capture codec, height and width are required.
            :param name: The name of this VideoDescription. Outputs use this name to uniquely identify this description. Description names should be unique within this channel.
            :param respond_to_afd: Indicates how to respond to the AFD values in the input stream. RESPOND causes input video to be clipped, depending on the AFD value, input display aspect ratio, and output display aspect ratio, and (except for the FRAMECAPTURE codec) includes the values in the output. PASSTHROUGH (does not apply to FRAMECAPTURE codec) ignores the AFD values and includes the values in the output, so input video is not clipped. NONE ignores the AFD values and does not include the values through to the output, so input video is not clipped.
            :param scaling_behavior: STRETCHTOOUTPUT configures the output position to stretch the video to the specified output resolution (height and width). This option overrides any position value. DEFAULT might insert black boxes (pillar boxes or letter boxes) around the video to provide the specified output resolution.
            :param sharpness: Changes the strength of the anti-alias filter used for scaling. 0 is the softest setting, and 100 is the sharpest. We recommend a setting of 50 for most content.
            :param width: The output video width, in pixels. It must be an even number. For most codecs, you can keep this field and height blank in order to use the height and width (resolution) from the source. Note that we don't recommend keeping the field blank. For the Frame Capture codec, height and width are required.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                video_description_property = medialive.CfnChannel.VideoDescriptionProperty(
                    codec_settings=medialive.CfnChannel.VideoCodecSettingsProperty(
                        frame_capture_settings=medialive.CfnChannel.FrameCaptureSettingsProperty(
                            capture_interval=123,
                            capture_interval_units="captureIntervalUnits",
                            timecode_burnin_settings=medialive.CfnChannel.TimecodeBurninSettingsProperty(
                                font_size="fontSize",
                                position="position",
                                prefix="prefix"
                            )
                        ),
                        h264_settings=medialive.CfnChannel.H264SettingsProperty(
                            adaptive_quantization="adaptiveQuantization",
                            afd_signaling="afdSignaling",
                            bitrate=123,
                            buf_fill_pct=123,
                            buf_size=123,
                            color_metadata="colorMetadata",
                            color_space_settings=medialive.CfnChannel.H264ColorSpaceSettingsProperty(
                                color_space_passthrough_settings=medialive.CfnChannel.ColorSpacePassthroughSettingsProperty(),
                                rec601_settings=medialive.CfnChannel.Rec601SettingsProperty(),
                                rec709_settings=medialive.CfnChannel.Rec709SettingsProperty()
                            ),
                            entropy_encoding="entropyEncoding",
                            filter_settings=medialive.CfnChannel.H264FilterSettingsProperty(
                                temporal_filter_settings=medialive.CfnChannel.TemporalFilterSettingsProperty(
                                    post_filter_sharpening="postFilterSharpening",
                                    strength="strength"
                                )
                            ),
                            fixed_afd="fixedAfd",
                            flicker_aq="flickerAq",
                            force_field_pictures="forceFieldPictures",
                            framerate_control="framerateControl",
                            framerate_denominator=123,
                            framerate_numerator=123,
                            gop_bReference="gopBReference",
                            gop_closed_cadence=123,
                            gop_num_bFrames=123,
                            gop_size=123,
                            gop_size_units="gopSizeUnits",
                            level="level",
                            look_ahead_rate_control="lookAheadRateControl",
                            max_bitrate=123,
                            min_iInterval=123,
                            num_ref_frames=123,
                            par_control="parControl",
                            par_denominator=123,
                            par_numerator=123,
                            profile="profile",
                            quality_level="qualityLevel",
                            qvbr_quality_level=123,
                            rate_control_mode="rateControlMode",
                            scan_type="scanType",
                            scene_change_detect="sceneChangeDetect",
                            slices=123,
                            softness=123,
                            spatial_aq="spatialAq",
                            subgop_length="subgopLength",
                            syntax="syntax",
                            temporal_aq="temporalAq",
                            timecode_burnin_settings=medialive.CfnChannel.TimecodeBurninSettingsProperty(
                                font_size="fontSize",
                                position="position",
                                prefix="prefix"
                            ),
                            timecode_insertion="timecodeInsertion"
                        ),
                        h265_settings=medialive.CfnChannel.H265SettingsProperty(
                            adaptive_quantization="adaptiveQuantization",
                            afd_signaling="afdSignaling",
                            alternative_transfer_function="alternativeTransferFunction",
                            bitrate=123,
                            buf_size=123,
                            color_metadata="colorMetadata",
                            color_space_settings=medialive.CfnChannel.H265ColorSpaceSettingsProperty(
                                color_space_passthrough_settings=medialive.CfnChannel.ColorSpacePassthroughSettingsProperty(),
                                dolby_vision81_settings=medialive.CfnChannel.DolbyVision81SettingsProperty(),
                                hdr10_settings=medialive.CfnChannel.Hdr10SettingsProperty(
                                    max_cll=123,
                                    max_fall=123
                                ),
                                rec601_settings=medialive.CfnChannel.Rec601SettingsProperty(),
                                rec709_settings=medialive.CfnChannel.Rec709SettingsProperty()
                            ),
                            filter_settings=medialive.CfnChannel.H265FilterSettingsProperty(
                                temporal_filter_settings=medialive.CfnChannel.TemporalFilterSettingsProperty(
                                    post_filter_sharpening="postFilterSharpening",
                                    strength="strength"
                                )
                            ),
                            fixed_afd="fixedAfd",
                            flicker_aq="flickerAq",
                            framerate_denominator=123,
                            framerate_numerator=123,
                            gop_closed_cadence=123,
                            gop_size=123,
                            gop_size_units="gopSizeUnits",
                            level="level",
                            look_ahead_rate_control="lookAheadRateControl",
                            max_bitrate=123,
                            min_iInterval=123,
                            par_denominator=123,
                            par_numerator=123,
                            profile="profile",
                            qvbr_quality_level=123,
                            rate_control_mode="rateControlMode",
                            scan_type="scanType",
                            scene_change_detect="sceneChangeDetect",
                            slices=123,
                            tier="tier",
                            timecode_burnin_settings=medialive.CfnChannel.TimecodeBurninSettingsProperty(
                                font_size="fontSize",
                                position="position",
                                prefix="prefix"
                            ),
                            timecode_insertion="timecodeInsertion"
                        ),
                        mpeg2_settings=medialive.CfnChannel.Mpeg2SettingsProperty(
                            adaptive_quantization="adaptiveQuantization",
                            afd_signaling="afdSignaling",
                            color_metadata="colorMetadata",
                            color_space="colorSpace",
                            display_aspect_ratio="displayAspectRatio",
                            filter_settings=medialive.CfnChannel.Mpeg2FilterSettingsProperty(
                                temporal_filter_settings=medialive.CfnChannel.TemporalFilterSettingsProperty(
                                    post_filter_sharpening="postFilterSharpening",
                                    strength="strength"
                                )
                            ),
                            fixed_afd="fixedAfd",
                            framerate_denominator=123,
                            framerate_numerator=123,
                            gop_closed_cadence=123,
                            gop_num_bFrames=123,
                            gop_size=123,
                            gop_size_units="gopSizeUnits",
                            scan_type="scanType",
                            subgop_length="subgopLength",
                            timecode_burnin_settings=medialive.CfnChannel.TimecodeBurninSettingsProperty(
                                font_size="fontSize",
                                position="position",
                                prefix="prefix"
                            ),
                            timecode_insertion="timecodeInsertion"
                        )
                    ),
                    height=123,
                    name="name",
                    respond_to_afd="respondToAfd",
                    scaling_behavior="scalingBehavior",
                    sharpness=123,
                    width=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ab7e91a57207801ff35843bc289aeb1c7b782b2fe53f7d6be2f7de9fe3951954)
                check_type(argname="argument codec_settings", value=codec_settings, expected_type=type_hints["codec_settings"])
                check_type(argname="argument height", value=height, expected_type=type_hints["height"])
                check_type(argname="argument name", value=name, expected_type=type_hints["name"])
                check_type(argname="argument respond_to_afd", value=respond_to_afd, expected_type=type_hints["respond_to_afd"])
                check_type(argname="argument scaling_behavior", value=scaling_behavior, expected_type=type_hints["scaling_behavior"])
                check_type(argname="argument sharpness", value=sharpness, expected_type=type_hints["sharpness"])
                check_type(argname="argument width", value=width, expected_type=type_hints["width"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if codec_settings is not None:
                self._values["codec_settings"] = codec_settings
            if height is not None:
                self._values["height"] = height
            if name is not None:
                self._values["name"] = name
            if respond_to_afd is not None:
                self._values["respond_to_afd"] = respond_to_afd
            if scaling_behavior is not None:
                self._values["scaling_behavior"] = scaling_behavior
            if sharpness is not None:
                self._values["sharpness"] = sharpness
            if width is not None:
                self._values["width"] = width

        @builtins.property
        def codec_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.VideoCodecSettingsProperty"]]:
            '''The video codec settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-codecsettings
            '''
            result = self._values.get("codec_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.VideoCodecSettingsProperty"]], result)

        @builtins.property
        def height(self) -> typing.Optional[jsii.Number]:
            '''The output video height, in pixels.

            This must be an even number. For most codecs, you can keep this field and width blank in order to use the height and width (resolution) from the source. Note that we don't recommend keeping the field blank. For the Frame Capture codec, height and width are required.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-height
            '''
            result = self._values.get("height")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def name(self) -> typing.Optional[builtins.str]:
            '''The name of this VideoDescription.

            Outputs use this name to uniquely identify this description. Description names should be unique within this channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-name
            '''
            result = self._values.get("name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def respond_to_afd(self) -> typing.Optional[builtins.str]:
            '''Indicates how to respond to the AFD values in the input stream.

            RESPOND causes input video to be clipped, depending on the AFD value, input display aspect ratio, and output display aspect ratio, and (except for the FRAMECAPTURE codec) includes the values in the output. PASSTHROUGH (does not apply to FRAMECAPTURE codec) ignores the AFD values and includes the values in the output, so input video is not clipped. NONE ignores the AFD values and does not include the values through to the output, so input video is not clipped.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-respondtoafd
            '''
            result = self._values.get("respond_to_afd")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def scaling_behavior(self) -> typing.Optional[builtins.str]:
            '''STRETCHTOOUTPUT configures the output position to stretch the video to the specified output resolution (height and width).

            This option overrides any position value. DEFAULT might insert black boxes (pillar boxes or letter boxes) around the video to provide the specified output resolution.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-scalingbehavior
            '''
            result = self._values.get("scaling_behavior")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def sharpness(self) -> typing.Optional[jsii.Number]:
            '''Changes the strength of the anti-alias filter used for scaling.

            0 is the softest setting, and 100 is the sharpest. We recommend a setting of 50 for most content.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-sharpness
            '''
            result = self._values.get("sharpness")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def width(self) -> typing.Optional[jsii.Number]:
            '''The output video width, in pixels.

            It must be an even number. For most codecs, you can keep this field and height blank in order to use the height and width (resolution) from the source. Note that we don't recommend keeping the field blank. For the Frame Capture codec, height and width are required.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videodescription.html#cfn-medialive-channel-videodescription-width
            '''
            result = self._values.get("width")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "VideoDescriptionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.VideoSelectorColorSpaceSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"hdr10_settings": "hdr10Settings"},
    )
    class VideoSelectorColorSpaceSettingsProperty:
        def __init__(
            self,
            *,
            hdr10_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.Hdr10SettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Settings to configure color space settings in the incoming video.

            The parent of this entity is VideoSelector.

            :param hdr10_settings: Settings to configure color space settings in the incoming video.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorcolorspacesettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                video_selector_color_space_settings_property = medialive.CfnChannel.VideoSelectorColorSpaceSettingsProperty(
                    hdr10_settings=medialive.CfnChannel.Hdr10SettingsProperty(
                        max_cll=123,
                        max_fall=123
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__b1dc4ddeb5b0fce924251260e04cf78281047fdbbcfeaca30d7f1267c934a70b)
                check_type(argname="argument hdr10_settings", value=hdr10_settings, expected_type=type_hints["hdr10_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if hdr10_settings is not None:
                self._values["hdr10_settings"] = hdr10_settings

        @builtins.property
        def hdr10_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Hdr10SettingsProperty"]]:
            '''Settings to configure color space settings in the incoming video.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorcolorspacesettings.html#cfn-medialive-channel-videoselectorcolorspacesettings-hdr10settings
            '''
            result = self._values.get("hdr10_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.Hdr10SettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "VideoSelectorColorSpaceSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.VideoSelectorPidProperty",
        jsii_struct_bases=[],
        name_mapping={"pid": "pid"},
    )
    class VideoSelectorPidProperty:
        def __init__(self, *, pid: typing.Optional[jsii.Number] = None) -> None:
            '''Selects a specific PID from within a video source.

            The parent of this entity is VideoSelectorSettings.

            :param pid: Selects a specific PID from within a video source.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorpid.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                video_selector_pid_property = medialive.CfnChannel.VideoSelectorPidProperty(
                    pid=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__313d5552f9953a24620988ef95f5ed66282971fe44bae236f78d740ca5153eb7)
                check_type(argname="argument pid", value=pid, expected_type=type_hints["pid"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if pid is not None:
                self._values["pid"] = pid

        @builtins.property
        def pid(self) -> typing.Optional[jsii.Number]:
            '''Selects a specific PID from within a video source.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorpid.html#cfn-medialive-channel-videoselectorpid-pid
            '''
            result = self._values.get("pid")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "VideoSelectorPidProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.VideoSelectorProgramIdProperty",
        jsii_struct_bases=[],
        name_mapping={"program_id": "programId"},
    )
    class VideoSelectorProgramIdProperty:
        def __init__(self, *, program_id: typing.Optional[jsii.Number] = None) -> None:
            '''Used to extract video by the program ID.

            The parent of this entity is VideoSelectorSettings.

            :param program_id: Selects a specific program from within a multi-program transport stream. If the program doesn't exist, MediaLive selects the first program within the transport stream by default.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorprogramid.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                video_selector_program_id_property = medialive.CfnChannel.VideoSelectorProgramIdProperty(
                    program_id=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__e632cd0cf374ed51011f8d0d8d1292c1ef30d0bd7a97cddb254ebf88e2290492)
                check_type(argname="argument program_id", value=program_id, expected_type=type_hints["program_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if program_id is not None:
                self._values["program_id"] = program_id

        @builtins.property
        def program_id(self) -> typing.Optional[jsii.Number]:
            '''Selects a specific program from within a multi-program transport stream.

            If the program doesn't exist, MediaLive selects the first program within the transport stream by default.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorprogramid.html#cfn-medialive-channel-videoselectorprogramid-programid
            '''
            result = self._values.get("program_id")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "VideoSelectorProgramIdProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.VideoSelectorProperty",
        jsii_struct_bases=[],
        name_mapping={
            "color_space": "colorSpace",
            "color_space_settings": "colorSpaceSettings",
            "color_space_usage": "colorSpaceUsage",
            "selector_settings": "selectorSettings",
        },
    )
    class VideoSelectorProperty:
        def __init__(
            self,
            *,
            color_space: typing.Optional[builtins.str] = None,
            color_space_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.VideoSelectorColorSpaceSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            color_space_usage: typing.Optional[builtins.str] = None,
            selector_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.VideoSelectorSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Information about the video to extract from the input. An input can contain only one video selector.

            The parent of this entity is InputSettings.

            :param color_space: Specifies the color space of an input. This setting works in tandem with colorSpaceConversion to determine if MediaLive will perform any conversion.
            :param color_space_settings: Settings to configure color space settings in the incoming video.
            :param color_space_usage: Applies only if colorSpace is a value other than Follow. This field controls how the value in the colorSpace field is used. Fallback means that when the input does include color space data, that data is used, but when the input has no color space data, the value in colorSpace is used. Choose fallback if your input is sometimes missing color space data, but when it does have color space data, that data is correct. Force means to always use the value in colorSpace. Choose force if your input usually has no color space data or might have unreliable color space data.
            :param selector_settings: Information about the video to select from the content.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselector.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                video_selector_property = medialive.CfnChannel.VideoSelectorProperty(
                    color_space="colorSpace",
                    color_space_settings=medialive.CfnChannel.VideoSelectorColorSpaceSettingsProperty(
                        hdr10_settings=medialive.CfnChannel.Hdr10SettingsProperty(
                            max_cll=123,
                            max_fall=123
                        )
                    ),
                    color_space_usage="colorSpaceUsage",
                    selector_settings=medialive.CfnChannel.VideoSelectorSettingsProperty(
                        video_selector_pid=medialive.CfnChannel.VideoSelectorPidProperty(
                            pid=123
                        ),
                        video_selector_program_id=medialive.CfnChannel.VideoSelectorProgramIdProperty(
                            program_id=123
                        )
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__60b4d3bce0a5c052ef6a139ec1e78a4af79a342cf23c05d2bea899e926827b79)
                check_type(argname="argument color_space", value=color_space, expected_type=type_hints["color_space"])
                check_type(argname="argument color_space_settings", value=color_space_settings, expected_type=type_hints["color_space_settings"])
                check_type(argname="argument color_space_usage", value=color_space_usage, expected_type=type_hints["color_space_usage"])
                check_type(argname="argument selector_settings", value=selector_settings, expected_type=type_hints["selector_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if color_space is not None:
                self._values["color_space"] = color_space
            if color_space_settings is not None:
                self._values["color_space_settings"] = color_space_settings
            if color_space_usage is not None:
                self._values["color_space_usage"] = color_space_usage
            if selector_settings is not None:
                self._values["selector_settings"] = selector_settings

        @builtins.property
        def color_space(self) -> typing.Optional[builtins.str]:
            '''Specifies the color space of an input.

            This setting works in tandem with colorSpaceConversion to determine if MediaLive will perform any conversion.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselector.html#cfn-medialive-channel-videoselector-colorspace
            '''
            result = self._values.get("color_space")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def color_space_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.VideoSelectorColorSpaceSettingsProperty"]]:
            '''Settings to configure color space settings in the incoming video.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselector.html#cfn-medialive-channel-videoselector-colorspacesettings
            '''
            result = self._values.get("color_space_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.VideoSelectorColorSpaceSettingsProperty"]], result)

        @builtins.property
        def color_space_usage(self) -> typing.Optional[builtins.str]:
            '''Applies only if colorSpace is a value other than Follow.

            This field controls how the value in the colorSpace field is used. Fallback means that when the input does include color space data, that data is used, but when the input has no color space data, the value in colorSpace is used. Choose fallback if your input is sometimes missing color space data, but when it does have color space data, that data is correct. Force means to always use the value in colorSpace. Choose force if your input usually has no color space data or might have unreliable color space data.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselector.html#cfn-medialive-channel-videoselector-colorspaceusage
            '''
            result = self._values.get("color_space_usage")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def selector_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.VideoSelectorSettingsProperty"]]:
            '''Information about the video to select from the content.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselector.html#cfn-medialive-channel-videoselector-selectorsettings
            '''
            result = self._values.get("selector_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.VideoSelectorSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "VideoSelectorProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.VideoSelectorSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "video_selector_pid": "videoSelectorPid",
            "video_selector_program_id": "videoSelectorProgramId",
        },
    )
    class VideoSelectorSettingsProperty:
        def __init__(
            self,
            *,
            video_selector_pid: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.VideoSelectorPidProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            video_selector_program_id: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnChannel.VideoSelectorProgramIdProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Information about the video to extract from the input.

            The parent of this entity is VideoSelector.

            :param video_selector_pid: Used to extract video by PID.
            :param video_selector_program_id: Used to extract video by program ID.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                video_selector_settings_property = medialive.CfnChannel.VideoSelectorSettingsProperty(
                    video_selector_pid=medialive.CfnChannel.VideoSelectorPidProperty(
                        pid=123
                    ),
                    video_selector_program_id=medialive.CfnChannel.VideoSelectorProgramIdProperty(
                        program_id=123
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__4e0afb1a1b9351816ec94d6cd5a3a0077819fe03aefc18844529e343b1656617)
                check_type(argname="argument video_selector_pid", value=video_selector_pid, expected_type=type_hints["video_selector_pid"])
                check_type(argname="argument video_selector_program_id", value=video_selector_program_id, expected_type=type_hints["video_selector_program_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if video_selector_pid is not None:
                self._values["video_selector_pid"] = video_selector_pid
            if video_selector_program_id is not None:
                self._values["video_selector_program_id"] = video_selector_program_id

        @builtins.property
        def video_selector_pid(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.VideoSelectorPidProperty"]]:
            '''Used to extract video by PID.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorsettings.html#cfn-medialive-channel-videoselectorsettings-videoselectorpid
            '''
            result = self._values.get("video_selector_pid")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.VideoSelectorPidProperty"]], result)

        @builtins.property
        def video_selector_program_id(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.VideoSelectorProgramIdProperty"]]:
            '''Used to extract video by program ID.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-videoselectorsettings.html#cfn-medialive-channel-videoselectorsettings-videoselectorprogramid
            '''
            result = self._values.get("video_selector_program_id")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnChannel.VideoSelectorProgramIdProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "VideoSelectorSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.VpcOutputSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "public_address_allocation_ids": "publicAddressAllocationIds",
            "security_group_ids": "securityGroupIds",
            "subnet_ids": "subnetIds",
        },
    )
    class VpcOutputSettingsProperty:
        def __init__(
            self,
            *,
            public_address_allocation_ids: typing.Optional[typing.Sequence[builtins.str]] = None,
            security_group_ids: typing.Optional[typing.Sequence[builtins.str]] = None,
            subnet_ids: typing.Optional[typing.Sequence[builtins.str]] = None,
        ) -> None:
            '''Settings to enable VPC mode in the channel, so that the endpoints for all outputs are in your VPC.

            This entity is at the top level in the channel.

            :param public_address_allocation_ids: List of public address allocation IDs to associate with ENIs that will be created in Output VPC. Must specify one for SINGLE_PIPELINE, two for STANDARD channels
            :param security_group_ids: A list of up to 5 EC2 VPC security group IDs to attach to the Output VPC network interfaces. If none are specified then the VPC default security group will be used
            :param subnet_ids: A list of VPC subnet IDs from the same VPC. If STANDARD channel, subnet IDs must be mapped to two unique availability zones (AZ).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-vpcoutputsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                vpc_output_settings_property = medialive.CfnChannel.VpcOutputSettingsProperty(
                    public_address_allocation_ids=["publicAddressAllocationIds"],
                    security_group_ids=["securityGroupIds"],
                    subnet_ids=["subnetIds"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__2fcbfc3ec68c7f08a9c89ac20d14e6cff6c294d689900dd48d362fa48067df91)
                check_type(argname="argument public_address_allocation_ids", value=public_address_allocation_ids, expected_type=type_hints["public_address_allocation_ids"])
                check_type(argname="argument security_group_ids", value=security_group_ids, expected_type=type_hints["security_group_ids"])
                check_type(argname="argument subnet_ids", value=subnet_ids, expected_type=type_hints["subnet_ids"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if public_address_allocation_ids is not None:
                self._values["public_address_allocation_ids"] = public_address_allocation_ids
            if security_group_ids is not None:
                self._values["security_group_ids"] = security_group_ids
            if subnet_ids is not None:
                self._values["subnet_ids"] = subnet_ids

        @builtins.property
        def public_address_allocation_ids(
            self,
        ) -> typing.Optional[typing.List[builtins.str]]:
            '''List of public address allocation IDs to associate with ENIs that will be created in Output VPC.

            Must specify one for SINGLE_PIPELINE, two for STANDARD channels

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-vpcoutputsettings.html#cfn-medialive-channel-vpcoutputsettings-publicaddressallocationids
            '''
            result = self._values.get("public_address_allocation_ids")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def security_group_ids(self) -> typing.Optional[typing.List[builtins.str]]:
            '''A list of up to 5 EC2 VPC security group IDs to attach to the Output VPC network interfaces.

            If none are specified then the VPC default security group will be used

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-vpcoutputsettings.html#cfn-medialive-channel-vpcoutputsettings-securitygroupids
            '''
            result = self._values.get("security_group_ids")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def subnet_ids(self) -> typing.Optional[typing.List[builtins.str]]:
            '''A list of VPC subnet IDs from the same VPC.

            If STANDARD channel, subnet IDs must be mapped to two unique availability zones (AZ).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-vpcoutputsettings.html#cfn-medialive-channel-vpcoutputsettings-subnetids
            '''
            result = self._values.get("subnet_ids")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "VpcOutputSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.WavSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "bit_depth": "bitDepth",
            "coding_mode": "codingMode",
            "sample_rate": "sampleRate",
        },
    )
    class WavSettingsProperty:
        def __init__(
            self,
            *,
            bit_depth: typing.Optional[jsii.Number] = None,
            coding_mode: typing.Optional[builtins.str] = None,
            sample_rate: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The setup of WAV audio in the output.

            The parent of this entity is AudioCodecSettings.

            :param bit_depth: Bits per sample.
            :param coding_mode: The audio coding mode for the WAV audio. The mode determines the number of channels in the audio.
            :param sample_rate: Sample rate in Hz.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-wavsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                wav_settings_property = medialive.CfnChannel.WavSettingsProperty(
                    bit_depth=123,
                    coding_mode="codingMode",
                    sample_rate=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__5711bc232730dd7ebc808a480270bdafcea9c63e2c7a31b1df84906f4c2570f8)
                check_type(argname="argument bit_depth", value=bit_depth, expected_type=type_hints["bit_depth"])
                check_type(argname="argument coding_mode", value=coding_mode, expected_type=type_hints["coding_mode"])
                check_type(argname="argument sample_rate", value=sample_rate, expected_type=type_hints["sample_rate"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if bit_depth is not None:
                self._values["bit_depth"] = bit_depth
            if coding_mode is not None:
                self._values["coding_mode"] = coding_mode
            if sample_rate is not None:
                self._values["sample_rate"] = sample_rate

        @builtins.property
        def bit_depth(self) -> typing.Optional[jsii.Number]:
            '''Bits per sample.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-wavsettings.html#cfn-medialive-channel-wavsettings-bitdepth
            '''
            result = self._values.get("bit_depth")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def coding_mode(self) -> typing.Optional[builtins.str]:
            '''The audio coding mode for the WAV audio.

            The mode determines the number of channels in the audio.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-wavsettings.html#cfn-medialive-channel-wavsettings-codingmode
            '''
            result = self._values.get("coding_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def sample_rate(self) -> typing.Optional[jsii.Number]:
            '''Sample rate in Hz.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-wavsettings.html#cfn-medialive-channel-wavsettings-samplerate
            '''
            result = self._values.get("sample_rate")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "WavSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnChannel.WebvttDestinationSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"style_control": "styleControl"},
    )
    class WebvttDestinationSettingsProperty:
        def __init__(
            self,
            *,
            style_control: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The configuration of Web VTT captions in the output.

            The parent of this entity is CaptionDestinationSettings.

            :param style_control: Controls whether the color and position of the source captions is passed through to the WebVTT output captions. PASSTHROUGH - Valid only if the source captions are EMBEDDED or TELETEXT. NO_STYLE_DATA - Don't pass through the style. The output captions will not contain any font styling information.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-webvttdestinationsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                webvtt_destination_settings_property = medialive.CfnChannel.WebvttDestinationSettingsProperty(
                    style_control="styleControl"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ebfdc03ea16125a56c4730e92e19fd0b84d4a925fd67235e0790e0eee72ab782)
                check_type(argname="argument style_control", value=style_control, expected_type=type_hints["style_control"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if style_control is not None:
                self._values["style_control"] = style_control

        @builtins.property
        def style_control(self) -> typing.Optional[builtins.str]:
            '''Controls whether the color and position of the source captions is passed through to the WebVTT output captions.

            PASSTHROUGH - Valid only if the source captions are EMBEDDED or TELETEXT. NO_STYLE_DATA - Don't pass through the style. The output captions will not contain any font styling information.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-channel-webvttdestinationsettings.html#cfn-medialive-channel-webvttdestinationsettings-stylecontrol
            '''
            result = self._values.get("style_control")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "WebvttDestinationSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_medialive.CfnChannelProps",
    jsii_struct_bases=[],
    name_mapping={
        "cdi_input_specification": "cdiInputSpecification",
        "channel_class": "channelClass",
        "destinations": "destinations",
        "encoder_settings": "encoderSettings",
        "input_attachments": "inputAttachments",
        "input_specification": "inputSpecification",
        "log_level": "logLevel",
        "maintenance": "maintenance",
        "name": "name",
        "role_arn": "roleArn",
        "tags": "tags",
        "vpc": "vpc",
    },
)
class CfnChannelProps:
    def __init__(
        self,
        *,
        cdi_input_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.CdiInputSpecificationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        channel_class: typing.Optional[builtins.str] = None,
        destinations: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.OutputDestinationProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
        encoder_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.EncoderSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        input_attachments: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.InputAttachmentProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
        input_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.InputSpecificationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        log_level: typing.Optional[builtins.str] = None,
        maintenance: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.MaintenanceCreateSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        name: typing.Optional[builtins.str] = None,
        role_arn: typing.Optional[builtins.str] = None,
        tags: typing.Any = None,
        vpc: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.VpcOutputSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnChannel``.

        :param cdi_input_specification: Specification of CDI inputs for this channel.
        :param channel_class: The class for this channel. For a channel with two pipelines, the class is STANDARD. For a channel with one pipeline, the class is SINGLE_PIPELINE.
        :param destinations: The settings that identify the destination for the outputs in this MediaLive output package.
        :param encoder_settings: The encoding configuration for the output content.
        :param input_attachments: The list of input attachments for the channel.
        :param input_specification: The input specification for this channel. It specifies the key characteristics of the inputs for this channel: the maximum bitrate, the resolution, and the codec.
        :param log_level: The verbosity for logging activity for this channel. Charges for logging (which are generated through Amazon CloudWatch Logging) are higher for higher verbosities.
        :param maintenance: Maintenance settings for this channel.
        :param name: A name for this audio selector. The AudioDescription (in an output) references this name in order to identify a specific input audio to include in that output.
        :param role_arn: The IAM role for MediaLive to assume when running this channel. The role is identified by its ARN.
        :param tags: A collection of tags for this channel. Each tag is a key-value pair.
        :param vpc: Settings to enable VPC mode in the channel, so that the endpoints for all outputs are in your VPC.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html
        :exampleMetadata: fixture=_generated

        Example::

            
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__b13ea4bee752af01767701d05a81e0c16839b625a40da4f298a5e05d768ae6ab)
            check_type(argname="argument cdi_input_specification", value=cdi_input_specification, expected_type=type_hints["cdi_input_specification"])
            check_type(argname="argument channel_class", value=channel_class, expected_type=type_hints["channel_class"])
            check_type(argname="argument destinations", value=destinations, expected_type=type_hints["destinations"])
            check_type(argname="argument encoder_settings", value=encoder_settings, expected_type=type_hints["encoder_settings"])
            check_type(argname="argument input_attachments", value=input_attachments, expected_type=type_hints["input_attachments"])
            check_type(argname="argument input_specification", value=input_specification, expected_type=type_hints["input_specification"])
            check_type(argname="argument log_level", value=log_level, expected_type=type_hints["log_level"])
            check_type(argname="argument maintenance", value=maintenance, expected_type=type_hints["maintenance"])
            check_type(argname="argument name", value=name, expected_type=type_hints["name"])
            check_type(argname="argument role_arn", value=role_arn, expected_type=type_hints["role_arn"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
            check_type(argname="argument vpc", value=vpc, expected_type=type_hints["vpc"])
        self._values: typing.Dict[builtins.str, typing.Any] = {}
        if cdi_input_specification is not None:
            self._values["cdi_input_specification"] = cdi_input_specification
        if channel_class is not None:
            self._values["channel_class"] = channel_class
        if destinations is not None:
            self._values["destinations"] = destinations
        if encoder_settings is not None:
            self._values["encoder_settings"] = encoder_settings
        if input_attachments is not None:
            self._values["input_attachments"] = input_attachments
        if input_specification is not None:
            self._values["input_specification"] = input_specification
        if log_level is not None:
            self._values["log_level"] = log_level
        if maintenance is not None:
            self._values["maintenance"] = maintenance
        if name is not None:
            self._values["name"] = name
        if role_arn is not None:
            self._values["role_arn"] = role_arn
        if tags is not None:
            self._values["tags"] = tags
        if vpc is not None:
            self._values["vpc"] = vpc

    @builtins.property
    def cdi_input_specification(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnChannel.CdiInputSpecificationProperty]]:
        '''Specification of CDI inputs for this channel.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-cdiinputspecification
        '''
        result = self._values.get("cdi_input_specification")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnChannel.CdiInputSpecificationProperty]], result)

    @builtins.property
    def channel_class(self) -> typing.Optional[builtins.str]:
        '''The class for this channel.

        For a channel with two pipelines, the class is STANDARD. For a channel with one pipeline, the class is SINGLE_PIPELINE.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-channelclass
        '''
        result = self._values.get("channel_class")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def destinations(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnChannel.OutputDestinationProperty]]]]:
        '''The settings that identify the destination for the outputs in this MediaLive output package.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-destinations
        '''
        result = self._values.get("destinations")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnChannel.OutputDestinationProperty]]]], result)

    @builtins.property
    def encoder_settings(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnChannel.EncoderSettingsProperty]]:
        '''The encoding configuration for the output content.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-encodersettings
        '''
        result = self._values.get("encoder_settings")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnChannel.EncoderSettingsProperty]], result)

    @builtins.property
    def input_attachments(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnChannel.InputAttachmentProperty]]]]:
        '''The list of input attachments for the channel.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-inputattachments
        '''
        result = self._values.get("input_attachments")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnChannel.InputAttachmentProperty]]]], result)

    @builtins.property
    def input_specification(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnChannel.InputSpecificationProperty]]:
        '''The input specification for this channel.

        It specifies the key characteristics of the inputs for this channel: the maximum bitrate, the resolution, and the codec.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-inputspecification
        '''
        result = self._values.get("input_specification")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnChannel.InputSpecificationProperty]], result)

    @builtins.property
    def log_level(self) -> typing.Optional[builtins.str]:
        '''The verbosity for logging activity for this channel.

        Charges for logging (which are generated through Amazon CloudWatch Logging) are higher for higher verbosities.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-loglevel
        '''
        result = self._values.get("log_level")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def maintenance(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnChannel.MaintenanceCreateSettingsProperty]]:
        '''Maintenance settings for this channel.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-maintenance
        '''
        result = self._values.get("maintenance")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnChannel.MaintenanceCreateSettingsProperty]], result)

    @builtins.property
    def name(self) -> typing.Optional[builtins.str]:
        '''A name for this audio selector.

        The AudioDescription (in an output) references this name in order to identify a specific input audio to include in that output.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-name
        '''
        result = self._values.get("name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def role_arn(self) -> typing.Optional[builtins.str]:
        '''The IAM role for MediaLive to assume when running this channel.

        The role is identified by its ARN.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-rolearn
        '''
        result = self._values.get("role_arn")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def tags(self) -> typing.Any:
        '''A collection of tags for this channel.

        Each tag is a key-value pair.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Any, result)

    @builtins.property
    def vpc(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnChannel.VpcOutputSettingsProperty]]:
        '''Settings to enable VPC mode in the channel, so that the endpoints for all outputs are in your VPC.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-channel.html#cfn-medialive-channel-vpc
        '''
        result = self._values.get("vpc")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnChannel.VpcOutputSettingsProperty]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnChannelProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnInput(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_medialive.CfnInput",
):
    '''The AWS::MediaLive::Input resource is a MediaLive resource type that creates an input.

    A MediaLive input holds information that describes how the MediaLive channel is connected to the upstream system that is providing the source content that is to be transcoded.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-input.html
    :cloudformationResource: AWS::MediaLive::Input
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_medialive as medialive
        
        # tags: Any
        
        cfn_input = medialive.CfnInput(self, "MyCfnInput",
            destinations=[medialive.CfnInput.InputDestinationRequestProperty(
                stream_name="streamName"
            )],
            input_devices=[medialive.CfnInput.InputDeviceSettingsProperty(
                id="id"
            )],
            input_security_groups=["inputSecurityGroups"],
            media_connect_flows=[medialive.CfnInput.MediaConnectFlowRequestProperty(
                flow_arn="flowArn"
            )],
            name="name",
            role_arn="roleArn",
            sources=[medialive.CfnInput.InputSourceRequestProperty(
                password_param="passwordParam",
                url="url",
                username="username"
            )],
            tags=tags,
            type="type",
            vpc=medialive.CfnInput.InputVpcRequestProperty(
                security_group_ids=["securityGroupIds"],
                subnet_ids=["subnetIds"]
            )
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        destinations: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnInput.InputDestinationRequestProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        input_devices: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnInput.InputDeviceSettingsProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        input_security_groups: typing.Optional[typing.Sequence[builtins.str]] = None,
        media_connect_flows: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnInput.MediaConnectFlowRequestProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        name: typing.Optional[builtins.str] = None,
        role_arn: typing.Optional[builtins.str] = None,
        sources: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnInput.InputSourceRequestProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        tags: typing.Any = None,
        type: typing.Optional[builtins.str] = None,
        vpc: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnInput.InputVpcRequestProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param destinations: Settings that apply only if the input is a push type of input.
        :param input_devices: Settings that apply only if the input is an Elemental Link input.
        :param input_security_groups: The list of input security groups (referenced by IDs) to attach to the input if the input is a push type.
        :param media_connect_flows: Settings that apply only if the input is a MediaConnect input.
        :param name: A name for the input.
        :param role_arn: The IAM role for MediaLive to assume when creating a MediaConnect input or Amazon VPC input. This doesn't apply to other types of inputs. The role is identified by its ARN.
        :param sources: Settings that apply only if the input is a pull type of input.
        :param tags: A collection of tags for this input. Each tag is a key-value pair.
        :param type: The type for this input.
        :param vpc: Settings that apply only if the input is an push input where the source is on Amazon VPC.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__c37c21db5712f0e670f3144efc99d8c9ed0a67af3bc5d9018df305c7ed3dd1f3)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnInputProps(
            destinations=destinations,
            input_devices=input_devices,
            input_security_groups=input_security_groups,
            media_connect_flows=media_connect_flows,
            name=name,
            role_arn=role_arn,
            sources=sources,
            tags=tags,
            type=type,
            vpc=vpc,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__f06412b7f89325cfc3260f21b8a1f8a01a8bc90a8ae4222ef007ee6754a88bfa)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__1e30819ae8a8ae88784222461c091da43415ef7f311ddfa329659f3148c6bc48)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrArn")
    def attr_arn(self) -> builtins.str:
        '''The ARN of the MediaLive input.

        For example: arn:aws:medialive:us-west-1:111122223333:medialive:input:1234567. MediaLive creates this ARN when it creates the input.

        :cloudformationAttribute: Arn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrArn"))

    @builtins.property
    @jsii.member(jsii_name="attrDestinations")
    def attr_destinations(self) -> typing.List[builtins.str]:
        '''For a push input, the the destination or destinations for the input.

        The destinations are the URLs of locations on MediaLive where the upstream system pushes the content to, for this input. MediaLive creates these addresses when it creates the input.

        :cloudformationAttribute: Destinations
        '''
        return typing.cast(typing.List[builtins.str], jsii.get(self, "attrDestinations"))

    @builtins.property
    @jsii.member(jsii_name="attrId")
    def attr_id(self) -> builtins.str:
        '''The unique ID for the device.

        :cloudformationAttribute: Id
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrId"))

    @builtins.property
    @jsii.member(jsii_name="attrSources")
    def attr_sources(self) -> typing.List[builtins.str]:
        '''For a pull input, the source or sources for the input.

        The sources are the URLs of locations on the upstream system where MediaLive pulls the content from, for this input. You included these URLs in the create request.

        :cloudformationAttribute: Sources
        '''
        return typing.cast(typing.List[builtins.str], jsii.get(self, "attrSources"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="destinations")
    def destinations(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnInput.InputDestinationRequestProperty"]]]]:
        '''Settings that apply only if the input is a push type of input.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnInput.InputDestinationRequestProperty"]]]], jsii.get(self, "destinations"))

    @destinations.setter
    def destinations(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnInput.InputDestinationRequestProperty"]]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4cffc80b1792cfd553a18c3073e65c06bd96b5645d7d220d2c0fa6401fddb016)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "destinations", value)

    @builtins.property
    @jsii.member(jsii_name="inputDevices")
    def input_devices(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnInput.InputDeviceSettingsProperty"]]]]:
        '''Settings that apply only if the input is an Elemental Link input.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnInput.InputDeviceSettingsProperty"]]]], jsii.get(self, "inputDevices"))

    @input_devices.setter
    def input_devices(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnInput.InputDeviceSettingsProperty"]]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__fa854573ca5ff75a03fa7c73c49f967eb050c5f8110cd037bf76b2fac1c1550a)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "inputDevices", value)

    @builtins.property
    @jsii.member(jsii_name="inputSecurityGroups")
    def input_security_groups(self) -> typing.Optional[typing.List[builtins.str]]:
        '''The list of input security groups (referenced by IDs) to attach to the input if the input is a push type.'''
        return typing.cast(typing.Optional[typing.List[builtins.str]], jsii.get(self, "inputSecurityGroups"))

    @input_security_groups.setter
    def input_security_groups(
        self,
        value: typing.Optional[typing.List[builtins.str]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__bea25d5e13d2be08df0fa00244d91e1be0fccf070e6713bcf2ec7f8496e8b86a)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "inputSecurityGroups", value)

    @builtins.property
    @jsii.member(jsii_name="mediaConnectFlows")
    def media_connect_flows(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnInput.MediaConnectFlowRequestProperty"]]]]:
        '''Settings that apply only if the input is a MediaConnect input.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnInput.MediaConnectFlowRequestProperty"]]]], jsii.get(self, "mediaConnectFlows"))

    @media_connect_flows.setter
    def media_connect_flows(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnInput.MediaConnectFlowRequestProperty"]]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__36d69a3eef35821448bd3b7d0186fd6931cde0ba3ed063665c2e4374b869a945)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "mediaConnectFlows", value)

    @builtins.property
    @jsii.member(jsii_name="name")
    def name(self) -> typing.Optional[builtins.str]:
        '''A name for the input.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "name"))

    @name.setter
    def name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__e6c903e6cb9991ee5f749c3f36cb893dcfc9c3500eafd66dea88a7359295ed6f)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "name", value)

    @builtins.property
    @jsii.member(jsii_name="roleArn")
    def role_arn(self) -> typing.Optional[builtins.str]:
        '''The IAM role for MediaLive to assume when creating a MediaConnect input or Amazon VPC input.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "roleArn"))

    @role_arn.setter
    def role_arn(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__f27fc34cd2daae9bc688d197b2f17a9be9a91d5deaae844af5f1dc9c7ebc31ca)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "roleArn", value)

    @builtins.property
    @jsii.member(jsii_name="sources")
    def sources(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnInput.InputSourceRequestProperty"]]]]:
        '''Settings that apply only if the input is a pull type of input.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnInput.InputSourceRequestProperty"]]]], jsii.get(self, "sources"))

    @sources.setter
    def sources(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnInput.InputSourceRequestProperty"]]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__1e2140b67b560eb9a66e34c68eb67fd4ee61037201bd2a5b844eaf6d2bcb509a)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "sources", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Any:
        '''A collection of tags for this input.'''
        return typing.cast(typing.Any, jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Any) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4cb0b4312f5bf2286fec4a480d4c11d73095bd5e3394f8191687cad43833f859)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @builtins.property
    @jsii.member(jsii_name="type")
    def type(self) -> typing.Optional[builtins.str]:
        '''The type for this input.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "type"))

    @type.setter
    def type(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__5a9139f8e9583109eaae05d0483b3e2bdd9086b4e2737a60f3569c5134a65e7a)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "type", value)

    @builtins.property
    @jsii.member(jsii_name="vpc")
    def vpc(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnInput.InputVpcRequestProperty"]]:
        '''Settings that apply only if the input is an push input where the source is on Amazon VPC.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnInput.InputVpcRequestProperty"]], jsii.get(self, "vpc"))

    @vpc.setter
    def vpc(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnInput.InputVpcRequestProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__573af095b6f922599f1ad8fe07017e5b0b3c4507ea657c757c3526efa045bac7)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "vpc", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnInput.InputDestinationRequestProperty",
        jsii_struct_bases=[],
        name_mapping={"stream_name": "streamName"},
    )
    class InputDestinationRequestProperty:
        def __init__(
            self,
            *,
            stream_name: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Settings that apply only if the input is a push type of input.

            The parent of this entity is Input.

            :param stream_name: The stream name (application name/application instance) for the location the RTMP source content will be pushed to in MediaLive.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-input-inputdestinationrequest.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                input_destination_request_property = medialive.CfnInput.InputDestinationRequestProperty(
                    stream_name="streamName"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__09c9b47df08f57a6e8b0b3f37b32fd88bedb55ea142fe627a7771479eb02b5c3)
                check_type(argname="argument stream_name", value=stream_name, expected_type=type_hints["stream_name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if stream_name is not None:
                self._values["stream_name"] = stream_name

        @builtins.property
        def stream_name(self) -> typing.Optional[builtins.str]:
            '''The stream name (application name/application instance) for the location the RTMP source content will be pushed to in MediaLive.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-input-inputdestinationrequest.html#cfn-medialive-input-inputdestinationrequest-streamname
            '''
            result = self._values.get("stream_name")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InputDestinationRequestProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnInput.InputDeviceRequestProperty",
        jsii_struct_bases=[],
        name_mapping={"id": "id"},
    )
    class InputDeviceRequestProperty:
        def __init__(self, *, id: typing.Optional[builtins.str] = None) -> None:
            '''
            :param id: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-input-inputdevicerequest.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                input_device_request_property = medialive.CfnInput.InputDeviceRequestProperty(
                    id="id"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__eaae8f0579d1f20d3f48dae62b9bab4e2ff9bda22d9f3cfeb6bf1ee3e104ffee)
                check_type(argname="argument id", value=id, expected_type=type_hints["id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if id is not None:
                self._values["id"] = id

        @builtins.property
        def id(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-input-inputdevicerequest.html#cfn-medialive-input-inputdevicerequest-id
            '''
            result = self._values.get("id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InputDeviceRequestProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnInput.InputDeviceSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"id": "id"},
    )
    class InputDeviceSettingsProperty:
        def __init__(self, *, id: typing.Optional[builtins.str] = None) -> None:
            '''Settings that apply only if the input is an Elemental Link input.

            The parent of this entity is Input.

            :param id: The unique ID for the device.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-input-inputdevicesettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                input_device_settings_property = medialive.CfnInput.InputDeviceSettingsProperty(
                    id="id"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__d332b129d8d5c4b16abfa6185c6c402dee09a64bf0a41a41378c10a7e4f36d2d)
                check_type(argname="argument id", value=id, expected_type=type_hints["id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if id is not None:
                self._values["id"] = id

        @builtins.property
        def id(self) -> typing.Optional[builtins.str]:
            '''The unique ID for the device.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-input-inputdevicesettings.html#cfn-medialive-input-inputdevicesettings-id
            '''
            result = self._values.get("id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InputDeviceSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnInput.InputSourceRequestProperty",
        jsii_struct_bases=[],
        name_mapping={
            "password_param": "passwordParam",
            "url": "url",
            "username": "username",
        },
    )
    class InputSourceRequestProperty:
        def __init__(
            self,
            *,
            password_param: typing.Optional[builtins.str] = None,
            url: typing.Optional[builtins.str] = None,
            username: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Settings that apply only if the input is a pull type of input.

            The parent of this entity is Input.

            :param password_param: The password parameter that holds the password for accessing the upstream system. The password parameter applies only if the upstream system requires credentials.
            :param url: For a pull input, the URL where MediaLive pulls the source content from.
            :param username: The user name to connect to the upstream system. The user name applies only if the upstream system requires credentials.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-input-inputsourcerequest.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                input_source_request_property = medialive.CfnInput.InputSourceRequestProperty(
                    password_param="passwordParam",
                    url="url",
                    username="username"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__a2b96e38bc252de912c2488457298c14577ee26d5734b6d9575fbe71a0f4f654)
                check_type(argname="argument password_param", value=password_param, expected_type=type_hints["password_param"])
                check_type(argname="argument url", value=url, expected_type=type_hints["url"])
                check_type(argname="argument username", value=username, expected_type=type_hints["username"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if password_param is not None:
                self._values["password_param"] = password_param
            if url is not None:
                self._values["url"] = url
            if username is not None:
                self._values["username"] = username

        @builtins.property
        def password_param(self) -> typing.Optional[builtins.str]:
            '''The password parameter that holds the password for accessing the upstream system.

            The password parameter applies only if the upstream system requires credentials.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-input-inputsourcerequest.html#cfn-medialive-input-inputsourcerequest-passwordparam
            '''
            result = self._values.get("password_param")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def url(self) -> typing.Optional[builtins.str]:
            '''For a pull input, the URL where MediaLive pulls the source content from.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-input-inputsourcerequest.html#cfn-medialive-input-inputsourcerequest-url
            '''
            result = self._values.get("url")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def username(self) -> typing.Optional[builtins.str]:
            '''The user name to connect to the upstream system.

            The user name applies only if the upstream system requires credentials.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-input-inputsourcerequest.html#cfn-medialive-input-inputsourcerequest-username
            '''
            result = self._values.get("username")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InputSourceRequestProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnInput.InputVpcRequestProperty",
        jsii_struct_bases=[],
        name_mapping={
            "security_group_ids": "securityGroupIds",
            "subnet_ids": "subnetIds",
        },
    )
    class InputVpcRequestProperty:
        def __init__(
            self,
            *,
            security_group_ids: typing.Optional[typing.Sequence[builtins.str]] = None,
            subnet_ids: typing.Optional[typing.Sequence[builtins.str]] = None,
        ) -> None:
            '''Settings that apply only if the input is an push input where the source is on Amazon VPC.

            The parent of this entity is Input.

            :param security_group_ids: The list of up to five VPC security group IDs to attach to the input VPC network interfaces. The security groups require subnet IDs. If none are specified, MediaLive uses the VPC default security group.
            :param subnet_ids: The list of two VPC subnet IDs from the same VPC. You must associate subnet IDs to two unique Availability Zones.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-input-inputvpcrequest.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                input_vpc_request_property = medialive.CfnInput.InputVpcRequestProperty(
                    security_group_ids=["securityGroupIds"],
                    subnet_ids=["subnetIds"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__66d71f64b486a2ac892041d2fd4bd16287eb7f5a0009f86e46e79eb1292fa254)
                check_type(argname="argument security_group_ids", value=security_group_ids, expected_type=type_hints["security_group_ids"])
                check_type(argname="argument subnet_ids", value=subnet_ids, expected_type=type_hints["subnet_ids"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if security_group_ids is not None:
                self._values["security_group_ids"] = security_group_ids
            if subnet_ids is not None:
                self._values["subnet_ids"] = subnet_ids

        @builtins.property
        def security_group_ids(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The list of up to five VPC security group IDs to attach to the input VPC network interfaces.

            The security groups require subnet IDs. If none are specified, MediaLive uses the VPC default security group.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-input-inputvpcrequest.html#cfn-medialive-input-inputvpcrequest-securitygroupids
            '''
            result = self._values.get("security_group_ids")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def subnet_ids(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The list of two VPC subnet IDs from the same VPC.

            You must associate subnet IDs to two unique Availability Zones.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-input-inputvpcrequest.html#cfn-medialive-input-inputvpcrequest-subnetids
            '''
            result = self._values.get("subnet_ids")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InputVpcRequestProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnInput.MediaConnectFlowRequestProperty",
        jsii_struct_bases=[],
        name_mapping={"flow_arn": "flowArn"},
    )
    class MediaConnectFlowRequestProperty:
        def __init__(self, *, flow_arn: typing.Optional[builtins.str] = None) -> None:
            '''Settings that apply only if the input is a MediaConnect input.

            The parent of this entity is Input.

            :param flow_arn: The ARN of one or two MediaConnect flows that are the sources for this MediaConnect input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-input-mediaconnectflowrequest.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                media_connect_flow_request_property = medialive.CfnInput.MediaConnectFlowRequestProperty(
                    flow_arn="flowArn"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__9ac1510d8a06ea8e4310734088ce61190f4c874d079179e9dad6ae76aafb0782)
                check_type(argname="argument flow_arn", value=flow_arn, expected_type=type_hints["flow_arn"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if flow_arn is not None:
                self._values["flow_arn"] = flow_arn

        @builtins.property
        def flow_arn(self) -> typing.Optional[builtins.str]:
            '''The ARN of one or two MediaConnect flows that are the sources for this MediaConnect input.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-input-mediaconnectflowrequest.html#cfn-medialive-input-mediaconnectflowrequest-flowarn
            '''
            result = self._values.get("flow_arn")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MediaConnectFlowRequestProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_medialive.CfnInputProps",
    jsii_struct_bases=[],
    name_mapping={
        "destinations": "destinations",
        "input_devices": "inputDevices",
        "input_security_groups": "inputSecurityGroups",
        "media_connect_flows": "mediaConnectFlows",
        "name": "name",
        "role_arn": "roleArn",
        "sources": "sources",
        "tags": "tags",
        "type": "type",
        "vpc": "vpc",
    },
)
class CfnInputProps:
    def __init__(
        self,
        *,
        destinations: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInput.InputDestinationRequestProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
        input_devices: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInput.InputDeviceSettingsProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
        input_security_groups: typing.Optional[typing.Sequence[builtins.str]] = None,
        media_connect_flows: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInput.MediaConnectFlowRequestProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
        name: typing.Optional[builtins.str] = None,
        role_arn: typing.Optional[builtins.str] = None,
        sources: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInput.InputSourceRequestProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
        tags: typing.Any = None,
        type: typing.Optional[builtins.str] = None,
        vpc: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInput.InputVpcRequestProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnInput``.

        :param destinations: Settings that apply only if the input is a push type of input.
        :param input_devices: Settings that apply only if the input is an Elemental Link input.
        :param input_security_groups: The list of input security groups (referenced by IDs) to attach to the input if the input is a push type.
        :param media_connect_flows: Settings that apply only if the input is a MediaConnect input.
        :param name: A name for the input.
        :param role_arn: The IAM role for MediaLive to assume when creating a MediaConnect input or Amazon VPC input. This doesn't apply to other types of inputs. The role is identified by its ARN.
        :param sources: Settings that apply only if the input is a pull type of input.
        :param tags: A collection of tags for this input. Each tag is a key-value pair.
        :param type: The type for this input.
        :param vpc: Settings that apply only if the input is an push input where the source is on Amazon VPC.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-input.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_medialive as medialive
            
            # tags: Any
            
            cfn_input_props = medialive.CfnInputProps(
                destinations=[medialive.CfnInput.InputDestinationRequestProperty(
                    stream_name="streamName"
                )],
                input_devices=[medialive.CfnInput.InputDeviceSettingsProperty(
                    id="id"
                )],
                input_security_groups=["inputSecurityGroups"],
                media_connect_flows=[medialive.CfnInput.MediaConnectFlowRequestProperty(
                    flow_arn="flowArn"
                )],
                name="name",
                role_arn="roleArn",
                sources=[medialive.CfnInput.InputSourceRequestProperty(
                    password_param="passwordParam",
                    url="url",
                    username="username"
                )],
                tags=tags,
                type="type",
                vpc=medialive.CfnInput.InputVpcRequestProperty(
                    security_group_ids=["securityGroupIds"],
                    subnet_ids=["subnetIds"]
                )
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__f5e4e9b50624e42353cf086c51b3b7174a3d994bf1dc422fe68231305af4a8c7)
            check_type(argname="argument destinations", value=destinations, expected_type=type_hints["destinations"])
            check_type(argname="argument input_devices", value=input_devices, expected_type=type_hints["input_devices"])
            check_type(argname="argument input_security_groups", value=input_security_groups, expected_type=type_hints["input_security_groups"])
            check_type(argname="argument media_connect_flows", value=media_connect_flows, expected_type=type_hints["media_connect_flows"])
            check_type(argname="argument name", value=name, expected_type=type_hints["name"])
            check_type(argname="argument role_arn", value=role_arn, expected_type=type_hints["role_arn"])
            check_type(argname="argument sources", value=sources, expected_type=type_hints["sources"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
            check_type(argname="argument type", value=type, expected_type=type_hints["type"])
            check_type(argname="argument vpc", value=vpc, expected_type=type_hints["vpc"])
        self._values: typing.Dict[builtins.str, typing.Any] = {}
        if destinations is not None:
            self._values["destinations"] = destinations
        if input_devices is not None:
            self._values["input_devices"] = input_devices
        if input_security_groups is not None:
            self._values["input_security_groups"] = input_security_groups
        if media_connect_flows is not None:
            self._values["media_connect_flows"] = media_connect_flows
        if name is not None:
            self._values["name"] = name
        if role_arn is not None:
            self._values["role_arn"] = role_arn
        if sources is not None:
            self._values["sources"] = sources
        if tags is not None:
            self._values["tags"] = tags
        if type is not None:
            self._values["type"] = type
        if vpc is not None:
            self._values["vpc"] = vpc

    @builtins.property
    def destinations(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnInput.InputDestinationRequestProperty]]]]:
        '''Settings that apply only if the input is a push type of input.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-input.html#cfn-medialive-input-destinations
        '''
        result = self._values.get("destinations")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnInput.InputDestinationRequestProperty]]]], result)

    @builtins.property
    def input_devices(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnInput.InputDeviceSettingsProperty]]]]:
        '''Settings that apply only if the input is an Elemental Link input.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-input.html#cfn-medialive-input-inputdevices
        '''
        result = self._values.get("input_devices")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnInput.InputDeviceSettingsProperty]]]], result)

    @builtins.property
    def input_security_groups(self) -> typing.Optional[typing.List[builtins.str]]:
        '''The list of input security groups (referenced by IDs) to attach to the input if the input is a push type.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-input.html#cfn-medialive-input-inputsecuritygroups
        '''
        result = self._values.get("input_security_groups")
        return typing.cast(typing.Optional[typing.List[builtins.str]], result)

    @builtins.property
    def media_connect_flows(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnInput.MediaConnectFlowRequestProperty]]]]:
        '''Settings that apply only if the input is a MediaConnect input.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-input.html#cfn-medialive-input-mediaconnectflows
        '''
        result = self._values.get("media_connect_flows")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnInput.MediaConnectFlowRequestProperty]]]], result)

    @builtins.property
    def name(self) -> typing.Optional[builtins.str]:
        '''A name for the input.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-input.html#cfn-medialive-input-name
        '''
        result = self._values.get("name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def role_arn(self) -> typing.Optional[builtins.str]:
        '''The IAM role for MediaLive to assume when creating a MediaConnect input or Amazon VPC input.

        This doesn't apply to other types of inputs. The role is identified by its ARN.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-input.html#cfn-medialive-input-rolearn
        '''
        result = self._values.get("role_arn")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def sources(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnInput.InputSourceRequestProperty]]]]:
        '''Settings that apply only if the input is a pull type of input.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-input.html#cfn-medialive-input-sources
        '''
        result = self._values.get("sources")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnInput.InputSourceRequestProperty]]]], result)

    @builtins.property
    def tags(self) -> typing.Any:
        '''A collection of tags for this input.

        Each tag is a key-value pair.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-input.html#cfn-medialive-input-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Any, result)

    @builtins.property
    def type(self) -> typing.Optional[builtins.str]:
        '''The type for this input.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-input.html#cfn-medialive-input-type
        '''
        result = self._values.get("type")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def vpc(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnInput.InputVpcRequestProperty]]:
        '''Settings that apply only if the input is an push input where the source is on Amazon VPC.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-input.html#cfn-medialive-input-vpc
        '''
        result = self._values.get("vpc")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnInput.InputVpcRequestProperty]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnInputProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnInputSecurityGroup(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_medialive.CfnInputSecurityGroup",
):
    '''The AWS::MediaLive::InputSecurityGroup is a MediaLive resource type that creates an input security group.

    A MediaLive input security group is associated with a MediaLive input. The input security group is an "allow list" of IP addresses that controls whether an external IP address can push content to the associated MediaLive input.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-inputsecuritygroup.html
    :cloudformationResource: AWS::MediaLive::InputSecurityGroup
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_medialive as medialive
        
        # tags: Any
        
        cfn_input_security_group = medialive.CfnInputSecurityGroup(self, "MyCfnInputSecurityGroup",
            tags=tags,
            whitelist_rules=[medialive.CfnInputSecurityGroup.InputWhitelistRuleCidrProperty(
                cidr="cidr"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        tags: typing.Any = None,
        whitelist_rules: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnInputSecurityGroup.InputWhitelistRuleCidrProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param tags: A collection of tags for this input security group. Each tag is a key-value pair.
        :param whitelist_rules: The list of IPv4 CIDR addresses to include in the input security group as "allowed" addresses.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__36ebb0545851926b9b6f0c8e07003f5330e537dbc3cb244849ed42ceb55b14b3)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnInputSecurityGroupProps(tags=tags, whitelist_rules=whitelist_rules)

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__c205418125ef58c918892fec76333f5c35d1f96f5a51d5cfb93d17f6e0af00f8)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__a19308f34fc5d370597883826d50c9d414f32cb5a903a8a869b85a3aa50736fd)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrArn")
    def attr_arn(self) -> builtins.str:
        '''The ARN of the MediaLive input security group.

        For example: arn:aws:medialive:us-west-1:111122223333:medialive:inputSecurityGroup:1234567

        :cloudformationAttribute: Arn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrArn"))

    @builtins.property
    @jsii.member(jsii_name="attrId")
    def attr_id(self) -> builtins.str:
        '''The Id of the Input Security Group.

        :cloudformationAttribute: Id
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrId"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Any:
        '''A collection of tags for this input security group.'''
        return typing.cast(typing.Any, jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Any) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__78c4f2f397c59356de1585c0537789bd674595bf187083c3d0e7be4cbe3fee89)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @builtins.property
    @jsii.member(jsii_name="whitelistRules")
    def whitelist_rules(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnInputSecurityGroup.InputWhitelistRuleCidrProperty"]]]]:
        '''The list of IPv4 CIDR addresses to include in the input security group as "allowed" addresses.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnInputSecurityGroup.InputWhitelistRuleCidrProperty"]]]], jsii.get(self, "whitelistRules"))

    @whitelist_rules.setter
    def whitelist_rules(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnInputSecurityGroup.InputWhitelistRuleCidrProperty"]]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__d1d5c5d1eac7f185a969f245cbf8bf734b1b341e4c215a93b8cea44585b6f021)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "whitelistRules", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnInputSecurityGroup.InputWhitelistRuleCidrProperty",
        jsii_struct_bases=[],
        name_mapping={"cidr": "cidr"},
    )
    class InputWhitelistRuleCidrProperty:
        def __init__(self, *, cidr: typing.Optional[builtins.str] = None) -> None:
            '''An IPv4 CIDR range to include in this input security group.

            The parent of this entity is InputSecurityGroup.

            :param cidr: An IPv4 CIDR range to include in this input security group.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-inputsecuritygroup-inputwhitelistrulecidr.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                input_whitelist_rule_cidr_property = medialive.CfnInputSecurityGroup.InputWhitelistRuleCidrProperty(
                    cidr="cidr"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__a030c17295e511120d15baa09772d94fd8c4856db58d0f3bd773ecf4b53fe577)
                check_type(argname="argument cidr", value=cidr, expected_type=type_hints["cidr"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if cidr is not None:
                self._values["cidr"] = cidr

        @builtins.property
        def cidr(self) -> typing.Optional[builtins.str]:
            '''An IPv4 CIDR range to include in this input security group.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-inputsecuritygroup-inputwhitelistrulecidr.html#cfn-medialive-inputsecuritygroup-inputwhitelistrulecidr-cidr
            '''
            result = self._values.get("cidr")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InputWhitelistRuleCidrProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_medialive.CfnInputSecurityGroupProps",
    jsii_struct_bases=[],
    name_mapping={"tags": "tags", "whitelist_rules": "whitelistRules"},
)
class CfnInputSecurityGroupProps:
    def __init__(
        self,
        *,
        tags: typing.Any = None,
        whitelist_rules: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInputSecurityGroup.InputWhitelistRuleCidrProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnInputSecurityGroup``.

        :param tags: A collection of tags for this input security group. Each tag is a key-value pair.
        :param whitelist_rules: The list of IPv4 CIDR addresses to include in the input security group as "allowed" addresses.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-inputsecuritygroup.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_medialive as medialive
            
            # tags: Any
            
            cfn_input_security_group_props = medialive.CfnInputSecurityGroupProps(
                tags=tags,
                whitelist_rules=[medialive.CfnInputSecurityGroup.InputWhitelistRuleCidrProperty(
                    cidr="cidr"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__dc91e6b6fb01d2e6a1928acf9023824675d51e9e0f586d43d61092afdca3bbd0)
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
            check_type(argname="argument whitelist_rules", value=whitelist_rules, expected_type=type_hints["whitelist_rules"])
        self._values: typing.Dict[builtins.str, typing.Any] = {}
        if tags is not None:
            self._values["tags"] = tags
        if whitelist_rules is not None:
            self._values["whitelist_rules"] = whitelist_rules

    @builtins.property
    def tags(self) -> typing.Any:
        '''A collection of tags for this input security group.

        Each tag is a key-value pair.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-inputsecuritygroup.html#cfn-medialive-inputsecuritygroup-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Any, result)

    @builtins.property
    def whitelist_rules(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnInputSecurityGroup.InputWhitelistRuleCidrProperty]]]]:
        '''The list of IPv4 CIDR addresses to include in the input security group as "allowed" addresses.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-inputsecuritygroup.html#cfn-medialive-inputsecuritygroup-whitelistrules
        '''
        result = self._values.get("whitelist_rules")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnInputSecurityGroup.InputWhitelistRuleCidrProperty]]]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnInputSecurityGroupProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556)
class CfnMultiplex(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_medialive.CfnMultiplex",
):
    '''The multiplex object.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-multiplex.html
    :cloudformationResource: AWS::MediaLive::Multiplex
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_medialive as medialive
        
        cfn_multiplex = medialive.CfnMultiplex(self, "MyCfnMultiplex",
            availability_zones=["availabilityZones"],
            multiplex_settings=medialive.CfnMultiplex.MultiplexSettingsProperty(
                transport_stream_bitrate=123,
                transport_stream_id=123,
        
                # the properties below are optional
                maximum_video_buffer_delay_milliseconds=123,
                transport_stream_reserved_bitrate=123
            ),
            name="name",
        
            # the properties below are optional
            destinations=[medialive.CfnMultiplex.MultiplexOutputDestinationProperty(
                multiplex_media_connect_output_destination_settings=medialive.CfnMultiplex.MultiplexMediaConnectOutputDestinationSettingsProperty(
                    entitlement_arn="entitlementArn"
                )
            )],
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        availability_zones: typing.Sequence[builtins.str],
        multiplex_settings: typing.Union[_IResolvable_da3f097b, typing.Union["CfnMultiplex.MultiplexSettingsProperty", typing.Dict[builtins.str, typing.Any]]],
        name: builtins.str,
        destinations: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMultiplex.MultiplexOutputDestinationProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param availability_zones: A list of availability zones for the multiplex.
        :param multiplex_settings: Configuration for a multiplex event.
        :param name: The name of the multiplex.
        :param destinations: A list of the multiplex output destinations.
        :param tags: A collection of key-value pairs.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__9255fd2dfb064346defb8b7a153f0b574e1531ce42a8b94643d2c219b3d36e9b)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnMultiplexProps(
            availability_zones=availability_zones,
            multiplex_settings=multiplex_settings,
            name=name,
            destinations=destinations,
            tags=tags,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__7251d62dc563ff611a15fab5a5364c7fb2c9de0d845bd06e4a3a5967db5d0d1e)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__49696d04c41e5b305329e8b5ae4d2d1d5ceb67bde9999a4b40625b4d263c0901)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrArn")
    def attr_arn(self) -> builtins.str:
        '''The unique arn of the multiplex.

        :cloudformationAttribute: Arn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrArn"))

    @builtins.property
    @jsii.member(jsii_name="attrId")
    def attr_id(self) -> builtins.str:
        '''The unique id of the multiplex.

        :cloudformationAttribute: Id
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrId"))

    @builtins.property
    @jsii.member(jsii_name="attrPipelinesRunningCount")
    def attr_pipelines_running_count(self) -> jsii.Number:
        '''The number of currently healthy pipelines.

        :cloudformationAttribute: PipelinesRunningCount
        '''
        return typing.cast(jsii.Number, jsii.get(self, "attrPipelinesRunningCount"))

    @builtins.property
    @jsii.member(jsii_name="attrProgramCount")
    def attr_program_count(self) -> jsii.Number:
        '''The number of programs in the multiplex.

        :cloudformationAttribute: ProgramCount
        '''
        return typing.cast(jsii.Number, jsii.get(self, "attrProgramCount"))

    @builtins.property
    @jsii.member(jsii_name="attrState")
    def attr_state(self) -> builtins.str:
        '''The current state of the multiplex.

        :cloudformationAttribute: State
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrState"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="availabilityZones")
    def availability_zones(self) -> typing.List[builtins.str]:
        '''A list of availability zones for the multiplex.'''
        return typing.cast(typing.List[builtins.str], jsii.get(self, "availabilityZones"))

    @availability_zones.setter
    def availability_zones(self, value: typing.List[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__066386970cedb1982b2ee43e638b7c16a64c42023c2fe71eeea27fd8ccc94774)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "availabilityZones", value)

    @builtins.property
    @jsii.member(jsii_name="multiplexSettings")
    def multiplex_settings(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnMultiplex.MultiplexSettingsProperty"]:
        '''Configuration for a multiplex event.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnMultiplex.MultiplexSettingsProperty"], jsii.get(self, "multiplexSettings"))

    @multiplex_settings.setter
    def multiplex_settings(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnMultiplex.MultiplexSettingsProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__ce2855608a24187a7473607b448e08fb8942be2d21caa404ba1868f0a99b6c90)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "multiplexSettings", value)

    @builtins.property
    @jsii.member(jsii_name="name")
    def name(self) -> builtins.str:
        '''The name of the multiplex.'''
        return typing.cast(builtins.str, jsii.get(self, "name"))

    @name.setter
    def name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__7ab37567653ebe7c5e39a80a5831032e9ab430ee890caccab9f7176fc5344c23)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "name", value)

    @builtins.property
    @jsii.member(jsii_name="destinations")
    def destinations(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnMultiplex.MultiplexOutputDestinationProperty"]]]]:
        '''A list of the multiplex output destinations.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnMultiplex.MultiplexOutputDestinationProperty"]]]], jsii.get(self, "destinations"))

    @destinations.setter
    def destinations(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnMultiplex.MultiplexOutputDestinationProperty"]]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4989a725a9ed6430dd6acf9e21056f1e7c9d10e8c1bc9901449c1fb34b59d29b)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "destinations", value)

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''A collection of key-value pairs.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tags"))

    @tags.setter
    def tags(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__2391218d45da78d7d7a00830023efa7328947a64cd54595c0c575bf450f1ad83)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tags", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnMultiplex.MultiplexMediaConnectOutputDestinationSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"entitlement_arn": "entitlementArn"},
    )
    class MultiplexMediaConnectOutputDestinationSettingsProperty:
        def __init__(
            self,
            *,
            entitlement_arn: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Multiplex MediaConnect output destination settings.

            :param entitlement_arn: The MediaConnect entitlement ARN available as a Flow source.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplex-multiplexmediaconnectoutputdestinationsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                multiplex_media_connect_output_destination_settings_property = medialive.CfnMultiplex.MultiplexMediaConnectOutputDestinationSettingsProperty(
                    entitlement_arn="entitlementArn"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__54628cd656700491721a0d154daf3165b967b0a24409567e0c7b5b772b083857)
                check_type(argname="argument entitlement_arn", value=entitlement_arn, expected_type=type_hints["entitlement_arn"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if entitlement_arn is not None:
                self._values["entitlement_arn"] = entitlement_arn

        @builtins.property
        def entitlement_arn(self) -> typing.Optional[builtins.str]:
            '''The MediaConnect entitlement ARN available as a Flow source.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplex-multiplexmediaconnectoutputdestinationsettings.html#cfn-medialive-multiplex-multiplexmediaconnectoutputdestinationsettings-entitlementarn
            '''
            result = self._values.get("entitlement_arn")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MultiplexMediaConnectOutputDestinationSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnMultiplex.MultiplexOutputDestinationProperty",
        jsii_struct_bases=[],
        name_mapping={
            "multiplex_media_connect_output_destination_settings": "multiplexMediaConnectOutputDestinationSettings",
        },
    )
    class MultiplexOutputDestinationProperty:
        def __init__(
            self,
            *,
            multiplex_media_connect_output_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMultiplex.MultiplexMediaConnectOutputDestinationSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Multiplex output destination settings.

            :param multiplex_media_connect_output_destination_settings: Multiplex MediaConnect output destination settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplex-multiplexoutputdestination.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                multiplex_output_destination_property = medialive.CfnMultiplex.MultiplexOutputDestinationProperty(
                    multiplex_media_connect_output_destination_settings=medialive.CfnMultiplex.MultiplexMediaConnectOutputDestinationSettingsProperty(
                        entitlement_arn="entitlementArn"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__561720d175beeea6b17debcc3027b84e4039d3ca16a38d753ac9f194157ab392)
                check_type(argname="argument multiplex_media_connect_output_destination_settings", value=multiplex_media_connect_output_destination_settings, expected_type=type_hints["multiplex_media_connect_output_destination_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if multiplex_media_connect_output_destination_settings is not None:
                self._values["multiplex_media_connect_output_destination_settings"] = multiplex_media_connect_output_destination_settings

        @builtins.property
        def multiplex_media_connect_output_destination_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMultiplex.MultiplexMediaConnectOutputDestinationSettingsProperty"]]:
            '''Multiplex MediaConnect output destination settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplex-multiplexoutputdestination.html#cfn-medialive-multiplex-multiplexoutputdestination-multiplexmediaconnectoutputdestinationsettings
            '''
            result = self._values.get("multiplex_media_connect_output_destination_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMultiplex.MultiplexMediaConnectOutputDestinationSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MultiplexOutputDestinationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnMultiplex.MultiplexSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "transport_stream_bitrate": "transportStreamBitrate",
            "transport_stream_id": "transportStreamId",
            "maximum_video_buffer_delay_milliseconds": "maximumVideoBufferDelayMilliseconds",
            "transport_stream_reserved_bitrate": "transportStreamReservedBitrate",
        },
    )
    class MultiplexSettingsProperty:
        def __init__(
            self,
            *,
            transport_stream_bitrate: jsii.Number,
            transport_stream_id: jsii.Number,
            maximum_video_buffer_delay_milliseconds: typing.Optional[jsii.Number] = None,
            transport_stream_reserved_bitrate: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Contains configuration for a Multiplex event.

            :param transport_stream_bitrate: Transport stream bit rate.
            :param transport_stream_id: Transport stream ID.
            :param maximum_video_buffer_delay_milliseconds: Maximum video buffer delay in milliseconds.
            :param transport_stream_reserved_bitrate: Transport stream reserved bit rate.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplex-multiplexsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                multiplex_settings_property = medialive.CfnMultiplex.MultiplexSettingsProperty(
                    transport_stream_bitrate=123,
                    transport_stream_id=123,
                
                    # the properties below are optional
                    maximum_video_buffer_delay_milliseconds=123,
                    transport_stream_reserved_bitrate=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__459251b2f0910e0cef06727e247bd7e3eabc41412bd526dfcf77e7215a6bc648)
                check_type(argname="argument transport_stream_bitrate", value=transport_stream_bitrate, expected_type=type_hints["transport_stream_bitrate"])
                check_type(argname="argument transport_stream_id", value=transport_stream_id, expected_type=type_hints["transport_stream_id"])
                check_type(argname="argument maximum_video_buffer_delay_milliseconds", value=maximum_video_buffer_delay_milliseconds, expected_type=type_hints["maximum_video_buffer_delay_milliseconds"])
                check_type(argname="argument transport_stream_reserved_bitrate", value=transport_stream_reserved_bitrate, expected_type=type_hints["transport_stream_reserved_bitrate"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "transport_stream_bitrate": transport_stream_bitrate,
                "transport_stream_id": transport_stream_id,
            }
            if maximum_video_buffer_delay_milliseconds is not None:
                self._values["maximum_video_buffer_delay_milliseconds"] = maximum_video_buffer_delay_milliseconds
            if transport_stream_reserved_bitrate is not None:
                self._values["transport_stream_reserved_bitrate"] = transport_stream_reserved_bitrate

        @builtins.property
        def transport_stream_bitrate(self) -> jsii.Number:
            '''Transport stream bit rate.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplex-multiplexsettings.html#cfn-medialive-multiplex-multiplexsettings-transportstreambitrate
            '''
            result = self._values.get("transport_stream_bitrate")
            assert result is not None, "Required property 'transport_stream_bitrate' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def transport_stream_id(self) -> jsii.Number:
            '''Transport stream ID.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplex-multiplexsettings.html#cfn-medialive-multiplex-multiplexsettings-transportstreamid
            '''
            result = self._values.get("transport_stream_id")
            assert result is not None, "Required property 'transport_stream_id' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def maximum_video_buffer_delay_milliseconds(
            self,
        ) -> typing.Optional[jsii.Number]:
            '''Maximum video buffer delay in milliseconds.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplex-multiplexsettings.html#cfn-medialive-multiplex-multiplexsettings-maximumvideobufferdelaymilliseconds
            '''
            result = self._values.get("maximum_video_buffer_delay_milliseconds")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def transport_stream_reserved_bitrate(self) -> typing.Optional[jsii.Number]:
            '''Transport stream reserved bit rate.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplex-multiplexsettings.html#cfn-medialive-multiplex-multiplexsettings-transportstreamreservedbitrate
            '''
            result = self._values.get("transport_stream_reserved_bitrate")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MultiplexSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_medialive.CfnMultiplexProps",
    jsii_struct_bases=[],
    name_mapping={
        "availability_zones": "availabilityZones",
        "multiplex_settings": "multiplexSettings",
        "name": "name",
        "destinations": "destinations",
        "tags": "tags",
    },
)
class CfnMultiplexProps:
    def __init__(
        self,
        *,
        availability_zones: typing.Sequence[builtins.str],
        multiplex_settings: typing.Union[_IResolvable_da3f097b, typing.Union[CfnMultiplex.MultiplexSettingsProperty, typing.Dict[builtins.str, typing.Any]]],
        name: builtins.str,
        destinations: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMultiplex.MultiplexOutputDestinationProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnMultiplex``.

        :param availability_zones: A list of availability zones for the multiplex.
        :param multiplex_settings: Configuration for a multiplex event.
        :param name: The name of the multiplex.
        :param destinations: A list of the multiplex output destinations.
        :param tags: A collection of key-value pairs.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-multiplex.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_medialive as medialive
            
            cfn_multiplex_props = medialive.CfnMultiplexProps(
                availability_zones=["availabilityZones"],
                multiplex_settings=medialive.CfnMultiplex.MultiplexSettingsProperty(
                    transport_stream_bitrate=123,
                    transport_stream_id=123,
            
                    # the properties below are optional
                    maximum_video_buffer_delay_milliseconds=123,
                    transport_stream_reserved_bitrate=123
                ),
                name="name",
            
                # the properties below are optional
                destinations=[medialive.CfnMultiplex.MultiplexOutputDestinationProperty(
                    multiplex_media_connect_output_destination_settings=medialive.CfnMultiplex.MultiplexMediaConnectOutputDestinationSettingsProperty(
                        entitlement_arn="entitlementArn"
                    )
                )],
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__6704a902c292c9baa14e9f413dfaa206004c02bc34f7b7596d44253cdcecd075)
            check_type(argname="argument availability_zones", value=availability_zones, expected_type=type_hints["availability_zones"])
            check_type(argname="argument multiplex_settings", value=multiplex_settings, expected_type=type_hints["multiplex_settings"])
            check_type(argname="argument name", value=name, expected_type=type_hints["name"])
            check_type(argname="argument destinations", value=destinations, expected_type=type_hints["destinations"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "availability_zones": availability_zones,
            "multiplex_settings": multiplex_settings,
            "name": name,
        }
        if destinations is not None:
            self._values["destinations"] = destinations
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def availability_zones(self) -> typing.List[builtins.str]:
        '''A list of availability zones for the multiplex.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-multiplex.html#cfn-medialive-multiplex-availabilityzones
        '''
        result = self._values.get("availability_zones")
        assert result is not None, "Required property 'availability_zones' is missing"
        return typing.cast(typing.List[builtins.str], result)

    @builtins.property
    def multiplex_settings(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnMultiplex.MultiplexSettingsProperty]:
        '''Configuration for a multiplex event.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-multiplex.html#cfn-medialive-multiplex-multiplexsettings
        '''
        result = self._values.get("multiplex_settings")
        assert result is not None, "Required property 'multiplex_settings' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnMultiplex.MultiplexSettingsProperty], result)

    @builtins.property
    def name(self) -> builtins.str:
        '''The name of the multiplex.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-multiplex.html#cfn-medialive-multiplex-name
        '''
        result = self._values.get("name")
        assert result is not None, "Required property 'name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def destinations(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnMultiplex.MultiplexOutputDestinationProperty]]]]:
        '''A list of the multiplex output destinations.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-multiplex.html#cfn-medialive-multiplex-destinations
        '''
        result = self._values.get("destinations")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnMultiplex.MultiplexOutputDestinationProperty]]]], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''A collection of key-value pairs.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-multiplex.html#cfn-medialive-multiplex-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnMultiplexProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556)
class CfnMultiplexprogram(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_medialive.CfnMultiplexprogram",
):
    '''Resource schema for AWS::MediaLive::Multiplexprogram.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-multiplexprogram.html
    :cloudformationResource: AWS::MediaLive::Multiplexprogram
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_medialive as medialive
        
        cfn_multiplexprogram = medialive.CfnMultiplexprogram(self, "MyCfnMultiplexprogram",
            channel_id="channelId",
            multiplex_id="multiplexId",
            multiplex_program_settings=medialive.CfnMultiplexprogram.MultiplexProgramSettingsProperty(
                program_number=123,
        
                # the properties below are optional
                preferred_channel_pipeline="preferredChannelPipeline",
                service_descriptor=medialive.CfnMultiplexprogram.MultiplexProgramServiceDescriptorProperty(
                    provider_name="providerName",
                    service_name="serviceName"
                ),
                video_settings=medialive.CfnMultiplexprogram.MultiplexVideoSettingsProperty(
                    constant_bitrate=123,
                    statmux_settings=medialive.CfnMultiplexprogram.MultiplexStatmuxVideoSettingsProperty(
                        maximum_bitrate=123,
                        minimum_bitrate=123,
                        priority=123
                    )
                )
            ),
            packet_identifiers_map=medialive.CfnMultiplexprogram.MultiplexProgramPacketIdentifiersMapProperty(
                audio_pids=[123],
                dvb_sub_pids=[123],
                dvb_teletext_pid=123,
                etv_platform_pid=123,
                etv_signal_pid=123,
                klv_data_pids=[123],
                pcr_pid=123,
                pmt_pid=123,
                private_metadata_pid=123,
                scte27_pids=[123],
                scte35_pid=123,
                timed_metadata_pid=123,
                video_pid=123
            ),
            pipeline_details=[medialive.CfnMultiplexprogram.MultiplexProgramPipelineDetailProperty(
                active_channel_pipeline="activeChannelPipeline",
                pipeline_id="pipelineId"
            )],
            preferred_channel_pipeline="preferredChannelPipeline",
            program_name="programName"
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        channel_id: typing.Optional[builtins.str] = None,
        multiplex_id: typing.Optional[builtins.str] = None,
        multiplex_program_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMultiplexprogram.MultiplexProgramSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        packet_identifiers_map: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMultiplexprogram.MultiplexProgramPacketIdentifiersMapProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        pipeline_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMultiplexprogram.MultiplexProgramPipelineDetailProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        preferred_channel_pipeline: typing.Optional[builtins.str] = None,
        program_name: typing.Optional[builtins.str] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param channel_id: The unique ID of the channel.
        :param multiplex_id: The unique id of the multiplex.
        :param multiplex_program_settings: Multiplex Program settings configuration.
        :param packet_identifiers_map: Packet identifiers map for a given Multiplex program.
        :param pipeline_details: Contains information about the current sources for the specified program in the specified multiplex. Keep in mind that each multiplex pipeline connects to both pipelines in a given source channel (the channel identified by the program). But only one of those channel pipelines is ever active at one time.
        :param preferred_channel_pipeline: Indicates which pipeline is preferred by the multiplex for program ingest. If set to "PIPELINE_0" or "PIPELINE_1" and an unhealthy ingest causes the multiplex to switch to the non-preferred pipeline, it will switch back once that ingest is healthy again. If set to "CURRENTLY_ACTIVE", it will not switch back to the other pipeline based on it recovering to a healthy state, it will only switch if the active pipeline becomes unhealthy.
        :param program_name: The name of the multiplex program.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__1e8cee4de488a1e3af5984f421ac406fb3ce2264e4688ae568997c405d95db9e)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnMultiplexprogramProps(
            channel_id=channel_id,
            multiplex_id=multiplex_id,
            multiplex_program_settings=multiplex_program_settings,
            packet_identifiers_map=packet_identifiers_map,
            pipeline_details=pipeline_details,
            preferred_channel_pipeline=preferred_channel_pipeline,
            program_name=program_name,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4904cde8f157b6effdf71edfd8fbaa961ef5e43becdfa405253aab52e53901df)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__acad53db30a2a5e33a6f5a6711d6d6ce106a80011ec9feff43990953ed952789)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="channelId")
    def channel_id(self) -> typing.Optional[builtins.str]:
        '''The unique ID of the channel.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "channelId"))

    @channel_id.setter
    def channel_id(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__9561e3405511ef7da3fca8bead238e3b87bcd0ff2f533806ddb3f276557fd66e)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "channelId", value)

    @builtins.property
    @jsii.member(jsii_name="multiplexId")
    def multiplex_id(self) -> typing.Optional[builtins.str]:
        '''The unique id of the multiplex.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "multiplexId"))

    @multiplex_id.setter
    def multiplex_id(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__b94a917cbdd17ac18baea629f9c49823350870af7f009295dbe06082a0515154)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "multiplexId", value)

    @builtins.property
    @jsii.member(jsii_name="multiplexProgramSettings")
    def multiplex_program_settings(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMultiplexprogram.MultiplexProgramSettingsProperty"]]:
        '''Multiplex Program settings configuration.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMultiplexprogram.MultiplexProgramSettingsProperty"]], jsii.get(self, "multiplexProgramSettings"))

    @multiplex_program_settings.setter
    def multiplex_program_settings(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMultiplexprogram.MultiplexProgramSettingsProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__6f632ae0fd00e44b0621aa33b16ea0e78aceb8b3a0dd16e47b0fdff627872a53)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "multiplexProgramSettings", value)

    @builtins.property
    @jsii.member(jsii_name="packetIdentifiersMap")
    def packet_identifiers_map(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMultiplexprogram.MultiplexProgramPacketIdentifiersMapProperty"]]:
        '''Packet identifiers map for a given Multiplex program.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMultiplexprogram.MultiplexProgramPacketIdentifiersMapProperty"]], jsii.get(self, "packetIdentifiersMap"))

    @packet_identifiers_map.setter
    def packet_identifiers_map(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMultiplexprogram.MultiplexProgramPacketIdentifiersMapProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__5998eaaa6be93df5d21c91e4f1988628e7b05bfde5293cdc5cc97d358907e789)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "packetIdentifiersMap", value)

    @builtins.property
    @jsii.member(jsii_name="pipelineDetails")
    def pipeline_details(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnMultiplexprogram.MultiplexProgramPipelineDetailProperty"]]]]:
        '''Contains information about the current sources for the specified program in the specified multiplex.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnMultiplexprogram.MultiplexProgramPipelineDetailProperty"]]]], jsii.get(self, "pipelineDetails"))

    @pipeline_details.setter
    def pipeline_details(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnMultiplexprogram.MultiplexProgramPipelineDetailProperty"]]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__f19f0b51ba746cbf53f697a5e3f5fc3695fdbb86d18970453f105e18d0fdee6b)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "pipelineDetails", value)

    @builtins.property
    @jsii.member(jsii_name="preferredChannelPipeline")
    def preferred_channel_pipeline(self) -> typing.Optional[builtins.str]:
        '''Indicates which pipeline is preferred by the multiplex for program ingest.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "preferredChannelPipeline"))

    @preferred_channel_pipeline.setter
    def preferred_channel_pipeline(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__5fd9cbf1c19a9228eb0170cfa4a4957d400006db64b0d5892493b117b3c0597f)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "preferredChannelPipeline", value)

    @builtins.property
    @jsii.member(jsii_name="programName")
    def program_name(self) -> typing.Optional[builtins.str]:
        '''The name of the multiplex program.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "programName"))

    @program_name.setter
    def program_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__494cf8db89ceebb7c04e5a7903b723f6c172d029740810db9999f7e33a3c3e7c)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "programName", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnMultiplexprogram.MultiplexProgramPacketIdentifiersMapProperty",
        jsii_struct_bases=[],
        name_mapping={
            "audio_pids": "audioPids",
            "dvb_sub_pids": "dvbSubPids",
            "dvb_teletext_pid": "dvbTeletextPid",
            "etv_platform_pid": "etvPlatformPid",
            "etv_signal_pid": "etvSignalPid",
            "klv_data_pids": "klvDataPids",
            "pcr_pid": "pcrPid",
            "pmt_pid": "pmtPid",
            "private_metadata_pid": "privateMetadataPid",
            "scte27_pids": "scte27Pids",
            "scte35_pid": "scte35Pid",
            "timed_metadata_pid": "timedMetadataPid",
            "video_pid": "videoPid",
        },
    )
    class MultiplexProgramPacketIdentifiersMapProperty:
        def __init__(
            self,
            *,
            audio_pids: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[jsii.Number]]] = None,
            dvb_sub_pids: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[jsii.Number]]] = None,
            dvb_teletext_pid: typing.Optional[jsii.Number] = None,
            etv_platform_pid: typing.Optional[jsii.Number] = None,
            etv_signal_pid: typing.Optional[jsii.Number] = None,
            klv_data_pids: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[jsii.Number]]] = None,
            pcr_pid: typing.Optional[jsii.Number] = None,
            pmt_pid: typing.Optional[jsii.Number] = None,
            private_metadata_pid: typing.Optional[jsii.Number] = None,
            scte27_pids: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[jsii.Number]]] = None,
            scte35_pid: typing.Optional[jsii.Number] = None,
            timed_metadata_pid: typing.Optional[jsii.Number] = None,
            video_pid: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Packet identifiers map for a given Multiplex program.

            :param audio_pids: 
            :param dvb_sub_pids: 
            :param dvb_teletext_pid: 
            :param etv_platform_pid: 
            :param etv_signal_pid: 
            :param klv_data_pids: 
            :param pcr_pid: 
            :param pmt_pid: 
            :param private_metadata_pid: 
            :param scte27_pids: 
            :param scte35_pid: 
            :param timed_metadata_pid: 
            :param video_pid: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                multiplex_program_packet_identifiers_map_property = medialive.CfnMultiplexprogram.MultiplexProgramPacketIdentifiersMapProperty(
                    audio_pids=[123],
                    dvb_sub_pids=[123],
                    dvb_teletext_pid=123,
                    etv_platform_pid=123,
                    etv_signal_pid=123,
                    klv_data_pids=[123],
                    pcr_pid=123,
                    pmt_pid=123,
                    private_metadata_pid=123,
                    scte27_pids=[123],
                    scte35_pid=123,
                    timed_metadata_pid=123,
                    video_pid=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__1444ea33b07320ffcd0e7d87d5d7f9d473808b2bfd35a789a0ec3a335fd69557)
                check_type(argname="argument audio_pids", value=audio_pids, expected_type=type_hints["audio_pids"])
                check_type(argname="argument dvb_sub_pids", value=dvb_sub_pids, expected_type=type_hints["dvb_sub_pids"])
                check_type(argname="argument dvb_teletext_pid", value=dvb_teletext_pid, expected_type=type_hints["dvb_teletext_pid"])
                check_type(argname="argument etv_platform_pid", value=etv_platform_pid, expected_type=type_hints["etv_platform_pid"])
                check_type(argname="argument etv_signal_pid", value=etv_signal_pid, expected_type=type_hints["etv_signal_pid"])
                check_type(argname="argument klv_data_pids", value=klv_data_pids, expected_type=type_hints["klv_data_pids"])
                check_type(argname="argument pcr_pid", value=pcr_pid, expected_type=type_hints["pcr_pid"])
                check_type(argname="argument pmt_pid", value=pmt_pid, expected_type=type_hints["pmt_pid"])
                check_type(argname="argument private_metadata_pid", value=private_metadata_pid, expected_type=type_hints["private_metadata_pid"])
                check_type(argname="argument scte27_pids", value=scte27_pids, expected_type=type_hints["scte27_pids"])
                check_type(argname="argument scte35_pid", value=scte35_pid, expected_type=type_hints["scte35_pid"])
                check_type(argname="argument timed_metadata_pid", value=timed_metadata_pid, expected_type=type_hints["timed_metadata_pid"])
                check_type(argname="argument video_pid", value=video_pid, expected_type=type_hints["video_pid"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if audio_pids is not None:
                self._values["audio_pids"] = audio_pids
            if dvb_sub_pids is not None:
                self._values["dvb_sub_pids"] = dvb_sub_pids
            if dvb_teletext_pid is not None:
                self._values["dvb_teletext_pid"] = dvb_teletext_pid
            if etv_platform_pid is not None:
                self._values["etv_platform_pid"] = etv_platform_pid
            if etv_signal_pid is not None:
                self._values["etv_signal_pid"] = etv_signal_pid
            if klv_data_pids is not None:
                self._values["klv_data_pids"] = klv_data_pids
            if pcr_pid is not None:
                self._values["pcr_pid"] = pcr_pid
            if pmt_pid is not None:
                self._values["pmt_pid"] = pmt_pid
            if private_metadata_pid is not None:
                self._values["private_metadata_pid"] = private_metadata_pid
            if scte27_pids is not None:
                self._values["scte27_pids"] = scte27_pids
            if scte35_pid is not None:
                self._values["scte35_pid"] = scte35_pid
            if timed_metadata_pid is not None:
                self._values["timed_metadata_pid"] = timed_metadata_pid
            if video_pid is not None:
                self._values["video_pid"] = video_pid

        @builtins.property
        def audio_pids(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[jsii.Number]]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap.html#cfn-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap-audiopids
            '''
            result = self._values.get("audio_pids")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[jsii.Number]]], result)

        @builtins.property
        def dvb_sub_pids(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[jsii.Number]]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap.html#cfn-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap-dvbsubpids
            '''
            result = self._values.get("dvb_sub_pids")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[jsii.Number]]], result)

        @builtins.property
        def dvb_teletext_pid(self) -> typing.Optional[jsii.Number]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap.html#cfn-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap-dvbteletextpid
            '''
            result = self._values.get("dvb_teletext_pid")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def etv_platform_pid(self) -> typing.Optional[jsii.Number]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap.html#cfn-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap-etvplatformpid
            '''
            result = self._values.get("etv_platform_pid")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def etv_signal_pid(self) -> typing.Optional[jsii.Number]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap.html#cfn-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap-etvsignalpid
            '''
            result = self._values.get("etv_signal_pid")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def klv_data_pids(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[jsii.Number]]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap.html#cfn-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap-klvdatapids
            '''
            result = self._values.get("klv_data_pids")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[jsii.Number]]], result)

        @builtins.property
        def pcr_pid(self) -> typing.Optional[jsii.Number]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap.html#cfn-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap-pcrpid
            '''
            result = self._values.get("pcr_pid")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def pmt_pid(self) -> typing.Optional[jsii.Number]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap.html#cfn-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap-pmtpid
            '''
            result = self._values.get("pmt_pid")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def private_metadata_pid(self) -> typing.Optional[jsii.Number]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap.html#cfn-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap-privatemetadatapid
            '''
            result = self._values.get("private_metadata_pid")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def scte27_pids(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[jsii.Number]]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap.html#cfn-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap-scte27pids
            '''
            result = self._values.get("scte27_pids")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[jsii.Number]]], result)

        @builtins.property
        def scte35_pid(self) -> typing.Optional[jsii.Number]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap.html#cfn-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap-scte35pid
            '''
            result = self._values.get("scte35_pid")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def timed_metadata_pid(self) -> typing.Optional[jsii.Number]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap.html#cfn-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap-timedmetadatapid
            '''
            result = self._values.get("timed_metadata_pid")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def video_pid(self) -> typing.Optional[jsii.Number]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap.html#cfn-medialive-multiplexprogram-multiplexprogrampacketidentifiersmap-videopid
            '''
            result = self._values.get("video_pid")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MultiplexProgramPacketIdentifiersMapProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnMultiplexprogram.MultiplexProgramPipelineDetailProperty",
        jsii_struct_bases=[],
        name_mapping={
            "active_channel_pipeline": "activeChannelPipeline",
            "pipeline_id": "pipelineId",
        },
    )
    class MultiplexProgramPipelineDetailProperty:
        def __init__(
            self,
            *,
            active_channel_pipeline: typing.Optional[builtins.str] = None,
            pipeline_id: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The current source for one of the pipelines in the multiplex.

            :param active_channel_pipeline: Identifies the channel pipeline that is currently active for the pipeline (identified by PipelineId) in the multiplex.
            :param pipeline_id: Identifies a specific pipeline in the multiplex.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogrampipelinedetail.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                multiplex_program_pipeline_detail_property = medialive.CfnMultiplexprogram.MultiplexProgramPipelineDetailProperty(
                    active_channel_pipeline="activeChannelPipeline",
                    pipeline_id="pipelineId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__c7bbe5bee5f0b4794a16cc2a28b80fd57fa369f5561c74ef3143674362f7ea3b)
                check_type(argname="argument active_channel_pipeline", value=active_channel_pipeline, expected_type=type_hints["active_channel_pipeline"])
                check_type(argname="argument pipeline_id", value=pipeline_id, expected_type=type_hints["pipeline_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if active_channel_pipeline is not None:
                self._values["active_channel_pipeline"] = active_channel_pipeline
            if pipeline_id is not None:
                self._values["pipeline_id"] = pipeline_id

        @builtins.property
        def active_channel_pipeline(self) -> typing.Optional[builtins.str]:
            '''Identifies the channel pipeline that is currently active for the pipeline (identified by PipelineId) in the multiplex.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogrampipelinedetail.html#cfn-medialive-multiplexprogram-multiplexprogrampipelinedetail-activechannelpipeline
            '''
            result = self._values.get("active_channel_pipeline")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def pipeline_id(self) -> typing.Optional[builtins.str]:
            '''Identifies a specific pipeline in the multiplex.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogrampipelinedetail.html#cfn-medialive-multiplexprogram-multiplexprogrampipelinedetail-pipelineid
            '''
            result = self._values.get("pipeline_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MultiplexProgramPipelineDetailProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnMultiplexprogram.MultiplexProgramServiceDescriptorProperty",
        jsii_struct_bases=[],
        name_mapping={"provider_name": "providerName", "service_name": "serviceName"},
    )
    class MultiplexProgramServiceDescriptorProperty:
        def __init__(
            self,
            *,
            provider_name: builtins.str,
            service_name: builtins.str,
        ) -> None:
            '''Transport stream service descriptor configuration for the Multiplex program.

            :param provider_name: Name of the provider.
            :param service_name: Name of the service.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogramservicedescriptor.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                multiplex_program_service_descriptor_property = medialive.CfnMultiplexprogram.MultiplexProgramServiceDescriptorProperty(
                    provider_name="providerName",
                    service_name="serviceName"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__61d774a9fb31796afb3a7487d6dc696a9e392f1d359ea804e44b130f1c1b5ca5)
                check_type(argname="argument provider_name", value=provider_name, expected_type=type_hints["provider_name"])
                check_type(argname="argument service_name", value=service_name, expected_type=type_hints["service_name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "provider_name": provider_name,
                "service_name": service_name,
            }

        @builtins.property
        def provider_name(self) -> builtins.str:
            '''Name of the provider.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogramservicedescriptor.html#cfn-medialive-multiplexprogram-multiplexprogramservicedescriptor-providername
            '''
            result = self._values.get("provider_name")
            assert result is not None, "Required property 'provider_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def service_name(self) -> builtins.str:
            '''Name of the service.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogramservicedescriptor.html#cfn-medialive-multiplexprogram-multiplexprogramservicedescriptor-servicename
            '''
            result = self._values.get("service_name")
            assert result is not None, "Required property 'service_name' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MultiplexProgramServiceDescriptorProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnMultiplexprogram.MultiplexProgramSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "program_number": "programNumber",
            "preferred_channel_pipeline": "preferredChannelPipeline",
            "service_descriptor": "serviceDescriptor",
            "video_settings": "videoSettings",
        },
    )
    class MultiplexProgramSettingsProperty:
        def __init__(
            self,
            *,
            program_number: jsii.Number,
            preferred_channel_pipeline: typing.Optional[builtins.str] = None,
            service_descriptor: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMultiplexprogram.MultiplexProgramServiceDescriptorProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            video_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMultiplexprogram.MultiplexVideoSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Multiplex Program settings configuration.

            :param program_number: Unique program number.
            :param preferred_channel_pipeline: Indicates which pipeline is preferred by the multiplex for program ingest.
            :param service_descriptor: Transport stream service descriptor configuration for the Multiplex program.
            :param video_settings: Program video settings configuration.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogramsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                multiplex_program_settings_property = medialive.CfnMultiplexprogram.MultiplexProgramSettingsProperty(
                    program_number=123,
                
                    # the properties below are optional
                    preferred_channel_pipeline="preferredChannelPipeline",
                    service_descriptor=medialive.CfnMultiplexprogram.MultiplexProgramServiceDescriptorProperty(
                        provider_name="providerName",
                        service_name="serviceName"
                    ),
                    video_settings=medialive.CfnMultiplexprogram.MultiplexVideoSettingsProperty(
                        constant_bitrate=123,
                        statmux_settings=medialive.CfnMultiplexprogram.MultiplexStatmuxVideoSettingsProperty(
                            maximum_bitrate=123,
                            minimum_bitrate=123,
                            priority=123
                        )
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__c0f38c187a05a8061c038601dbd6ced30e5d402a94344ef4d3c6e8755b7abc22)
                check_type(argname="argument program_number", value=program_number, expected_type=type_hints["program_number"])
                check_type(argname="argument preferred_channel_pipeline", value=preferred_channel_pipeline, expected_type=type_hints["preferred_channel_pipeline"])
                check_type(argname="argument service_descriptor", value=service_descriptor, expected_type=type_hints["service_descriptor"])
                check_type(argname="argument video_settings", value=video_settings, expected_type=type_hints["video_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "program_number": program_number,
            }
            if preferred_channel_pipeline is not None:
                self._values["preferred_channel_pipeline"] = preferred_channel_pipeline
            if service_descriptor is not None:
                self._values["service_descriptor"] = service_descriptor
            if video_settings is not None:
                self._values["video_settings"] = video_settings

        @builtins.property
        def program_number(self) -> jsii.Number:
            '''Unique program number.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogramsettings.html#cfn-medialive-multiplexprogram-multiplexprogramsettings-programnumber
            '''
            result = self._values.get("program_number")
            assert result is not None, "Required property 'program_number' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def preferred_channel_pipeline(self) -> typing.Optional[builtins.str]:
            '''Indicates which pipeline is preferred by the multiplex for program ingest.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogramsettings.html#cfn-medialive-multiplexprogram-multiplexprogramsettings-preferredchannelpipeline
            '''
            result = self._values.get("preferred_channel_pipeline")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def service_descriptor(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMultiplexprogram.MultiplexProgramServiceDescriptorProperty"]]:
            '''Transport stream service descriptor configuration for the Multiplex program.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogramsettings.html#cfn-medialive-multiplexprogram-multiplexprogramsettings-servicedescriptor
            '''
            result = self._values.get("service_descriptor")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMultiplexprogram.MultiplexProgramServiceDescriptorProperty"]], result)

        @builtins.property
        def video_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMultiplexprogram.MultiplexVideoSettingsProperty"]]:
            '''Program video settings configuration.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexprogramsettings.html#cfn-medialive-multiplexprogram-multiplexprogramsettings-videosettings
            '''
            result = self._values.get("video_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMultiplexprogram.MultiplexVideoSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MultiplexProgramSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnMultiplexprogram.MultiplexStatmuxVideoSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "maximum_bitrate": "maximumBitrate",
            "minimum_bitrate": "minimumBitrate",
            "priority": "priority",
        },
    )
    class MultiplexStatmuxVideoSettingsProperty:
        def __init__(
            self,
            *,
            maximum_bitrate: typing.Optional[jsii.Number] = None,
            minimum_bitrate: typing.Optional[jsii.Number] = None,
            priority: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Statmux rate control settings.

            :param maximum_bitrate: Maximum statmux bitrate.
            :param minimum_bitrate: Minimum statmux bitrate.
            :param priority: The purpose of the priority is to use a combination of the\\nmultiplex rate control algorithm and the QVBR capability of the\\nencoder to prioritize the video quality of some channels in a\\nmultiplex over others. Channels that have a higher priority will\\nget higher video quality at the expense of the video quality of\\nother channels in the multiplex with lower priority.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexstatmuxvideosettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                multiplex_statmux_video_settings_property = medialive.CfnMultiplexprogram.MultiplexStatmuxVideoSettingsProperty(
                    maximum_bitrate=123,
                    minimum_bitrate=123,
                    priority=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__3fe14c38fdea54271799de09042e7f8f265196f4c25f1f2249ebeaee55bbe84d)
                check_type(argname="argument maximum_bitrate", value=maximum_bitrate, expected_type=type_hints["maximum_bitrate"])
                check_type(argname="argument minimum_bitrate", value=minimum_bitrate, expected_type=type_hints["minimum_bitrate"])
                check_type(argname="argument priority", value=priority, expected_type=type_hints["priority"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if maximum_bitrate is not None:
                self._values["maximum_bitrate"] = maximum_bitrate
            if minimum_bitrate is not None:
                self._values["minimum_bitrate"] = minimum_bitrate
            if priority is not None:
                self._values["priority"] = priority

        @builtins.property
        def maximum_bitrate(self) -> typing.Optional[jsii.Number]:
            '''Maximum statmux bitrate.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexstatmuxvideosettings.html#cfn-medialive-multiplexprogram-multiplexstatmuxvideosettings-maximumbitrate
            '''
            result = self._values.get("maximum_bitrate")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def minimum_bitrate(self) -> typing.Optional[jsii.Number]:
            '''Minimum statmux bitrate.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexstatmuxvideosettings.html#cfn-medialive-multiplexprogram-multiplexstatmuxvideosettings-minimumbitrate
            '''
            result = self._values.get("minimum_bitrate")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def priority(self) -> typing.Optional[jsii.Number]:
            '''The purpose of the priority is to use a combination of the\\nmultiplex rate control algorithm and the QVBR capability of the\\nencoder to prioritize the video quality of some channels in a\\nmultiplex over others.

            Channels that have a higher priority will\\nget higher video quality at the expense of the video quality of\\nother channels in the multiplex with lower priority.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexstatmuxvideosettings.html#cfn-medialive-multiplexprogram-multiplexstatmuxvideosettings-priority
            '''
            result = self._values.get("priority")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MultiplexStatmuxVideoSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_medialive.CfnMultiplexprogram.MultiplexVideoSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "constant_bitrate": "constantBitrate",
            "statmux_settings": "statmuxSettings",
        },
    )
    class MultiplexVideoSettingsProperty:
        def __init__(
            self,
            *,
            constant_bitrate: typing.Optional[jsii.Number] = None,
            statmux_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMultiplexprogram.MultiplexStatmuxVideoSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The video configuration for each program in a multiplex.

            :param constant_bitrate: The constant bitrate configuration for the video encode. When this field is defined, StatmuxSettings must be undefined.
            :param statmux_settings: Statmux rate control settings. When this field is defined, ConstantBitrate must be undefined.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexvideosettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_medialive as medialive
                
                multiplex_video_settings_property = medialive.CfnMultiplexprogram.MultiplexVideoSettingsProperty(
                    constant_bitrate=123,
                    statmux_settings=medialive.CfnMultiplexprogram.MultiplexStatmuxVideoSettingsProperty(
                        maximum_bitrate=123,
                        minimum_bitrate=123,
                        priority=123
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__97bea0267704f0addfd06d5672cbe39ebea79dbcc03e14eb7dd6ebdabc6345f7)
                check_type(argname="argument constant_bitrate", value=constant_bitrate, expected_type=type_hints["constant_bitrate"])
                check_type(argname="argument statmux_settings", value=statmux_settings, expected_type=type_hints["statmux_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if constant_bitrate is not None:
                self._values["constant_bitrate"] = constant_bitrate
            if statmux_settings is not None:
                self._values["statmux_settings"] = statmux_settings

        @builtins.property
        def constant_bitrate(self) -> typing.Optional[jsii.Number]:
            '''The constant bitrate configuration for the video encode.

            When this field is defined, StatmuxSettings must be undefined.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexvideosettings.html#cfn-medialive-multiplexprogram-multiplexvideosettings-constantbitrate
            '''
            result = self._values.get("constant_bitrate")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def statmux_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMultiplexprogram.MultiplexStatmuxVideoSettingsProperty"]]:
            '''Statmux rate control settings.

            When this field is defined, ConstantBitrate must be undefined.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-medialive-multiplexprogram-multiplexvideosettings.html#cfn-medialive-multiplexprogram-multiplexvideosettings-statmuxsettings
            '''
            result = self._values.get("statmux_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMultiplexprogram.MultiplexStatmuxVideoSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MultiplexVideoSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_medialive.CfnMultiplexprogramProps",
    jsii_struct_bases=[],
    name_mapping={
        "channel_id": "channelId",
        "multiplex_id": "multiplexId",
        "multiplex_program_settings": "multiplexProgramSettings",
        "packet_identifiers_map": "packetIdentifiersMap",
        "pipeline_details": "pipelineDetails",
        "preferred_channel_pipeline": "preferredChannelPipeline",
        "program_name": "programName",
    },
)
class CfnMultiplexprogramProps:
    def __init__(
        self,
        *,
        channel_id: typing.Optional[builtins.str] = None,
        multiplex_id: typing.Optional[builtins.str] = None,
        multiplex_program_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMultiplexprogram.MultiplexProgramSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        packet_identifiers_map: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMultiplexprogram.MultiplexProgramPacketIdentifiersMapProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        pipeline_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMultiplexprogram.MultiplexProgramPipelineDetailProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
        preferred_channel_pipeline: typing.Optional[builtins.str] = None,
        program_name: typing.Optional[builtins.str] = None,
    ) -> None:
        '''Properties for defining a ``CfnMultiplexprogram``.

        :param channel_id: The unique ID of the channel.
        :param multiplex_id: The unique id of the multiplex.
        :param multiplex_program_settings: Multiplex Program settings configuration.
        :param packet_identifiers_map: Packet identifiers map for a given Multiplex program.
        :param pipeline_details: Contains information about the current sources for the specified program in the specified multiplex. Keep in mind that each multiplex pipeline connects to both pipelines in a given source channel (the channel identified by the program). But only one of those channel pipelines is ever active at one time.
        :param preferred_channel_pipeline: Indicates which pipeline is preferred by the multiplex for program ingest. If set to "PIPELINE_0" or "PIPELINE_1" and an unhealthy ingest causes the multiplex to switch to the non-preferred pipeline, it will switch back once that ingest is healthy again. If set to "CURRENTLY_ACTIVE", it will not switch back to the other pipeline based on it recovering to a healthy state, it will only switch if the active pipeline becomes unhealthy.
        :param program_name: The name of the multiplex program.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-multiplexprogram.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_medialive as medialive
            
            cfn_multiplexprogram_props = medialive.CfnMultiplexprogramProps(
                channel_id="channelId",
                multiplex_id="multiplexId",
                multiplex_program_settings=medialive.CfnMultiplexprogram.MultiplexProgramSettingsProperty(
                    program_number=123,
            
                    # the properties below are optional
                    preferred_channel_pipeline="preferredChannelPipeline",
                    service_descriptor=medialive.CfnMultiplexprogram.MultiplexProgramServiceDescriptorProperty(
                        provider_name="providerName",
                        service_name="serviceName"
                    ),
                    video_settings=medialive.CfnMultiplexprogram.MultiplexVideoSettingsProperty(
                        constant_bitrate=123,
                        statmux_settings=medialive.CfnMultiplexprogram.MultiplexStatmuxVideoSettingsProperty(
                            maximum_bitrate=123,
                            minimum_bitrate=123,
                            priority=123
                        )
                    )
                ),
                packet_identifiers_map=medialive.CfnMultiplexprogram.MultiplexProgramPacketIdentifiersMapProperty(
                    audio_pids=[123],
                    dvb_sub_pids=[123],
                    dvb_teletext_pid=123,
                    etv_platform_pid=123,
                    etv_signal_pid=123,
                    klv_data_pids=[123],
                    pcr_pid=123,
                    pmt_pid=123,
                    private_metadata_pid=123,
                    scte27_pids=[123],
                    scte35_pid=123,
                    timed_metadata_pid=123,
                    video_pid=123
                ),
                pipeline_details=[medialive.CfnMultiplexprogram.MultiplexProgramPipelineDetailProperty(
                    active_channel_pipeline="activeChannelPipeline",
                    pipeline_id="pipelineId"
                )],
                preferred_channel_pipeline="preferredChannelPipeline",
                program_name="programName"
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__f73df2de9c8f0593b389bf604ffaf3d1b093165585c8988cb33c99e1826cb730)
            check_type(argname="argument channel_id", value=channel_id, expected_type=type_hints["channel_id"])
            check_type(argname="argument multiplex_id", value=multiplex_id, expected_type=type_hints["multiplex_id"])
            check_type(argname="argument multiplex_program_settings", value=multiplex_program_settings, expected_type=type_hints["multiplex_program_settings"])
            check_type(argname="argument packet_identifiers_map", value=packet_identifiers_map, expected_type=type_hints["packet_identifiers_map"])
            check_type(argname="argument pipeline_details", value=pipeline_details, expected_type=type_hints["pipeline_details"])
            check_type(argname="argument preferred_channel_pipeline", value=preferred_channel_pipeline, expected_type=type_hints["preferred_channel_pipeline"])
            check_type(argname="argument program_name", value=program_name, expected_type=type_hints["program_name"])
        self._values: typing.Dict[builtins.str, typing.Any] = {}
        if channel_id is not None:
            self._values["channel_id"] = channel_id
        if multiplex_id is not None:
            self._values["multiplex_id"] = multiplex_id
        if multiplex_program_settings is not None:
            self._values["multiplex_program_settings"] = multiplex_program_settings
        if packet_identifiers_map is not None:
            self._values["packet_identifiers_map"] = packet_identifiers_map
        if pipeline_details is not None:
            self._values["pipeline_details"] = pipeline_details
        if preferred_channel_pipeline is not None:
            self._values["preferred_channel_pipeline"] = preferred_channel_pipeline
        if program_name is not None:
            self._values["program_name"] = program_name

    @builtins.property
    def channel_id(self) -> typing.Optional[builtins.str]:
        '''The unique ID of the channel.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-multiplexprogram.html#cfn-medialive-multiplexprogram-channelid
        '''
        result = self._values.get("channel_id")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def multiplex_id(self) -> typing.Optional[builtins.str]:
        '''The unique id of the multiplex.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-multiplexprogram.html#cfn-medialive-multiplexprogram-multiplexid
        '''
        result = self._values.get("multiplex_id")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def multiplex_program_settings(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnMultiplexprogram.MultiplexProgramSettingsProperty]]:
        '''Multiplex Program settings configuration.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-multiplexprogram.html#cfn-medialive-multiplexprogram-multiplexprogramsettings
        '''
        result = self._values.get("multiplex_program_settings")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnMultiplexprogram.MultiplexProgramSettingsProperty]], result)

    @builtins.property
    def packet_identifiers_map(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnMultiplexprogram.MultiplexProgramPacketIdentifiersMapProperty]]:
        '''Packet identifiers map for a given Multiplex program.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-multiplexprogram.html#cfn-medialive-multiplexprogram-packetidentifiersmap
        '''
        result = self._values.get("packet_identifiers_map")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnMultiplexprogram.MultiplexProgramPacketIdentifiersMapProperty]], result)

    @builtins.property
    def pipeline_details(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnMultiplexprogram.MultiplexProgramPipelineDetailProperty]]]]:
        '''Contains information about the current sources for the specified program in the specified multiplex.

        Keep in mind that each multiplex pipeline connects to both pipelines in a given source channel (the channel identified by the program). But only one of those channel pipelines is ever active at one time.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-multiplexprogram.html#cfn-medialive-multiplexprogram-pipelinedetails
        '''
        result = self._values.get("pipeline_details")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnMultiplexprogram.MultiplexProgramPipelineDetailProperty]]]], result)

    @builtins.property
    def preferred_channel_pipeline(self) -> typing.Optional[builtins.str]:
        '''Indicates which pipeline is preferred by the multiplex for program ingest.

        If set to "PIPELINE_0" or "PIPELINE_1" and an unhealthy ingest causes the multiplex to switch to the non-preferred pipeline,
        it will switch back once that ingest is healthy again. If set to "CURRENTLY_ACTIVE",
        it will not switch back to the other pipeline based on it recovering to a healthy state,
        it will only switch if the active pipeline becomes unhealthy.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-multiplexprogram.html#cfn-medialive-multiplexprogram-preferredchannelpipeline
        '''
        result = self._values.get("preferred_channel_pipeline")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def program_name(self) -> typing.Optional[builtins.str]:
        '''The name of the multiplex program.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-medialive-multiplexprogram.html#cfn-medialive-multiplexprogram-programname
        '''
        result = self._values.get("program_name")
        return typing.cast(typing.Optional[builtins.str], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnMultiplexprogramProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


__all__ = [
    "CfnChannel",
    "CfnChannelProps",
    "CfnInput",
    "CfnInputProps",
    "CfnInputSecurityGroup",
    "CfnInputSecurityGroupProps",
    "CfnMultiplex",
    "CfnMultiplexProps",
    "CfnMultiplexprogram",
    "CfnMultiplexprogramProps",
]

publication.publish()

def _typecheckingstub__0060427de31049849d0b954eb2d8f1219de8b4f8164b94cdfa32d6ef2df38d6f(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    cdi_input_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.CdiInputSpecificationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    channel_class: typing.Optional[builtins.str] = None,
    destinations: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.OutputDestinationProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    encoder_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.EncoderSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    input_attachments: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.InputAttachmentProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    input_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.InputSpecificationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    log_level: typing.Optional[builtins.str] = None,
    maintenance: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.MaintenanceCreateSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    name: typing.Optional[builtins.str] = None,
    role_arn: typing.Optional[builtins.str] = None,
    tags: typing.Any = None,
    vpc: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.VpcOutputSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__77a53567e403f0822cadccac18299e5972848433b11cc62dd610a87f360b29e7(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e2253fe8a2d59d3935026cb52637b011dbe3c7c13c56356047e371000df86f09(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f92b60869c3a38d6c288b1f41617590836131c33145b5a07d2348dbb82d37420(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnChannel.CdiInputSpecificationProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__82667be050483040af27d9bf862af731a2dc4717b3497dbcd0c4f237126bac8e(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c2a2554798d3e2b5537f9e6866bbc72a0a8473bbaa576a77c590c04c2e70f553(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnChannel.OutputDestinationProperty]]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7fdb195a3769eba13c8fa8392bdc7fdb13d178f09f1a3128b22012ff69de3ea8(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnChannel.EncoderSettingsProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__21a00bae3ae031cde82b03663d2a24b4294b4b914a32c0c2f6738dd48830dc30(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnChannel.InputAttachmentProperty]]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0b5259f36c03529b4fadc479e28da22c834a5bc4672f8081bd809f8353b46ad4(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnChannel.InputSpecificationProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0fb18d7d630d6ab2d0915e23515972c22653969c3e2ab74e3d5284992dd07c06(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3468489db4ad9a5131075408b322162aebaf0aa3a8c49b86e5f9c4a94c1ed381(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnChannel.MaintenanceCreateSettingsProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__70ea23804c9eff1d939ba4e0c6cc8df0464ad8f53606a203ad6e5d2c88f275c1(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__54b9cee27918938a1be87816364ecf209866f36edaf4395b5de8016df80718f9(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__53063edb939a91b86de1b82e9af65d09af8e01650061a1b1693b7912e6164f14(
    value: typing.Any,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__eb8444e8ee5815fae672b115515a96cba9b3cf9b7e399608e9a0d229e8c8ad41(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnChannel.VpcOutputSettingsProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8e31898723313c2a2b115709d5edef386849980fe358a3b468e4f4e0650aca7e(
    *,
    bitrate: typing.Optional[jsii.Number] = None,
    coding_mode: typing.Optional[builtins.str] = None,
    input_type: typing.Optional[builtins.str] = None,
    profile: typing.Optional[builtins.str] = None,
    rate_control_mode: typing.Optional[builtins.str] = None,
    raw_format: typing.Optional[builtins.str] = None,
    sample_rate: typing.Optional[jsii.Number] = None,
    spec: typing.Optional[builtins.str] = None,
    vbr_quality: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3438fa867f11ff502b4fa54f1dd5270220ccbbc83de4185add8ae06b3e863348(
    *,
    attenuation_control: typing.Optional[builtins.str] = None,
    bitrate: typing.Optional[jsii.Number] = None,
    bitstream_mode: typing.Optional[builtins.str] = None,
    coding_mode: typing.Optional[builtins.str] = None,
    dialnorm: typing.Optional[jsii.Number] = None,
    drc_profile: typing.Optional[builtins.str] = None,
    lfe_filter: typing.Optional[builtins.str] = None,
    metadata_control: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8192630f40f6883538117cc4351df30d49295a7620ea561657270b4feacaf984(
    *,
    source_ancillary_channel_number: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__444596e4c19acefc51bb76250ff228ae64e367eff9a08d2adec73cf04a714acb(
    *,
    archive_s3_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.ArchiveS3SettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__bd0f18f9ca33488c4dcb09ae97e5ef98b5e7de7c3f57f2b853567c7f72d05f8d(
    *,
    m2_ts_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.M2tsSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    raw_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.RawSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__de5308594b87080b5a575eb34202d543eb467e24c13fb098e67bb77d967d7e84(
    *,
    archive_cdn_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.ArchiveCdnSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    destination: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.OutputLocationRefProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    rollover_interval: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4144df375bfb1ccec206195b771b803ce7569b586415cd7514815fc36a0a80cf(
    *,
    container_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.ArchiveContainerSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    extension: typing.Optional[builtins.str] = None,
    name_modifier: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__dc499a6fb83dfccec9312e061f4c6fb0333201c210c2971a3b8d9d50dbfb5c9d(
    *,
    canned_acl: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5622ba1006ba21c7ad05a917ad3e5d9dae24c8ce2b760da2f8a373854fdb43f0(
    *,
    input_channel_levels: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.InputChannelLevelProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    output_channel: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__818b64750c74718f495f603e3d4f93a619c505c97fc690e547616ab20e455a2b(
    *,
    aac_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AacSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    ac3_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.Ac3SettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    eac3_atmos_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.Eac3AtmosSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    eac3_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.Eac3SettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    mp2_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.Mp2SettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    pass_through_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.PassThroughSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    wav_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.WavSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__eac525e44cda4c1cda893c85a29097b10e89383e25cd7a85e3170de4eea2071e(
    *,
    audio_normalization_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AudioNormalizationSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    audio_selector_name: typing.Optional[builtins.str] = None,
    audio_type: typing.Optional[builtins.str] = None,
    audio_type_control: typing.Optional[builtins.str] = None,
    audio_watermarking_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AudioWatermarkSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    codec_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AudioCodecSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    language_code: typing.Optional[builtins.str] = None,
    language_code_control: typing.Optional[builtins.str] = None,
    name: typing.Optional[builtins.str] = None,
    remix_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.RemixSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    stream_name: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__fc0d2585efcd86a49f8ec949eba6e7d948c486ed3e468a980987251fc08637cf(
    *,
    program_selection: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4a6ab29a08aea906ab2edfe9cb3b006a503c86868e1e216f809c2dff0e58f195(
    *,
    group_id: typing.Optional[builtins.str] = None,
    name: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ad1591fffbd5bac667f3b1b92698b20c83dac4f814e4c64bf0f8bb9755baa1c1(
    *,
    language_code: typing.Optional[builtins.str] = None,
    language_selection_policy: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__48c0d0ae257261670d1c62e1a75660424f8feeb6c3901fb0cf6bbdf5a182164a(
    *,
    algorithm: typing.Optional[builtins.str] = None,
    algorithm_control: typing.Optional[builtins.str] = None,
    target_lkfs: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__730c480186bce3ae3ce0ff4c36da958ea8baa502e87ff721ca3963c20975dc28(
    *,
    audio_group_id: typing.Optional[builtins.str] = None,
    audio_only_image: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.InputLocationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    audio_track_type: typing.Optional[builtins.str] = None,
    segment_type: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__edbfe7bd24e96996e28867af4eb731d2289ac6b4c69a82aac37cecc71c7cb444(
    *,
    pid: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5e8d763736fbfed56874abc0aa137f7c61b71c12cea4f7472716b52dc424a289(
    *,
    name: typing.Optional[builtins.str] = None,
    selector_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AudioSelectorSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0edb712ca08b1eb077c33d5b0bf623f77a177559021fa3af4261fa2914ceacea(
    *,
    audio_hls_rendition_selection: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AudioHlsRenditionSelectionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    audio_language_selection: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AudioLanguageSelectionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    audio_pid_selection: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AudioPidSelectionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    audio_track_selection: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AudioTrackSelectionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3bfd7acac26919f80314d3c30b6526a1df17df88432037f26383217f645d7f5a(
    *,
    audio_selector_name: typing.Optional[builtins.str] = None,
    audio_silence_threshold_msec: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7bf3b0127d348b2a7ec18b1b7cd1aa5f3d6a074834971fee9a17fcfa5414e914(
    *,
    track: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2f02b9c9130bd73b0e869c99512eb05f558d8b6934211fb7b89da4d0276a6585(
    *,
    dolby_e_decode: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AudioDolbyEDecodeProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tracks: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AudioTrackProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__93f830a49d8ccde8eb54b5221d173ee16e92321934242f6a4a3f73696ee565f0(
    *,
    nielsen_watermarks_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.NielsenWatermarksSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ffaa6f8bf026be072424a94927c7176d87bffd9bfacfba370a49c9283019ffb1(
    *,
    error_clear_time_msec: typing.Optional[jsii.Number] = None,
    failover_conditions: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.FailoverConditionProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    input_preference: typing.Optional[builtins.str] = None,
    secondary_input_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__eca0526dd47d2b5efa5857a5e7d3c0d846ea42078c494f626e4d9e9f6011792b(
    *,
    avail_blanking_image: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.InputLocationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    state: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__64a141b4b3b5b23b51297f468895864a0795ec8b925d0233a715f29550246998(
    *,
    avail_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AvailSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__bedfc191e762a8db06c6ce92f0d04f852d1143ef089ff6e80e79930d7aaed1c9(
    *,
    esam: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.EsamProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    scte35_splice_insert: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.Scte35SpliceInsertProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    scte35_time_signal_apos: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.Scte35TimeSignalAposProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1c1452f91595e5e3b7268fdebee233e49d1afa2b24b9cbfb369014e647424b7b(
    *,
    blackout_slate_image: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.InputLocationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    network_end_blackout: typing.Optional[builtins.str] = None,
    network_end_blackout_image: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.InputLocationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    network_id: typing.Optional[builtins.str] = None,
    state: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__33dec7d6f1bff74983258afde73011d8330c6183129c52e7873c9573a1ae48b1(
    *,
    alignment: typing.Optional[builtins.str] = None,
    background_color: typing.Optional[builtins.str] = None,
    background_opacity: typing.Optional[jsii.Number] = None,
    font: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.InputLocationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    font_color: typing.Optional[builtins.str] = None,
    font_opacity: typing.Optional[jsii.Number] = None,
    font_resolution: typing.Optional[jsii.Number] = None,
    font_size: typing.Optional[builtins.str] = None,
    outline_color: typing.Optional[builtins.str] = None,
    outline_size: typing.Optional[jsii.Number] = None,
    shadow_color: typing.Optional[builtins.str] = None,
    shadow_opacity: typing.Optional[jsii.Number] = None,
    shadow_x_offset: typing.Optional[jsii.Number] = None,
    shadow_y_offset: typing.Optional[jsii.Number] = None,
    teletext_grid_control: typing.Optional[builtins.str] = None,
    x_position: typing.Optional[jsii.Number] = None,
    y_position: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4b5f4fcefb4c087827d3430996ba616b450c5ed8903530f29c2ee1ad68ef2a45(
    *,
    accessibility: typing.Optional[builtins.str] = None,
    caption_selector_name: typing.Optional[builtins.str] = None,
    destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.CaptionDestinationSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    language_code: typing.Optional[builtins.str] = None,
    language_description: typing.Optional[builtins.str] = None,
    name: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__61c85dee95017adc3ae53eb9a94efd42ced55a2350caff6ab98186ded8da0567(
    *,
    arib_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AribDestinationSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    burn_in_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.BurnInDestinationSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    dvb_sub_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.DvbSubDestinationSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    ebu_tt_d_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.EbuTtDDestinationSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    embedded_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.EmbeddedDestinationSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    embedded_plus_scte20_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.EmbeddedPlusScte20DestinationSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    rtmp_caption_info_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.RtmpCaptionInfoDestinationSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    scte20_plus_embedded_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.Scte20PlusEmbeddedDestinationSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    scte27_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.Scte27DestinationSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    smpte_tt_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.SmpteTtDestinationSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    teletext_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.TeletextDestinationSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    ttml_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.TtmlDestinationSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    webvtt_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.WebvttDestinationSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3500d3b864981778889f7158994b2f8a259982afad60d9e6d858869f9ad7ba99(
    *,
    caption_channel: typing.Optional[jsii.Number] = None,
    language_code: typing.Optional[builtins.str] = None,
    language_description: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f239c30c359371402894afa39556be4b336509d1ad885a24284a3fc096875f4e(
    *,
    height: typing.Optional[jsii.Number] = None,
    left_offset: typing.Optional[jsii.Number] = None,
    top_offset: typing.Optional[jsii.Number] = None,
    width: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b61575e6e3262cc0b5ddd8984204f4c5a132f940dba20386efe96fb9af97e48f(
    *,
    language_code: typing.Optional[builtins.str] = None,
    name: typing.Optional[builtins.str] = None,
    selector_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.CaptionSelectorSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9f5921966f5531402267983faa699d1d40cac1bdb60fc5826ff72330e98fce07(
    *,
    ancillary_source_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AncillarySourceSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    arib_source_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AribSourceSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    dvb_sub_source_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.DvbSubSourceSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    embedded_source_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.EmbeddedSourceSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    scte20_source_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.Scte20SourceSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    scte27_source_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.Scte27SourceSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    teletext_source_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.TeletextSourceSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c2e5862f596156cbad2564b77122c4d4b9ce5bae1083042678e57d7cac0040ae(
    *,
    resolution: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8b62ed6aaafdef63c746b1b2a7a4cb11082ac71229b8cce59b11a12f61d825e5(
    *,
    input_color_space: typing.Optional[builtins.str] = None,
    output_color_space: typing.Optional[builtins.str] = None,
    uri: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5b163cf0a2805bc3b9ba83732ec2d31be65417627bae2ea0d1358c23777292cf(
    *,
    global_color_corrections: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.ColorCorrectionProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8c7a3f1613fe89d29357c4daa238390bc68ba6f9f58fb2c7c5bb23bc31c3de9e(
    *,
    network_id: typing.Optional[jsii.Number] = None,
    network_name: typing.Optional[builtins.str] = None,
    rep_interval: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__586c259322f0a4574022d587e4c353cd828f31a353b9f12c0d3f19321d337282(
    *,
    output_sdt: typing.Optional[builtins.str] = None,
    rep_interval: typing.Optional[jsii.Number] = None,
    service_name: typing.Optional[builtins.str] = None,
    service_provider_name: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8d5d2ee13f6699d87c134941e50183ecf466b424e0dbd1cc71d92035d18ddb0a(
    *,
    alignment: typing.Optional[builtins.str] = None,
    background_color: typing.Optional[builtins.str] = None,
    background_opacity: typing.Optional[jsii.Number] = None,
    font: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.InputLocationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    font_color: typing.Optional[builtins.str] = None,
    font_opacity: typing.Optional[jsii.Number] = None,
    font_resolution: typing.Optional[jsii.Number] = None,
    font_size: typing.Optional[builtins.str] = None,
    outline_color: typing.Optional[builtins.str] = None,
    outline_size: typing.Optional[jsii.Number] = None,
    shadow_color: typing.Optional[builtins.str] = None,
    shadow_opacity: typing.Optional[jsii.Number] = None,
    shadow_x_offset: typing.Optional[jsii.Number] = None,
    shadow_y_offset: typing.Optional[jsii.Number] = None,
    teletext_grid_control: typing.Optional[builtins.str] = None,
    x_position: typing.Optional[jsii.Number] = None,
    y_position: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5df610eef3af6974cf8b17fa0075b3634ab5c04fb0d9b5b7b624223844f9273f(
    *,
    ocr_language: typing.Optional[builtins.str] = None,
    pid: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c3f0bf712ba88ce8f102f0f9602385f6b73428708b606c2d1c2b40b9cadc9279(
    *,
    rep_interval: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8ba9f0987329aa19db775891708ed058305bd3c7f27ba631973ab915799bba9f(
    *,
    bitrate: typing.Optional[jsii.Number] = None,
    coding_mode: typing.Optional[builtins.str] = None,
    dialnorm: typing.Optional[jsii.Number] = None,
    drc_line: typing.Optional[builtins.str] = None,
    drc_rf: typing.Optional[builtins.str] = None,
    height_trim: typing.Optional[jsii.Number] = None,
    surround_trim: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__30da58edd55c00e12f81eb8c75da493d94499c43fc797241342b62224ac1da61(
    *,
    attenuation_control: typing.Optional[builtins.str] = None,
    bitrate: typing.Optional[jsii.Number] = None,
    bitstream_mode: typing.Optional[builtins.str] = None,
    coding_mode: typing.Optional[builtins.str] = None,
    dc_filter: typing.Optional[builtins.str] = None,
    dialnorm: typing.Optional[jsii.Number] = None,
    drc_line: typing.Optional[builtins.str] = None,
    drc_rf: typing.Optional[builtins.str] = None,
    lfe_control: typing.Optional[builtins.str] = None,
    lfe_filter: typing.Optional[builtins.str] = None,
    lo_ro_center_mix_level: typing.Optional[jsii.Number] = None,
    lo_ro_surround_mix_level: typing.Optional[jsii.Number] = None,
    lt_rt_center_mix_level: typing.Optional[jsii.Number] = None,
    lt_rt_surround_mix_level: typing.Optional[jsii.Number] = None,
    metadata_control: typing.Optional[builtins.str] = None,
    passthrough_control: typing.Optional[builtins.str] = None,
    phase_control: typing.Optional[builtins.str] = None,
    stereo_downmix: typing.Optional[builtins.str] = None,
    surround_ex_mode: typing.Optional[builtins.str] = None,
    surround_mode: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__23559d0249cfbe262bfbd93ab48605fd9c25886b289f89b7e6b86a893ae4c78b(
    *,
    copyright_holder: typing.Optional[builtins.str] = None,
    fill_line_gap: typing.Optional[builtins.str] = None,
    font_family: typing.Optional[builtins.str] = None,
    style_control: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a5c32ccb3bb8518fb0dc08096320003c5a911953ab7ee23e451f5c5bdec2ddaa(
    *,
    convert608_to708: typing.Optional[builtins.str] = None,
    scte20_detection: typing.Optional[builtins.str] = None,
    source608_channel_number: typing.Optional[jsii.Number] = None,
    source608_track_number: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1550473612e113e3bb9a6bc779aa44db3880446b6c6df662b82051f73e740b89(
    *,
    audio_descriptions: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AudioDescriptionProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    avail_blanking: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AvailBlankingProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    avail_configuration: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AvailConfigurationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    blackout_slate: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.BlackoutSlateProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    caption_descriptions: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.CaptionDescriptionProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    color_correction_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.ColorCorrectionSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    feature_activations: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.FeatureActivationsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    global_configuration: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.GlobalConfigurationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    motion_graphics_configuration: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.MotionGraphicsConfigurationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    nielsen_configuration: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.NielsenConfigurationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    output_groups: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.OutputGroupProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    thumbnail_configuration: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.ThumbnailConfigurationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    timecode_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.TimecodeConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    video_descriptions: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.VideoDescriptionProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__fb6d37850c7ce928ab79e708afb2c3e1d2b3c39ba631a755e1e8cc45f51423c0(
    *,
    custom_epoch: typing.Optional[builtins.str] = None,
    jam_sync_time: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4077ad1492a38ea5a8fa0a0c0d5ce9bd642323f24d366b8d6bb581fd5a6f7a00(
    *,
    acquisition_point_id: typing.Optional[builtins.str] = None,
    ad_avail_offset: typing.Optional[jsii.Number] = None,
    password_param: typing.Optional[builtins.str] = None,
    pois_endpoint: typing.Optional[builtins.str] = None,
    username: typing.Optional[builtins.str] = None,
    zone_identity: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b86ab0f1872a24213fd950f22416c7914d75d909d5ac3cdd0fbf2a47ff4c5da5(
    *,
    failover_condition_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.FailoverConditionSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__481ff97a24b04c9b69ab7346a30a4565f6f6010ddc1eed7f00215b2ed1974efb(
    *,
    audio_silence_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AudioSilenceFailoverSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    input_loss_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.InputLossFailoverSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    video_black_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.VideoBlackFailoverSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a6b1cf0a0942395d620c3188a0c9d1eff2b7dd224fa2c918240797d5f448b0ee(
    *,
    input_prepare_schedule_actions: typing.Optional[builtins.str] = None,
    output_static_image_overlay_schedule_actions: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__fb8c892060c0565904005165c09191e9e3f9077cd1fb12bac08e574d8227f37c(
    *,
    column_depth: typing.Optional[jsii.Number] = None,
    include_fec: typing.Optional[builtins.str] = None,
    row_length: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__083543bbfcc983933dcd032f2995caa7a42e85e15332719207408bfbbbe5f43e(
    *,
    audio_rendition_sets: typing.Optional[builtins.str] = None,
    nielsen_id3_behavior: typing.Optional[builtins.str] = None,
    timed_metadata_behavior: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__02bd05ffdb6de2491773d7ccb53d8d6f9ffc22520b2423f14dcefad239054595(
    *,
    frame_capture_s3_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.FrameCaptureS3SettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4b76f4b037adac2a57466315cd669974766577e9b0a38e09879d3d0962aa0c0a(
    *,
    destination: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.OutputLocationRefProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    frame_capture_cdn_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.FrameCaptureCdnSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__93ac417742c559eba667f579a6de8baf86fa48ae5dca653af1bf8bc7f0116b5e(
    *,
    name_modifier: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__608cd69ff6cb082c405345ebf0958c0d9d97f729ccdc8085fb167d4650e84b95(
    *,
    canned_acl: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__19e41af5678ca6e9b78017305d8b8af9d6f40b8a22c5045148bcb6f53e81f182(
    *,
    capture_interval: typing.Optional[jsii.Number] = None,
    capture_interval_units: typing.Optional[builtins.str] = None,
    timecode_burnin_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.TimecodeBurninSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f8cce87a889df7c5926d69bd953074e577505afe215533702a0374206f2b3678(
    *,
    initial_audio_gain: typing.Optional[jsii.Number] = None,
    input_end_action: typing.Optional[builtins.str] = None,
    input_loss_behavior: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.InputLossBehaviorProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    output_locking_mode: typing.Optional[builtins.str] = None,
    output_locking_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.OutputLockingSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    output_timing_source: typing.Optional[builtins.str] = None,
    support_low_framerate_inputs: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0e32bc47e7ddcd61047642a385041b1f9668d31b165231f430f01e2b91b1d087(
    *,
    color_space_passthrough_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.ColorSpacePassthroughSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    rec601_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.Rec601SettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    rec709_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.Rec709SettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3cb4c4dca99a161d3102f1d8f1c337fcb22715a5dcf9f2603a771d9b285530a9(
    *,
    temporal_filter_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.TemporalFilterSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b5cab7f49556648d7d963fdbb4cfd87845bc6a70172808b1847d7a21857a62c5(
    *,
    adaptive_quantization: typing.Optional[builtins.str] = None,
    afd_signaling: typing.Optional[builtins.str] = None,
    bitrate: typing.Optional[jsii.Number] = None,
    buf_fill_pct: typing.Optional[jsii.Number] = None,
    buf_size: typing.Optional[jsii.Number] = None,
    color_metadata: typing.Optional[builtins.str] = None,
    color_space_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.H264ColorSpaceSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    entropy_encoding: typing.Optional[builtins.str] = None,
    filter_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.H264FilterSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    fixed_afd: typing.Optional[builtins.str] = None,
    flicker_aq: typing.Optional[builtins.str] = None,
    force_field_pictures: typing.Optional[builtins.str] = None,
    framerate_control: typing.Optional[builtins.str] = None,
    framerate_denominator: typing.Optional[jsii.Number] = None,
    framerate_numerator: typing.Optional[jsii.Number] = None,
    gop_b_reference: typing.Optional[builtins.str] = None,
    gop_closed_cadence: typing.Optional[jsii.Number] = None,
    gop_num_b_frames: typing.Optional[jsii.Number] = None,
    gop_size: typing.Optional[jsii.Number] = None,
    gop_size_units: typing.Optional[builtins.str] = None,
    level: typing.Optional[builtins.str] = None,
    look_ahead_rate_control: typing.Optional[builtins.str] = None,
    max_bitrate: typing.Optional[jsii.Number] = None,
    min_i_interval: typing.Optional[jsii.Number] = None,
    num_ref_frames: typing.Optional[jsii.Number] = None,
    par_control: typing.Optional[builtins.str] = None,
    par_denominator: typing.Optional[jsii.Number] = None,
    par_numerator: typing.Optional[jsii.Number] = None,
    profile: typing.Optional[builtins.str] = None,
    quality_level: typing.Optional[builtins.str] = None,
    qvbr_quality_level: typing.Optional[jsii.Number] = None,
    rate_control_mode: typing.Optional[builtins.str] = None,
    scan_type: typing.Optional[builtins.str] = None,
    scene_change_detect: typing.Optional[builtins.str] = None,
    slices: typing.Optional[jsii.Number] = None,
    softness: typing.Optional[jsii.Number] = None,
    spatial_aq: typing.Optional[builtins.str] = None,
    subgop_length: typing.Optional[builtins.str] = None,
    syntax: typing.Optional[builtins.str] = None,
    temporal_aq: typing.Optional[builtins.str] = None,
    timecode_burnin_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.TimecodeBurninSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    timecode_insertion: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__32abe461f10992cf69e1043984b274ff5499daba5fe0817221cfab579c9f9c3b(
    *,
    color_space_passthrough_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.ColorSpacePassthroughSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    dolby_vision81_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.DolbyVision81SettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    hdr10_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.Hdr10SettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    rec601_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.Rec601SettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    rec709_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.Rec709SettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7f4aab61301008c3afe08531765fce8b3533bbb0bd6c3f8e6455c9b09692d8d5(
    *,
    temporal_filter_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.TemporalFilterSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ba24f075b346c08bd6351ec946aa6352e1a32fe09c8751f612abee3e6a46cd76(
    *,
    adaptive_quantization: typing.Optional[builtins.str] = None,
    afd_signaling: typing.Optional[builtins.str] = None,
    alternative_transfer_function: typing.Optional[builtins.str] = None,
    bitrate: typing.Optional[jsii.Number] = None,
    buf_size: typing.Optional[jsii.Number] = None,
    color_metadata: typing.Optional[builtins.str] = None,
    color_space_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.H265ColorSpaceSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    filter_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.H265FilterSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    fixed_afd: typing.Optional[builtins.str] = None,
    flicker_aq: typing.Optional[builtins.str] = None,
    framerate_denominator: typing.Optional[jsii.Number] = None,
    framerate_numerator: typing.Optional[jsii.Number] = None,
    gop_closed_cadence: typing.Optional[jsii.Number] = None,
    gop_size: typing.Optional[jsii.Number] = None,
    gop_size_units: typing.Optional[builtins.str] = None,
    level: typing.Optional[builtins.str] = None,
    look_ahead_rate_control: typing.Optional[builtins.str] = None,
    max_bitrate: typing.Optional[jsii.Number] = None,
    min_i_interval: typing.Optional[jsii.Number] = None,
    par_denominator: typing.Optional[jsii.Number] = None,
    par_numerator: typing.Optional[jsii.Number] = None,
    profile: typing.Optional[builtins.str] = None,
    qvbr_quality_level: typing.Optional[jsii.Number] = None,
    rate_control_mode: typing.Optional[builtins.str] = None,
    scan_type: typing.Optional[builtins.str] = None,
    scene_change_detect: typing.Optional[builtins.str] = None,
    slices: typing.Optional[jsii.Number] = None,
    tier: typing.Optional[builtins.str] = None,
    timecode_burnin_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.TimecodeBurninSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    timecode_insertion: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8631eeed4340fce1ed9958aed8291abe2ab4233f7766a2c2ec89429b07817fd6(
    *,
    max_cll: typing.Optional[jsii.Number] = None,
    max_fall: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c9c276dbd70b0c774aeb70109ce83f9be301b3b6f024a79fc109589ccfbb3e2f(
    *,
    connection_retry_interval: typing.Optional[jsii.Number] = None,
    filecache_duration: typing.Optional[jsii.Number] = None,
    http_transfer_mode: typing.Optional[builtins.str] = None,
    num_retries: typing.Optional[jsii.Number] = None,
    restart_delay: typing.Optional[jsii.Number] = None,
    salt: typing.Optional[builtins.str] = None,
    token: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5fd26185e569348925a085e3b239b954e7bdc64639378ac89c60825cb69d6b3e(
    *,
    connection_retry_interval: typing.Optional[jsii.Number] = None,
    filecache_duration: typing.Optional[jsii.Number] = None,
    num_retries: typing.Optional[jsii.Number] = None,
    restart_delay: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__39c16a24493a15643aed9369183ab7c90c63c99b77792cfeec959395003d99a5(
    *,
    hls_akamai_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.HlsAkamaiSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    hls_basic_put_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.HlsBasicPutSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    hls_media_store_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.HlsMediaStoreSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    hls_s3_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.HlsS3SettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    hls_webdav_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.HlsWebdavSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__43277643469028afd3f8dd899dc6654cacf101c3bae0a177505fa52a5f65cb23(
    *,
    ad_markers: typing.Optional[typing.Sequence[builtins.str]] = None,
    base_url_content: typing.Optional[builtins.str] = None,
    base_url_content1: typing.Optional[builtins.str] = None,
    base_url_manifest: typing.Optional[builtins.str] = None,
    base_url_manifest1: typing.Optional[builtins.str] = None,
    caption_language_mappings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.CaptionLanguageMappingProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    caption_language_setting: typing.Optional[builtins.str] = None,
    client_cache: typing.Optional[builtins.str] = None,
    codec_specification: typing.Optional[builtins.str] = None,
    constant_iv: typing.Optional[builtins.str] = None,
    destination: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.OutputLocationRefProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    directory_structure: typing.Optional[builtins.str] = None,
    discontinuity_tags: typing.Optional[builtins.str] = None,
    encryption_type: typing.Optional[builtins.str] = None,
    hls_cdn_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.HlsCdnSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    hls_id3_segment_tagging: typing.Optional[builtins.str] = None,
    i_frame_only_playlists: typing.Optional[builtins.str] = None,
    incomplete_segment_behavior: typing.Optional[builtins.str] = None,
    index_n_segments: typing.Optional[jsii.Number] = None,
    input_loss_action: typing.Optional[builtins.str] = None,
    iv_in_manifest: typing.Optional[builtins.str] = None,
    iv_source: typing.Optional[builtins.str] = None,
    keep_segments: typing.Optional[jsii.Number] = None,
    key_format: typing.Optional[builtins.str] = None,
    key_format_versions: typing.Optional[builtins.str] = None,
    key_provider_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.KeyProviderSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    manifest_compression: typing.Optional[builtins.str] = None,
    manifest_duration_format: typing.Optional[builtins.str] = None,
    min_segment_length: typing.Optional[jsii.Number] = None,
    mode: typing.Optional[builtins.str] = None,
    output_selection: typing.Optional[builtins.str] = None,
    program_date_time: typing.Optional[builtins.str] = None,
    program_date_time_clock: typing.Optional[builtins.str] = None,
    program_date_time_period: typing.Optional[jsii.Number] = None,
    redundant_manifest: typing.Optional[builtins.str] = None,
    segmentation_mode: typing.Optional[builtins.str] = None,
    segment_length: typing.Optional[jsii.Number] = None,
    segments_per_subdirectory: typing.Optional[jsii.Number] = None,
    stream_inf_resolution: typing.Optional[builtins.str] = None,
    timed_metadata_id3_frame: typing.Optional[builtins.str] = None,
    timed_metadata_id3_period: typing.Optional[jsii.Number] = None,
    timestamp_delta_milliseconds: typing.Optional[jsii.Number] = None,
    ts_file_mode: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__85e35acc31759a74bea36f47e87d898ccc948162991af7236a4a7f3ede4b0143(
    *,
    bandwidth: typing.Optional[jsii.Number] = None,
    buffer_segments: typing.Optional[jsii.Number] = None,
    retries: typing.Optional[jsii.Number] = None,
    retry_interval: typing.Optional[jsii.Number] = None,
    scte35_source: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c34dfc65c98c96adab6aa1601ed7e5e5eb64b360f68cee43201fbf138b94c2dd(
    *,
    connection_retry_interval: typing.Optional[jsii.Number] = None,
    filecache_duration: typing.Optional[jsii.Number] = None,
    media_store_storage_class: typing.Optional[builtins.str] = None,
    num_retries: typing.Optional[jsii.Number] = None,
    restart_delay: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__cb651e4a709421705c38b30cf76964de6f941c8c1f875d2463d0ec8bbc0f9230(
    *,
    h265_packaging_type: typing.Optional[builtins.str] = None,
    hls_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.HlsSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    name_modifier: typing.Optional[builtins.str] = None,
    segment_modifier: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8c236c46072c026e96d92b31c12a791265f71a84b587c52359dae972fd466d88(
    *,
    canned_acl: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e9d0a9a86c94248b3bf16c633292594fc322482746c49ce724e7fe7cda046333(
    *,
    audio_only_hls_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AudioOnlyHlsSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    fmp4_hls_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.Fmp4HlsSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    frame_capture_hls_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.FrameCaptureHlsSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    standard_hls_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.StandardHlsSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9127d145510b55400db9ebe097d21c49700c749c5836f277c9ac9da29d8eaf1a(
    *,
    connection_retry_interval: typing.Optional[jsii.Number] = None,
    filecache_duration: typing.Optional[jsii.Number] = None,
    http_transfer_mode: typing.Optional[builtins.str] = None,
    num_retries: typing.Optional[jsii.Number] = None,
    restart_delay: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a8ce5d39b59d21c93ae714cc8e38981dd11da05bdbb72bdf578194fc344ae99c(
    *,
    automatic_input_failover_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AutomaticInputFailoverSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    input_attachment_name: typing.Optional[builtins.str] = None,
    input_id: typing.Optional[builtins.str] = None,
    input_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.InputSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7021676dd5f6b45fedc01a3339e723be1018c863681ddcae782bf5a4a7b48a3b(
    *,
    gain: typing.Optional[jsii.Number] = None,
    input_channel: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__92d821cc598f5449e3bbe6da92ef7dc80a7f9f4ca4ddc91cc12c1cf7e8c98c84(
    *,
    password_param: typing.Optional[builtins.str] = None,
    uri: typing.Optional[builtins.str] = None,
    username: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7c70eba6a185f7f1043ea0c95ea820213685745d2d7247058e6bea55e7118e79(
    *,
    black_frame_msec: typing.Optional[jsii.Number] = None,
    input_loss_image_color: typing.Optional[builtins.str] = None,
    input_loss_image_slate: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.InputLocationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    input_loss_image_type: typing.Optional[builtins.str] = None,
    repeat_frame_msec: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ebae3e4a3768fd3e08e2600a0b21c6d7f627f913d8651e6bd362ce3a975cda6c(
    *,
    input_loss_threshold_msec: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e4e704895a50cddd2fe645a859b2440ce76487eb13f44677cb7661f33de1a979(
    *,
    audio_selectors: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AudioSelectorProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    caption_selectors: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.CaptionSelectorProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    deblock_filter: typing.Optional[builtins.str] = None,
    denoise_filter: typing.Optional[builtins.str] = None,
    filter_strength: typing.Optional[jsii.Number] = None,
    input_filter: typing.Optional[builtins.str] = None,
    network_input_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.NetworkInputSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    scte35_pid: typing.Optional[jsii.Number] = None,
    smpte2038_data_preference: typing.Optional[builtins.str] = None,
    source_end_behavior: typing.Optional[builtins.str] = None,
    video_selector: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.VideoSelectorProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__46b07830b4df395695edac3201ef71beeaa646842d22f7da9f21c0fea5513842(
    *,
    codec: typing.Optional[builtins.str] = None,
    maximum_bitrate: typing.Optional[builtins.str] = None,
    resolution: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f17a7a3d9400285491546fe3aa2beed1785e9839486a1ca6a046d8ce275241ba(
    *,
    static_key_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.StaticKeySettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__617eef143db398943797d56777c8be418acc28e5691fe00e2c35c23e1fa83760(
    *,
    absent_input_audio_behavior: typing.Optional[builtins.str] = None,
    arib: typing.Optional[builtins.str] = None,
    arib_captions_pid: typing.Optional[builtins.str] = None,
    arib_captions_pid_control: typing.Optional[builtins.str] = None,
    audio_buffer_model: typing.Optional[builtins.str] = None,
    audio_frames_per_pes: typing.Optional[jsii.Number] = None,
    audio_pids: typing.Optional[builtins.str] = None,
    audio_stream_type: typing.Optional[builtins.str] = None,
    bitrate: typing.Optional[jsii.Number] = None,
    buffer_model: typing.Optional[builtins.str] = None,
    cc_descriptor: typing.Optional[builtins.str] = None,
    dvb_nit_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.DvbNitSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    dvb_sdt_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.DvbSdtSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    dvb_sub_pids: typing.Optional[builtins.str] = None,
    dvb_tdt_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.DvbTdtSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    dvb_teletext_pid: typing.Optional[builtins.str] = None,
    ebif: typing.Optional[builtins.str] = None,
    ebp_audio_interval: typing.Optional[builtins.str] = None,
    ebp_lookahead_ms: typing.Optional[jsii.Number] = None,
    ebp_placement: typing.Optional[builtins.str] = None,
    ecm_pid: typing.Optional[builtins.str] = None,
    es_rate_in_pes: typing.Optional[builtins.str] = None,
    etv_platform_pid: typing.Optional[builtins.str] = None,
    etv_signal_pid: typing.Optional[builtins.str] = None,
    fragment_time: typing.Optional[jsii.Number] = None,
    klv: typing.Optional[builtins.str] = None,
    klv_data_pids: typing.Optional[builtins.str] = None,
    nielsen_id3_behavior: typing.Optional[builtins.str] = None,
    null_packet_bitrate: typing.Optional[jsii.Number] = None,
    pat_interval: typing.Optional[jsii.Number] = None,
    pcr_control: typing.Optional[builtins.str] = None,
    pcr_period: typing.Optional[jsii.Number] = None,
    pcr_pid: typing.Optional[builtins.str] = None,
    pmt_interval: typing.Optional[jsii.Number] = None,
    pmt_pid: typing.Optional[builtins.str] = None,
    program_num: typing.Optional[jsii.Number] = None,
    rate_mode: typing.Optional[builtins.str] = None,
    scte27_pids: typing.Optional[builtins.str] = None,
    scte35_control: typing.Optional[builtins.str] = None,
    scte35_pid: typing.Optional[builtins.str] = None,
    scte35_preroll_pullup_milliseconds: typing.Optional[jsii.Number] = None,
    segmentation_markers: typing.Optional[builtins.str] = None,
    segmentation_style: typing.Optional[builtins.str] = None,
    segmentation_time: typing.Optional[jsii.Number] = None,
    timed_metadata_behavior: typing.Optional[builtins.str] = None,
    timed_metadata_pid: typing.Optional[builtins.str] = None,
    transport_stream_id: typing.Optional[jsii.Number] = None,
    video_pid: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e058ca2fc583fb54518891d4c018e3b61313d37edf2e5005c033088750a99e2b(
    *,
    audio_frames_per_pes: typing.Optional[jsii.Number] = None,
    audio_pids: typing.Optional[builtins.str] = None,
    ecm_pid: typing.Optional[builtins.str] = None,
    klv_behavior: typing.Optional[builtins.str] = None,
    klv_data_pids: typing.Optional[builtins.str] = None,
    nielsen_id3_behavior: typing.Optional[builtins.str] = None,
    pat_interval: typing.Optional[jsii.Number] = None,
    pcr_control: typing.Optional[builtins.str] = None,
    pcr_period: typing.Optional[jsii.Number] = None,
    pcr_pid: typing.Optional[builtins.str] = None,
    pmt_interval: typing.Optional[jsii.Number] = None,
    pmt_pid: typing.Optional[builtins.str] = None,
    program_num: typing.Optional[jsii.Number] = None,
    scte35_behavior: typing.Optional[builtins.str] = None,
    scte35_pid: typing.Optional[builtins.str] = None,
    timed_metadata_behavior: typing.Optional[builtins.str] = None,
    timed_metadata_pid: typing.Optional[builtins.str] = None,
    transport_stream_id: typing.Optional[jsii.Number] = None,
    video_pid: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9000b706ff56d681f659c08c4f96b20d3fcb4008b138f8883f037a5806828540(
    *,
    maintenance_day: typing.Optional[builtins.str] = None,
    maintenance_start_time: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c9392d58176c012cd3edcfd8cba809739bf0435a5bf1d6a207b2696cd3e366e0(
    *,
    maintenance_day: typing.Optional[builtins.str] = None,
    maintenance_scheduled_date: typing.Optional[builtins.str] = None,
    maintenance_start_time: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__85fb14a458ec20936e4659288aff4ca667c9931c1d403d6a189b9b390fa82420(
    *,
    destination: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.OutputLocationRefProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__874df17e03aca6480b8e3f6dcef1562be61cb009cf5db8263599bb5c44819718(
    *,
    channel_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8e1d001ddfa1ba51a4a115d7684918fa784fab37b9602415021f1afaeb5ea19f(
    *,
    motion_graphics_insertion: typing.Optional[builtins.str] = None,
    motion_graphics_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.MotionGraphicsSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__64c7cf6d496b378c8d31054297fbe10e5e90380713c3b080e89de1f71a225448(
    *,
    html_motion_graphics_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.HtmlMotionGraphicsSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__223c9f8a434346ccf1e7bf69f3ec7d834e31a79870f7fbf1a746a41f360df164(
    *,
    bitrate: typing.Optional[jsii.Number] = None,
    coding_mode: typing.Optional[builtins.str] = None,
    sample_rate: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5c0aedba578afe36332283478d4ae86e9f748ce6111081ba34d06a2f8901449d(
    *,
    temporal_filter_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.TemporalFilterSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__701b4b4bc0caa4a53318de6c2a419bb7a89f218e5298430f76861ce86a5959d8(
    *,
    adaptive_quantization: typing.Optional[builtins.str] = None,
    afd_signaling: typing.Optional[builtins.str] = None,
    color_metadata: typing.Optional[builtins.str] = None,
    color_space: typing.Optional[builtins.str] = None,
    display_aspect_ratio: typing.Optional[builtins.str] = None,
    filter_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.Mpeg2FilterSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    fixed_afd: typing.Optional[builtins.str] = None,
    framerate_denominator: typing.Optional[jsii.Number] = None,
    framerate_numerator: typing.Optional[jsii.Number] = None,
    gop_closed_cadence: typing.Optional[jsii.Number] = None,
    gop_num_b_frames: typing.Optional[jsii.Number] = None,
    gop_size: typing.Optional[jsii.Number] = None,
    gop_size_units: typing.Optional[builtins.str] = None,
    scan_type: typing.Optional[builtins.str] = None,
    subgop_length: typing.Optional[builtins.str] = None,
    timecode_burnin_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.TimecodeBurninSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    timecode_insertion: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__41ddbb98f2f6752ca6ca5582a2f99ce8e4cf486de57ce54624a5f3c99215e8ad(
    *,
    acquisition_point_id: typing.Optional[builtins.str] = None,
    audio_only_timecode_control: typing.Optional[builtins.str] = None,
    certificate_mode: typing.Optional[builtins.str] = None,
    connection_retry_interval: typing.Optional[jsii.Number] = None,
    destination: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.OutputLocationRefProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    event_id: typing.Optional[builtins.str] = None,
    event_id_mode: typing.Optional[builtins.str] = None,
    event_stop_behavior: typing.Optional[builtins.str] = None,
    filecache_duration: typing.Optional[jsii.Number] = None,
    fragment_length: typing.Optional[jsii.Number] = None,
    input_loss_action: typing.Optional[builtins.str] = None,
    num_retries: typing.Optional[jsii.Number] = None,
    restart_delay: typing.Optional[jsii.Number] = None,
    segmentation_mode: typing.Optional[builtins.str] = None,
    send_delay_ms: typing.Optional[jsii.Number] = None,
    sparse_track_type: typing.Optional[builtins.str] = None,
    stream_manifest_behavior: typing.Optional[builtins.str] = None,
    timestamp_offset: typing.Optional[builtins.str] = None,
    timestamp_offset_mode: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__62d9d6b00924e5b0c0a069567902ed712a4ed9bcb201b0d8c484496e6218354a(
    *,
    h265_packaging_type: typing.Optional[builtins.str] = None,
    name_modifier: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__52ebebe942659e27c19c5486e05945da782f2c536964a95e7d5ae1b27ae2199b(
    *,
    destination: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.OutputLocationRefProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__05e351a27b622d5f22d27d90943dfbe1eb20bb237f913c3a6d7e47c8bc4e8c22(
    *,
    multiplex_id: typing.Optional[builtins.str] = None,
    program_name: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ab23db986deaa43367c603c9618f01cd28c250f8c84fe85f51bb50441ecc1422(
    *,
    hls_input_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.HlsInputSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    server_validation: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b4b254a1acda7d40741901639caf488ade8cf7242ee52d2b2836be1dca68b0e7(
    *,
    cbet_check_digit_string: typing.Optional[builtins.str] = None,
    cbet_stepaside: typing.Optional[builtins.str] = None,
    csid: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f3e77cb7fcad1c5904be396c9efa5af888056641c091eed6de9dd32d0f450500(
    *,
    distributor_id: typing.Optional[builtins.str] = None,
    nielsen_pcm_to_id3_tagging: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5486358a38d9072aa9cea1007a7ed50c25e020f301a9f22ca820fa859fbd02b5(
    *,
    check_digit_string: typing.Optional[builtins.str] = None,
    sid: typing.Optional[jsii.Number] = None,
    timezone: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9e5624fe566342243b7ed3e5c7b82883302c5f225edc78912ef46db7518d8a35(
    *,
    nielsen_cbet_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.NielsenCBETProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    nielsen_distribution_type: typing.Optional[builtins.str] = None,
    nielsen_naes_ii_nw_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.NielsenNaesIiNwProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d1c3f4cbc44fec2f5cf6dcc1097499d83d328f8fd1f15b8dd6ce6bc45153265a(
    *,
    id: typing.Optional[builtins.str] = None,
    media_package_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.MediaPackageOutputDestinationSettingsProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    multiplex_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.MultiplexProgramChannelDestinationSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.OutputDestinationSettingsProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7a269efb72488b0dcdc8c596268ad0ed5fc30128a0e556b9b5dd12a4794b0395(
    *,
    password_param: typing.Optional[builtins.str] = None,
    stream_name: typing.Optional[builtins.str] = None,
    url: typing.Optional[builtins.str] = None,
    username: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5886afe17c469b30f6234f5b35aa1cb7d8baae50c424479126239a3238af2d52(
    *,
    name: typing.Optional[builtins.str] = None,
    output_group_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.OutputGroupSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    outputs: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.OutputProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__99268924a18ec05b9988ead6054214f4699ced2eb8edf3f3c278090682ca5641(
    *,
    archive_group_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.ArchiveGroupSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    frame_capture_group_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.FrameCaptureGroupSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    hls_group_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.HlsGroupSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    media_package_group_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.MediaPackageGroupSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    ms_smooth_group_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.MsSmoothGroupSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    multiplex_group_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.MultiplexGroupSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    rtmp_group_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.RtmpGroupSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    udp_group_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.UdpGroupSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d9a83db324046f2d43b5ec241310d3cc50795f2e43fe0806f8d04b7c3cdde950(
    *,
    destination_ref_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__91d4fff7a9a1aba5da0f0ac1b509a8ddbcfbb4e071e4401a2dcf97e150353724(
    *,
    epoch_locking_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.EpochLockingSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    pipeline_locking_settings: typing.Any = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a33aaebc955d92537d615c92d210337ac828a0647a81c8d2761ba79e3eade93d(
    *,
    audio_description_names: typing.Optional[typing.Sequence[builtins.str]] = None,
    caption_description_names: typing.Optional[typing.Sequence[builtins.str]] = None,
    output_name: typing.Optional[builtins.str] = None,
    output_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.OutputSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    video_description_name: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f51710b013df89803afb3f2517730a72a64c710d2e8f52fa7b934290b9b4fd24(
    *,
    archive_output_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.ArchiveOutputSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    frame_capture_output_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.FrameCaptureOutputSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    hls_output_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.HlsOutputSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    media_package_output_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.MediaPackageOutputSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    ms_smooth_output_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.MsSmoothOutputSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    multiplex_output_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.MultiplexOutputSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    rtmp_output_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.RtmpOutputSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    udp_output_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.UdpOutputSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7f45d0853444d06099d7494d2f94e86e3388fa2fb96cc8adbbf6545a8725bfac(
    *,
    channel_mappings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.AudioChannelMappingProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    channels_in: typing.Optional[jsii.Number] = None,
    channels_out: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0295440a065d9a2b0e9f9b565a0db8ee1f7e2d6a9d52e91e2e83d6174761d0b8(
    *,
    ad_markers: typing.Optional[typing.Sequence[builtins.str]] = None,
    authentication_scheme: typing.Optional[builtins.str] = None,
    cache_full_behavior: typing.Optional[builtins.str] = None,
    cache_length: typing.Optional[jsii.Number] = None,
    caption_data: typing.Optional[builtins.str] = None,
    include_filler_nal_units: typing.Optional[builtins.str] = None,
    input_loss_action: typing.Optional[builtins.str] = None,
    restart_delay: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__74e3497409d8b2fef6c9eedfcc637c11b5dfbbea46a2d3c522e192356cb77825(
    *,
    certificate_mode: typing.Optional[builtins.str] = None,
    connection_retry_interval: typing.Optional[jsii.Number] = None,
    destination: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.OutputLocationRefProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    num_retries: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b4a19544dd82483bb8a69ecf1bef1bd646ca34f273d99369d8a65d44b2129bcc(
    *,
    convert608_to708: typing.Optional[builtins.str] = None,
    source608_channel_number: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__01b61a555f88a4661d6bded9dd0b713190dddc3a647ad4a9fb2e521ab3715e2f(
    *,
    ocr_language: typing.Optional[builtins.str] = None,
    pid: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__cd5728050502cafe4266390cab341bfc52ac23cbd4e63e61b41e733c7de3e4d1(
    *,
    ad_avail_offset: typing.Optional[jsii.Number] = None,
    no_regional_blackout_flag: typing.Optional[builtins.str] = None,
    web_delivery_allowed_flag: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__10d53938ab39b895d66d51ac4942026de711810f8220771dd959a93c12fe8394(
    *,
    ad_avail_offset: typing.Optional[jsii.Number] = None,
    no_regional_blackout_flag: typing.Optional[builtins.str] = None,
    web_delivery_allowed_flag: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__6282ff8146dd7047a6e35269e1ea9d022c2ba9ef828b8a798d53cf288e598b31(
    *,
    audio_rendition_sets: typing.Optional[builtins.str] = None,
    m3_u8_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.M3u8SettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0c42637a242c4fddc1c7f3bdb57e6b6a7d79fda8b49885dfbfa497ba2ce035c3(
    *,
    key_provider_server: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.InputLocationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    static_key_value: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4b7c17e94bced98dc97ab415790d86e43392aa9b05ff6fe73db783a3081de3e0(
    *,
    output_rectangle: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.CaptionRectangleProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    page_number: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4041001c3f58cac0e8727dda099da6151fbeb3d601eca7a05bdf1b889774ee76(
    *,
    post_filter_sharpening: typing.Optional[builtins.str] = None,
    strength: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4acdfd91d8e420caae7697e44720207ed0a85171d211d0a02a042d3f4fae4806(
    *,
    state: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2d6f9c37484b2c816642daacc79b039618c8dbe8c7a82de9fc7051995af5098b(
    *,
    font_size: typing.Optional[builtins.str] = None,
    position: typing.Optional[builtins.str] = None,
    prefix: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b61ce73d0d5ba2fae4ed90dcdba3020870d646aa62230e9c170100f3ae3e549f(
    *,
    source: typing.Optional[builtins.str] = None,
    sync_threshold: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2181e12c4fa358ba7b93757ed64a91bee0a4bbcdfd93b078d2112aef707a0ab9(
    *,
    style_control: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8fb5c1fe7bf33a5f1a54ccb4c98ba31a4e8c79fccc734b033ede818a2b47172e(
    *,
    m2_ts_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.M2tsSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__dd077cf89169f1eefbeed92ea9dd80884c2ed3cf9c1b923c96f56c187a3f7e47(
    *,
    input_loss_action: typing.Optional[builtins.str] = None,
    timed_metadata_id3_frame: typing.Optional[builtins.str] = None,
    timed_metadata_id3_period: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c92d35d997681a1da39917e53172381548a4faa273034afe7ebc4f83309ea92d(
    *,
    buffer_msec: typing.Optional[jsii.Number] = None,
    container_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.UdpContainerSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    destination: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.OutputLocationRefProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    fec_output_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.FecOutputSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2efe3318d61d9cda558d7cd8116765a8df488cebc18165074826aaedb259166e(
    *,
    black_detect_threshold: typing.Optional[jsii.Number] = None,
    video_black_threshold_msec: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c80dde1bf6f6c24a8ef9eb602868cb10de17563bdf49656f508df14eff7b5c19(
    *,
    frame_capture_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.FrameCaptureSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    h264_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.H264SettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    h265_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.H265SettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    mpeg2_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.Mpeg2SettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ab7e91a57207801ff35843bc289aeb1c7b782b2fe53f7d6be2f7de9fe3951954(
    *,
    codec_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.VideoCodecSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    height: typing.Optional[jsii.Number] = None,
    name: typing.Optional[builtins.str] = None,
    respond_to_afd: typing.Optional[builtins.str] = None,
    scaling_behavior: typing.Optional[builtins.str] = None,
    sharpness: typing.Optional[jsii.Number] = None,
    width: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b1dc4ddeb5b0fce924251260e04cf78281047fdbbcfeaca30d7f1267c934a70b(
    *,
    hdr10_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.Hdr10SettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__313d5552f9953a24620988ef95f5ed66282971fe44bae236f78d740ca5153eb7(
    *,
    pid: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e632cd0cf374ed51011f8d0d8d1292c1ef30d0bd7a97cddb254ebf88e2290492(
    *,
    program_id: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__60b4d3bce0a5c052ef6a139ec1e78a4af79a342cf23c05d2bea899e926827b79(
    *,
    color_space: typing.Optional[builtins.str] = None,
    color_space_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.VideoSelectorColorSpaceSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    color_space_usage: typing.Optional[builtins.str] = None,
    selector_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.VideoSelectorSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4e0afb1a1b9351816ec94d6cd5a3a0077819fe03aefc18844529e343b1656617(
    *,
    video_selector_pid: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.VideoSelectorPidProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    video_selector_program_id: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.VideoSelectorProgramIdProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2fcbfc3ec68c7f08a9c89ac20d14e6cff6c294d689900dd48d362fa48067df91(
    *,
    public_address_allocation_ids: typing.Optional[typing.Sequence[builtins.str]] = None,
    security_group_ids: typing.Optional[typing.Sequence[builtins.str]] = None,
    subnet_ids: typing.Optional[typing.Sequence[builtins.str]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5711bc232730dd7ebc808a480270bdafcea9c63e2c7a31b1df84906f4c2570f8(
    *,
    bit_depth: typing.Optional[jsii.Number] = None,
    coding_mode: typing.Optional[builtins.str] = None,
    sample_rate: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ebfdc03ea16125a56c4730e92e19fd0b84d4a925fd67235e0790e0eee72ab782(
    *,
    style_control: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b13ea4bee752af01767701d05a81e0c16839b625a40da4f298a5e05d768ae6ab(
    *,
    cdi_input_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.CdiInputSpecificationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    channel_class: typing.Optional[builtins.str] = None,
    destinations: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.OutputDestinationProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    encoder_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.EncoderSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    input_attachments: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.InputAttachmentProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    input_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.InputSpecificationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    log_level: typing.Optional[builtins.str] = None,
    maintenance: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.MaintenanceCreateSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    name: typing.Optional[builtins.str] = None,
    role_arn: typing.Optional[builtins.str] = None,
    tags: typing.Any = None,
    vpc: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnChannel.VpcOutputSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c37c21db5712f0e670f3144efc99d8c9ed0a67af3bc5d9018df305c7ed3dd1f3(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    destinations: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInput.InputDestinationRequestProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    input_devices: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInput.InputDeviceSettingsProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    input_security_groups: typing.Optional[typing.Sequence[builtins.str]] = None,
    media_connect_flows: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInput.MediaConnectFlowRequestProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    name: typing.Optional[builtins.str] = None,
    role_arn: typing.Optional[builtins.str] = None,
    sources: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInput.InputSourceRequestProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    tags: typing.Any = None,
    type: typing.Optional[builtins.str] = None,
    vpc: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInput.InputVpcRequestProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f06412b7f89325cfc3260f21b8a1f8a01a8bc90a8ae4222ef007ee6754a88bfa(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1e30819ae8a8ae88784222461c091da43415ef7f311ddfa329659f3148c6bc48(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4cffc80b1792cfd553a18c3073e65c06bd96b5645d7d220d2c0fa6401fddb016(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnInput.InputDestinationRequestProperty]]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__fa854573ca5ff75a03fa7c73c49f967eb050c5f8110cd037bf76b2fac1c1550a(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnInput.InputDeviceSettingsProperty]]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__bea25d5e13d2be08df0fa00244d91e1be0fccf070e6713bcf2ec7f8496e8b86a(
    value: typing.Optional[typing.List[builtins.str]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__36d69a3eef35821448bd3b7d0186fd6931cde0ba3ed063665c2e4374b869a945(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnInput.MediaConnectFlowRequestProperty]]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e6c903e6cb9991ee5f749c3f36cb893dcfc9c3500eafd66dea88a7359295ed6f(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f27fc34cd2daae9bc688d197b2f17a9be9a91d5deaae844af5f1dc9c7ebc31ca(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1e2140b67b560eb9a66e34c68eb67fd4ee61037201bd2a5b844eaf6d2bcb509a(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnInput.InputSourceRequestProperty]]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4cb0b4312f5bf2286fec4a480d4c11d73095bd5e3394f8191687cad43833f859(
    value: typing.Any,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5a9139f8e9583109eaae05d0483b3e2bdd9086b4e2737a60f3569c5134a65e7a(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__573af095b6f922599f1ad8fe07017e5b0b3c4507ea657c757c3526efa045bac7(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnInput.InputVpcRequestProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__09c9b47df08f57a6e8b0b3f37b32fd88bedb55ea142fe627a7771479eb02b5c3(
    *,
    stream_name: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__eaae8f0579d1f20d3f48dae62b9bab4e2ff9bda22d9f3cfeb6bf1ee3e104ffee(
    *,
    id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d332b129d8d5c4b16abfa6185c6c402dee09a64bf0a41a41378c10a7e4f36d2d(
    *,
    id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a2b96e38bc252de912c2488457298c14577ee26d5734b6d9575fbe71a0f4f654(
    *,
    password_param: typing.Optional[builtins.str] = None,
    url: typing.Optional[builtins.str] = None,
    username: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__66d71f64b486a2ac892041d2fd4bd16287eb7f5a0009f86e46e79eb1292fa254(
    *,
    security_group_ids: typing.Optional[typing.Sequence[builtins.str]] = None,
    subnet_ids: typing.Optional[typing.Sequence[builtins.str]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9ac1510d8a06ea8e4310734088ce61190f4c874d079179e9dad6ae76aafb0782(
    *,
    flow_arn: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f5e4e9b50624e42353cf086c51b3b7174a3d994bf1dc422fe68231305af4a8c7(
    *,
    destinations: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInput.InputDestinationRequestProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    input_devices: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInput.InputDeviceSettingsProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    input_security_groups: typing.Optional[typing.Sequence[builtins.str]] = None,
    media_connect_flows: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInput.MediaConnectFlowRequestProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    name: typing.Optional[builtins.str] = None,
    role_arn: typing.Optional[builtins.str] = None,
    sources: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInput.InputSourceRequestProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    tags: typing.Any = None,
    type: typing.Optional[builtins.str] = None,
    vpc: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInput.InputVpcRequestProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__36ebb0545851926b9b6f0c8e07003f5330e537dbc3cb244849ed42ceb55b14b3(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    tags: typing.Any = None,
    whitelist_rules: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInputSecurityGroup.InputWhitelistRuleCidrProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c205418125ef58c918892fec76333f5c35d1f96f5a51d5cfb93d17f6e0af00f8(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a19308f34fc5d370597883826d50c9d414f32cb5a903a8a869b85a3aa50736fd(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__78c4f2f397c59356de1585c0537789bd674595bf187083c3d0e7be4cbe3fee89(
    value: typing.Any,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d1d5c5d1eac7f185a969f245cbf8bf734b1b341e4c215a93b8cea44585b6f021(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnInputSecurityGroup.InputWhitelistRuleCidrProperty]]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a030c17295e511120d15baa09772d94fd8c4856db58d0f3bd773ecf4b53fe577(
    *,
    cidr: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__dc91e6b6fb01d2e6a1928acf9023824675d51e9e0f586d43d61092afdca3bbd0(
    *,
    tags: typing.Any = None,
    whitelist_rules: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInputSecurityGroup.InputWhitelistRuleCidrProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9255fd2dfb064346defb8b7a153f0b574e1531ce42a8b94643d2c219b3d36e9b(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    availability_zones: typing.Sequence[builtins.str],
    multiplex_settings: typing.Union[_IResolvable_da3f097b, typing.Union[CfnMultiplex.MultiplexSettingsProperty, typing.Dict[builtins.str, typing.Any]]],
    name: builtins.str,
    destinations: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMultiplex.MultiplexOutputDestinationProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7251d62dc563ff611a15fab5a5364c7fb2c9de0d845bd06e4a3a5967db5d0d1e(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__49696d04c41e5b305329e8b5ae4d2d1d5ceb67bde9999a4b40625b4d263c0901(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__066386970cedb1982b2ee43e638b7c16a64c42023c2fe71eeea27fd8ccc94774(
    value: typing.List[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ce2855608a24187a7473607b448e08fb8942be2d21caa404ba1868f0a99b6c90(
    value: typing.Union[_IResolvable_da3f097b, CfnMultiplex.MultiplexSettingsProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7ab37567653ebe7c5e39a80a5831032e9ab430ee890caccab9f7176fc5344c23(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4989a725a9ed6430dd6acf9e21056f1e7c9d10e8c1bc9901449c1fb34b59d29b(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnMultiplex.MultiplexOutputDestinationProperty]]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2391218d45da78d7d7a00830023efa7328947a64cd54595c0c575bf450f1ad83(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__54628cd656700491721a0d154daf3165b967b0a24409567e0c7b5b772b083857(
    *,
    entitlement_arn: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__561720d175beeea6b17debcc3027b84e4039d3ca16a38d753ac9f194157ab392(
    *,
    multiplex_media_connect_output_destination_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMultiplex.MultiplexMediaConnectOutputDestinationSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__459251b2f0910e0cef06727e247bd7e3eabc41412bd526dfcf77e7215a6bc648(
    *,
    transport_stream_bitrate: jsii.Number,
    transport_stream_id: jsii.Number,
    maximum_video_buffer_delay_milliseconds: typing.Optional[jsii.Number] = None,
    transport_stream_reserved_bitrate: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__6704a902c292c9baa14e9f413dfaa206004c02bc34f7b7596d44253cdcecd075(
    *,
    availability_zones: typing.Sequence[builtins.str],
    multiplex_settings: typing.Union[_IResolvable_da3f097b, typing.Union[CfnMultiplex.MultiplexSettingsProperty, typing.Dict[builtins.str, typing.Any]]],
    name: builtins.str,
    destinations: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMultiplex.MultiplexOutputDestinationProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1e8cee4de488a1e3af5984f421ac406fb3ce2264e4688ae568997c405d95db9e(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    channel_id: typing.Optional[builtins.str] = None,
    multiplex_id: typing.Optional[builtins.str] = None,
    multiplex_program_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMultiplexprogram.MultiplexProgramSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    packet_identifiers_map: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMultiplexprogram.MultiplexProgramPacketIdentifiersMapProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    pipeline_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMultiplexprogram.MultiplexProgramPipelineDetailProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    preferred_channel_pipeline: typing.Optional[builtins.str] = None,
    program_name: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4904cde8f157b6effdf71edfd8fbaa961ef5e43becdfa405253aab52e53901df(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__acad53db30a2a5e33a6f5a6711d6d6ce106a80011ec9feff43990953ed952789(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9561e3405511ef7da3fca8bead238e3b87bcd0ff2f533806ddb3f276557fd66e(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b94a917cbdd17ac18baea629f9c49823350870af7f009295dbe06082a0515154(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__6f632ae0fd00e44b0621aa33b16ea0e78aceb8b3a0dd16e47b0fdff627872a53(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnMultiplexprogram.MultiplexProgramSettingsProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5998eaaa6be93df5d21c91e4f1988628e7b05bfde5293cdc5cc97d358907e789(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnMultiplexprogram.MultiplexProgramPacketIdentifiersMapProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f19f0b51ba746cbf53f697a5e3f5fc3695fdbb86d18970453f105e18d0fdee6b(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnMultiplexprogram.MultiplexProgramPipelineDetailProperty]]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5fd9cbf1c19a9228eb0170cfa4a4957d400006db64b0d5892493b117b3c0597f(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__494cf8db89ceebb7c04e5a7903b723f6c172d029740810db9999f7e33a3c3e7c(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1444ea33b07320ffcd0e7d87d5d7f9d473808b2bfd35a789a0ec3a335fd69557(
    *,
    audio_pids: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[jsii.Number]]] = None,
    dvb_sub_pids: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[jsii.Number]]] = None,
    dvb_teletext_pid: typing.Optional[jsii.Number] = None,
    etv_platform_pid: typing.Optional[jsii.Number] = None,
    etv_signal_pid: typing.Optional[jsii.Number] = None,
    klv_data_pids: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[jsii.Number]]] = None,
    pcr_pid: typing.Optional[jsii.Number] = None,
    pmt_pid: typing.Optional[jsii.Number] = None,
    private_metadata_pid: typing.Optional[jsii.Number] = None,
    scte27_pids: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[jsii.Number]]] = None,
    scte35_pid: typing.Optional[jsii.Number] = None,
    timed_metadata_pid: typing.Optional[jsii.Number] = None,
    video_pid: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c7bbe5bee5f0b4794a16cc2a28b80fd57fa369f5561c74ef3143674362f7ea3b(
    *,
    active_channel_pipeline: typing.Optional[builtins.str] = None,
    pipeline_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__61d774a9fb31796afb3a7487d6dc696a9e392f1d359ea804e44b130f1c1b5ca5(
    *,
    provider_name: builtins.str,
    service_name: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c0f38c187a05a8061c038601dbd6ced30e5d402a94344ef4d3c6e8755b7abc22(
    *,
    program_number: jsii.Number,
    preferred_channel_pipeline: typing.Optional[builtins.str] = None,
    service_descriptor: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMultiplexprogram.MultiplexProgramServiceDescriptorProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    video_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMultiplexprogram.MultiplexVideoSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3fe14c38fdea54271799de09042e7f8f265196f4c25f1f2249ebeaee55bbe84d(
    *,
    maximum_bitrate: typing.Optional[jsii.Number] = None,
    minimum_bitrate: typing.Optional[jsii.Number] = None,
    priority: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__97bea0267704f0addfd06d5672cbe39ebea79dbcc03e14eb7dd6ebdabc6345f7(
    *,
    constant_bitrate: typing.Optional[jsii.Number] = None,
    statmux_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMultiplexprogram.MultiplexStatmuxVideoSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f73df2de9c8f0593b389bf604ffaf3d1b093165585c8988cb33c99e1826cb730(
    *,
    channel_id: typing.Optional[builtins.str] = None,
    multiplex_id: typing.Optional[builtins.str] = None,
    multiplex_program_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMultiplexprogram.MultiplexProgramSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    packet_identifiers_map: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMultiplexprogram.MultiplexProgramPacketIdentifiersMapProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    pipeline_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMultiplexprogram.MultiplexProgramPipelineDetailProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    preferred_channel_pipeline: typing.Optional[builtins.str] = None,
    program_name: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass
