{"_id":"@aws-cdk/aws-medialive-alpha","_rev":"5-0ce280943319b32f17060fd15cff6786","name":"@aws-cdk/aws-medialive-alpha","dist-tags":{"latest":"2.272.0-alpha.0"},"versions":{"2.268.0-alpha.0":{"name":"@aws-cdk/aws-medialive-alpha","version":"2.268.0-alpha.0","keywords":["aws","cdk","constructs","AWS::MediaLive","aws-medialive"],"author":{"url":"https://aws.amazon.com","name":"Amazon Web Services"},"license":"Apache-2.0","_id":"@aws-cdk/aws-medialive-alpha@2.268.0-alpha.0","maintainers":[{"name":"amzn-oss","email":"osa-3p@amazon.com"},{"name":"aws-cdk-team","email":"aws-cdk-dev@amazon.com"}],"homepage":"https://github.com/aws/aws-cdk","bugs":{"url":"https://github.com/aws/aws-cdk/issues"},"dist":{"shasum":"43fb0bfc904b938dc9cd6e48d2faa716d69ae831","tarball":"https://registry.npmjs.org/@aws-cdk/aws-medialive-alpha/-/aws-medialive-alpha-2.268.0-alpha.0.tgz","fileCount":70,"integrity":"sha512-Sh4YldgG5/hIOJb4Ig8kAvlVXXUNy36MY7t5hh7cpn66yLc0eTxNM0cwXBXw1nOABPVCU+v5n6i2/74M3ZHBvg==","signatures":[{"sig":"MEQCICj2XGZ/G5DNqYxQ7aZ9ZPq5swt50G5+rNbmZPkUNF3+AiBH04NFjKjPPRTkPluP4qhSqGJKvA32nvzETdczCjjHdQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4337789},"jsii":{"outdir":"dist","targets":{"go":{"moduleName":"github.com/aws/aws-cdk-go","packageName":"awsmedialivealpha"},"java":{"maven":{"groupId":"software.amazon.awscdk","artifactId":"medialive-alpha"},"package":"software.amazon.awscdk.services.medialive.alpha"},"dotnet":{"iconUrl":"https://raw.githubusercontent.com/aws/aws-cdk/main/logo/default-256-dark.png","namespace":"Amazon.CDK.AWS.MediaLive.Alpha","packageId":"Amazon.CDK.AWS.MediaLive.Alpha"},"python":{"module":"aws_cdk.aws_medialive_alpha","distName":"aws-cdk.aws-medialive-alpha","classifiers":["Framework :: AWS CDK","Framework :: AWS CDK :: 2"]}},"metadata":{"jsii":{"rosetta":{"strict":true}}},"tsconfig":"tsconfig.json","validateTsconfig":"minimal"},"main":"lib/index.js","_from":"file:/codebuild/output/src1352539524/src/js/aws-medialive-alpha@2.268.0-alpha.0.jsii.tgz","types":"lib/index.d.ts","awslint":{"exclude":["no-unused-type:@aws-cdk/aws-medialive-alpha.InputType","no-unused-type:@aws-cdk/aws-medialive-alpha.AudioCodecType","no-unused-type:@aws-cdk/aws-medialive-alpha.VideoCodecType","props-no-arn-refs:@aws-cdk/aws-medialive-alpha.ChannelProps.inferenceFeedArn","props-physical-name:@aws-cdk/aws-medialive-alpha.InputSecurityGroupProps","prefer-ref-interface:aws-cdk-lib.aws_ec2.ISubnet.associateNetworkAcl.acl","duration-prop-type:@aws-cdk/aws-medialive-alpha.HlsSegmentationMode.USE_SEGMENT_DURATION","duration-prop-type:@aws-cdk/aws-medialive-alpha.M2tsPcrControl.CONFIGURED_PCR_PERIOD","duration-prop-type:@aws-cdk/aws-medialive-alpha.M3u8PcrControl.CONFIGURED_PCR_PERIOD","duration-prop-type:@aws-cdk/aws-medialive-alpha.MsSmoothSegmentationMode.USE_SEGMENT_DURATION"]},"engines":{"node":">= 20.0.0"},"pkglint":{"exclude":["naming/package-matches-directory","assert/assert-dependency"]},"private":false,"scripts":{"gen":"gen-cdk","lint":"cdk-lint","test":"cdk-test","build":"cdk-build","integ":"integ-runner --unstable=toolkit-lib-engine --language javascript","watch":"cdk-watch","compat":"cdk-compat","awslint":"cdk-awslint","package":"cdk-package","pkglint":"pkglint -f","build+test":"yarn build && yarn test","build+extract":"yarn build && yarn rosetta:extract","rosetta:extract":"yarn --silent jsii-rosetta extract","build+test+extract":"yarn build+test && yarn rosetta:extract","build+test+package":"yarn build+test && yarn package"},"_npmUser":{"name":"aws-cdk-team","email":"aws-cdk-dev@amazon.com"},"awscdkio":{"announce":false},"maturity":"experimental","_resolved":"/codebuild/output/src1352539524/src/js/aws-medialive-alpha@2.268.0-alpha.0.jsii.tgz","cdk-build":{"env":{"AWSLINT_BASE_CONSTRUCT":true}},"stability":"experimental","_integrity":"sha512-Sh4YldgG5/hIOJb4Ig8kAvlVXXUNy36MY7t5hh7cpn66yLc0eTxNM0cwXBXw1nOABPVCU+v5n6i2/74M3ZHBvg==","repository":{"url":"git+https://github.com/aws/aws-cdk.git","type":"git","directory":"packages/@aws-cdk/aws-medialive-alpha"},"_npmVersion":"10.8.2","description":"The CDK construct library for MediaLive","directories":{},"_nodeVersion":"18.20.8","publishConfig":{"tag":"latest"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","@types/jest":"^29.5.14","aws-cdk-lib":"2.268.0","@aws-cdk/pkglint":"2.268.0-alpha.0","@aws-cdk/integ-runner":"^2.202.3","@aws-cdk/cdk-build-tools":"2.268.0-alpha.0","@aws-cdk/integ-tests-alpha":"^2.268.0-alpha.0","@aws-cdk/aws-mediaconnect-alpha":"^2.268.0-alpha.0","@aws-cdk/aws-mediapackagev2-alpha":"^2.268.0-alpha.0"},"separate-module":false,"peerDependencies":{"constructs":"^10.5.0","aws-cdk-lib":"^2.268.0","@aws-cdk/aws-mediapackagev2-alpha":"^2.268.0-alpha.0"},"_npmOperationalInternal":{"tmp":"tmp/aws-medialive-alpha_2.268.0-alpha.0_1788377595620_0.9727388614885846","host":"s3://npm-registry-packages-npm-production"}},"2.269.0-alpha.0":{"name":"@aws-cdk/aws-medialive-alpha","version":"2.269.0-alpha.0","keywords":["aws","cdk","constructs","AWS::MediaLive","aws-medialive"],"author":{"url":"https://aws.amazon.com","name":"Amazon Web Services"},"license":"Apache-2.0","_id":"@aws-cdk/aws-medialive-alpha@2.269.0-alpha.0","maintainers":[{"name":"amzn-oss","email":"osa-3p@amazon.com"},{"name":"aws-cdk-team","email":"aws-cdk-dev@amazon.com"}],"homepage":"https://github.com/aws/aws-cdk","bugs":{"url":"https://github.com/aws/aws-cdk/issues"},"dist":{"shasum":"a770dc176c159c9e5b0def8013567f73497278b4","tarball":"https://registry.npmjs.org/@aws-cdk/aws-medialive-alpha/-/aws-medialive-alpha-2.269.0-alpha.0.tgz","fileCount":70,"integrity":"sha512-3wAWgokWXjR3LpX1cWxdZqHn86IN+9xROTUjMI6CFav51i5A0XypkYtK1PKyZTnzbzEvAUSs4rY7y1tKMfI/9g==","signatures":[{"sig":"MEUCIQC6uSTL+Gx3UEcGIXQvYDwJKpXLjn//cZrOn6j79vI5igIgYLqZ1fhkgNVCw+yuwMNV+0VMiWeswhLe7KgwSBec2OU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCWI2tDeU/NR9YvirJNqOV3KsVVl4+pBs4cugzBblAIUQIhAJEpslt9AinNWYOE+QY6XlZyMkKmdVgyxlHDzrJb/wpT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4338730},"jsii":{"outdir":"dist","targets":{"go":{"moduleName":"github.com/aws/aws-cdk-go","packageName":"awsmedialivealpha"},"java":{"maven":{"groupId":"software.amazon.awscdk","artifactId":"medialive-alpha"},"package":"software.amazon.awscdk.services.medialive.alpha"},"dotnet":{"iconUrl":"https://raw.githubusercontent.com/aws/aws-cdk/main/logo/default-256-dark.png","namespace":"Amazon.CDK.AWS.MediaLive.Alpha","packageId":"Amazon.CDK.AWS.MediaLive.Alpha"},"python":{"module":"aws_cdk.aws_medialive_alpha","distName":"aws-cdk.aws-medialive-alpha","classifiers":["Framework :: AWS CDK","Framework :: AWS CDK :: 2"]}},"metadata":{"jsii":{"rosetta":{"strict":true}}},"tsconfig":"tsconfig.json","validateTsconfig":"minimal"},"main":"lib/index.js","_from":"file:/codebuild/output/src4196559369/src/js/aws-medialive-alpha@2.269.0-alpha.0.jsii.tgz","types":"lib/index.d.ts","awslint":{"exclude":["no-unused-type:@aws-cdk/aws-medialive-alpha.InputType","no-unused-type:@aws-cdk/aws-medialive-alpha.AudioCodecType","no-unused-type:@aws-cdk/aws-medialive-alpha.VideoCodecType","props-no-arn-refs:@aws-cdk/aws-medialive-alpha.ChannelProps.inferenceFeedArn","props-physical-name:@aws-cdk/aws-medialive-alpha.InputSecurityGroupProps","prefer-ref-interface:aws-cdk-lib.aws_ec2.ISubnet.associateNetworkAcl.acl","duration-prop-type:@aws-cdk/aws-medialive-alpha.HlsSegmentationMode.USE_SEGMENT_DURATION","duration-prop-type:@aws-cdk/aws-medialive-alpha.M2tsPcrControl.CONFIGURED_PCR_PERIOD","duration-prop-type:@aws-cdk/aws-medialive-alpha.M3u8PcrControl.CONFIGURED_PCR_PERIOD","duration-prop-type:@aws-cdk/aws-medialive-alpha.MsSmoothSegmentationMode.USE_SEGMENT_DURATION"]},"engines":{"node":">= 20.0.0"},"pkglint":{"exclude":["naming/package-matches-directory","assert/assert-dependency"]},"private":false,"scripts":{"gen":"gen-cdk","lint":"cdk-lint","test":"cdk-test","build":"cdk-build","integ":"integ-runner --unstable=toolkit-lib-engine --language javascript","watch":"cdk-watch","compat":"cdk-compat","awslint":"cdk-awslint","package":"cdk-package","pkglint":"pkglint -f","build+test":"yarn build && yarn test","build+extract":"yarn build && yarn rosetta:extract","rosetta:extract":"yarn --silent jsii-rosetta extract","build+test+extract":"yarn build+test && yarn rosetta:extract","build+test+package":"yarn build+test && yarn package"},"_npmUser":{"name":"aws-cdk-team","email":"aws-cdk-dev@amazon.com"},"awscdkio":{"announce":false},"maturity":"experimental","_resolved":"/codebuild/output/src4196559369/src/js/aws-medialive-alpha@2.269.0-alpha.0.jsii.tgz","cdk-build":{"env":{"AWSLINT_BASE_CONSTRUCT":true}},"stability":"experimental","_integrity":"sha512-3wAWgokWXjR3LpX1cWxdZqHn86IN+9xROTUjMI6CFav51i5A0XypkYtK1PKyZTnzbzEvAUSs4rY7y1tKMfI/9g==","repository":{"url":"git+https://github.com/aws/aws-cdk.git","type":"git","directory":"packages/@aws-cdk/aws-medialive-alpha"},"_npmVersion":"10.8.2","description":"The CDK construct library for MediaLive","directories":{},"_nodeVersion":"18.20.8","publishConfig":{"tag":"latest"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","@types/jest":"^29.5.14","aws-cdk-lib":"2.269.0","@aws-cdk/pkglint":"2.269.0-alpha.0","@aws-cdk/integ-runner":"^2.202.3","@aws-cdk/cdk-build-tools":"2.269.0-alpha.0","@aws-cdk/integ-tests-alpha":"^2.269.0-alpha.0","@aws-cdk/aws-mediaconnect-alpha":"^2.269.0-alpha.0","@aws-cdk/aws-mediapackagev2-alpha":"^2.269.0-alpha.0"},"separate-module":false,"peerDependencies":{"constructs":"^10.5.0","aws-cdk-lib":"^2.269.0","@aws-cdk/aws-mediapackagev2-alpha":"^2.269.0-alpha.0"},"_npmOperationalInternal":{"tmp":"tmp/aws-medialive-alpha_2.269.0-alpha.0_1789074133595_0.8226398543148785","host":"s3://npm-registry-packages-npm-production"}},"2.270.0-alpha.0":{"name":"@aws-cdk/aws-medialive-alpha","version":"2.270.0-alpha.0","keywords":["aws","cdk","constructs","AWS::MediaLive","aws-medialive"],"author":{"url":"https://aws.amazon.com","name":"Amazon Web Services"},"license":"Apache-2.0","_id":"@aws-cdk/aws-medialive-alpha@2.270.0-alpha.0","maintainers":[{"name":"amzn-oss","email":"osa-3p@amazon.com"},{"name":"aws-cdk-team","email":"aws-cdk-dev@amazon.com"}],"homepage":"https://github.com/aws/aws-cdk","bugs":{"url":"https://github.com/aws/aws-cdk/issues"},"dist":{"shasum":"8e24b02747abf18d4bdf447b2071f1024812e0f7","tarball":"https://registry.npmjs.org/@aws-cdk/aws-medialive-alpha/-/aws-medialive-alpha-2.270.0-alpha.0.tgz","fileCount":70,"integrity":"sha512-UnS/GeBT8XXkfdipSKsNsjim9ZSPiKdaJAy+Ju7jZJxuFapWZ1Jc43QOc2TG5jgcGgONodBG/JzIcDaHd8YUXQ==","signatures":[{"sig":"MEQCIGX6mccGK3M+3SjSz2k6ZvgaJJFI03kNsrCRcm2jJILPAiA5n8w8stM22TjIkpIOSQIr59Pkc5kpzwy+eOcZCrQ5uw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCHzetRk+OajLiRbAWvtJi4tOLekxUkzVt9Q+9UxSLHjgIgaSE1YGvKKW2BMS8Bsj2o+8apQVK5wkK8XGOz7H4BQ50=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4338730},"jsii":{"outdir":"dist","targets":{"go":{"moduleName":"github.com/aws/aws-cdk-go","packageName":"awsmedialivealpha"},"java":{"maven":{"groupId":"software.amazon.awscdk","artifactId":"medialive-alpha"},"package":"software.amazon.awscdk.services.medialive.alpha"},"dotnet":{"iconUrl":"https://raw.githubusercontent.com/aws/aws-cdk/main/logo/default-256-dark.png","namespace":"Amazon.CDK.AWS.MediaLive.Alpha","packageId":"Amazon.CDK.AWS.MediaLive.Alpha"},"python":{"module":"aws_cdk.aws_medialive_alpha","distName":"aws-cdk.aws-medialive-alpha","classifiers":["Framework :: AWS CDK","Framework :: AWS CDK :: 2"]}},"metadata":{"jsii":{"rosetta":{"strict":true}}},"tsconfig":"tsconfig.json","validateTsconfig":"minimal"},"main":"lib/index.js","_from":"file:/codebuild/output/src2145135899/src/js/aws-medialive-alpha@2.270.0-alpha.0.jsii.tgz","types":"lib/index.d.ts","awslint":{"exclude":["no-unused-type:@aws-cdk/aws-medialive-alpha.InputType","no-unused-type:@aws-cdk/aws-medialive-alpha.AudioCodecType","no-unused-type:@aws-cdk/aws-medialive-alpha.VideoCodecType","props-no-arn-refs:@aws-cdk/aws-medialive-alpha.ChannelProps.inferenceFeedArn","props-physical-name:@aws-cdk/aws-medialive-alpha.InputSecurityGroupProps","prefer-ref-interface:aws-cdk-lib.aws_ec2.ISubnet.associateNetworkAcl.acl","duration-prop-type:@aws-cdk/aws-medialive-alpha.HlsSegmentationMode.USE_SEGMENT_DURATION","duration-prop-type:@aws-cdk/aws-medialive-alpha.M2tsPcrControl.CONFIGURED_PCR_PERIOD","duration-prop-type:@aws-cdk/aws-medialive-alpha.M3u8PcrControl.CONFIGURED_PCR_PERIOD","duration-prop-type:@aws-cdk/aws-medialive-alpha.MsSmoothSegmentationMode.USE_SEGMENT_DURATION"]},"engines":{"node":">= 20.0.0"},"pkglint":{"exclude":["naming/package-matches-directory","assert/assert-dependency"]},"private":false,"scripts":{"gen":"gen-cdk","lint":"cdk-lint","test":"cdk-test","build":"cdk-build","integ":"integ-runner --unstable=toolkit-lib-engine --language javascript","watch":"cdk-watch","compat":"cdk-compat","awslint":"cdk-awslint","package":"cdk-package","pkglint":"pkglint -f","build+test":"yarn build && yarn test","build+extract":"yarn build && yarn rosetta:extract","rosetta:extract":"yarn --silent jsii-rosetta extract","build+test+extract":"yarn build+test && yarn rosetta:extract","build+test+package":"yarn build+test && yarn package"},"_npmUser":{"name":"aws-cdk-team","email":"aws-cdk-dev@amazon.com"},"awscdkio":{"announce":false},"maturity":"experimental","_resolved":"/codebuild/output/src2145135899/src/js/aws-medialive-alpha@2.270.0-alpha.0.jsii.tgz","cdk-build":{"env":{"AWSLINT_BASE_CONSTRUCT":true}},"stability":"experimental","_integrity":"sha512-UnS/GeBT8XXkfdipSKsNsjim9ZSPiKdaJAy+Ju7jZJxuFapWZ1Jc43QOc2TG5jgcGgONodBG/JzIcDaHd8YUXQ==","repository":{"url":"git+https://github.com/aws/aws-cdk.git","type":"git","directory":"packages/@aws-cdk/aws-medialive-alpha"},"_npmVersion":"10.8.2","description":"The CDK construct library for MediaLive","directories":{},"_nodeVersion":"18.20.8","publishConfig":{"tag":"latest"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","@types/jest":"^29.5.14","aws-cdk-lib":"2.270.0","@aws-cdk/pkglint":"2.270.0-alpha.0","@aws-cdk/integ-runner":"^2.202.3","@aws-cdk/cdk-build-tools":"2.270.0-alpha.0","@aws-cdk/integ-tests-alpha":"^2.270.0-alpha.0","@aws-cdk/aws-mediaconnect-alpha":"^2.270.0-alpha.0","@aws-cdk/aws-mediapackagev2-alpha":"^2.270.0-alpha.0"},"separate-module":false,"peerDependencies":{"constructs":"^10.5.0","aws-cdk-lib":"^2.270.0","@aws-cdk/aws-mediapackagev2-alpha":"^2.270.0-alpha.0"},"_npmOperationalInternal":{"tmp":"tmp/aws-medialive-alpha_2.270.0-alpha.0_1789669678561_0.11117967183758393","host":"s3://npm-registry-packages-npm-production"}},"2.271.0-alpha.0":{"name":"@aws-cdk/aws-medialive-alpha","version":"2.271.0-alpha.0","keywords":["aws","cdk","constructs","AWS::MediaLive","aws-medialive"],"author":{"url":"https://aws.amazon.com","name":"Amazon Web Services"},"license":"Apache-2.0","_id":"@aws-cdk/aws-medialive-alpha@2.271.0-alpha.0","maintainers":[{"name":"amzn-oss","email":"osa-3p@amazon.com"},{"name":"aws-cdk-team","email":"aws-cdk-dev@amazon.com"}],"homepage":"https://github.com/aws/aws-cdk","bugs":{"url":"https://github.com/aws/aws-cdk/issues"},"dist":{"shasum":"fe72371a0bc2894d491addeb30e9e792836336e9","tarball":"https://registry.npmjs.org/@aws-cdk/aws-medialive-alpha/-/aws-medialive-alpha-2.271.0-alpha.0.tgz","fileCount":70,"integrity":"sha512-8tMQYqAbpJhjlav3ErbkyJRGKK9vtUVcm+ErHQZyaUbYuaTRIof4cAVR26AR/jHWb0deH9nJj+LYIL/G9aHayQ==","signatures":[{"sig":"MEQCICdXf8t5BKADOK2SBb2Hu7Fo9XkIBSNQIpK1rKRNYaqqAiBT2GYLwDOCsuPHmWCKxk79irfyJ7a6p5mr3LLbxi+OeQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICNAWUjGjQCxKaMG+hHJ8tjk7d+njZgTVlTIoSHMdVHtAiEAwL/arrQryRkGDA9RNow0pnk16iRmISNv7e1mkYXaOnI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4338730},"jsii":{"outdir":"dist","targets":{"go":{"moduleName":"github.com/aws/aws-cdk-go","packageName":"awsmedialivealpha"},"java":{"maven":{"groupId":"software.amazon.awscdk","artifactId":"medialive-alpha"},"package":"software.amazon.awscdk.services.medialive.alpha"},"dotnet":{"iconUrl":"https://raw.githubusercontent.com/aws/aws-cdk/main/logo/default-256-dark.png","namespace":"Amazon.CDK.AWS.MediaLive.Alpha","packageId":"Amazon.CDK.AWS.MediaLive.Alpha"},"python":{"module":"aws_cdk.aws_medialive_alpha","distName":"aws-cdk.aws-medialive-alpha","classifiers":["Framework :: AWS CDK","Framework :: AWS CDK :: 2"]}},"metadata":{"jsii":{"rosetta":{"strict":true}}},"tsconfig":"tsconfig.json","validateTsconfig":"minimal"},"main":"lib/index.js","_from":"file:/codebuild/output/src2522094598/src/js/aws-medialive-alpha@2.271.0-alpha.0.jsii.tgz","types":"lib/index.d.ts","awslint":{"exclude":["no-unused-type:@aws-cdk/aws-medialive-alpha.InputType","no-unused-type:@aws-cdk/aws-medialive-alpha.AudioCodecType","no-unused-type:@aws-cdk/aws-medialive-alpha.VideoCodecType","props-no-arn-refs:@aws-cdk/aws-medialive-alpha.ChannelProps.inferenceFeedArn","props-physical-name:@aws-cdk/aws-medialive-alpha.InputSecurityGroupProps","prefer-ref-interface:aws-cdk-lib.aws_ec2.ISubnet.associateNetworkAcl.acl","duration-prop-type:@aws-cdk/aws-medialive-alpha.HlsSegmentationMode.USE_SEGMENT_DURATION","duration-prop-type:@aws-cdk/aws-medialive-alpha.M2tsPcrControl.CONFIGURED_PCR_PERIOD","duration-prop-type:@aws-cdk/aws-medialive-alpha.M3u8PcrControl.CONFIGURED_PCR_PERIOD","duration-prop-type:@aws-cdk/aws-medialive-alpha.MsSmoothSegmentationMode.USE_SEGMENT_DURATION"]},"engines":{"node":">= 20.0.0"},"pkglint":{"exclude":["naming/package-matches-directory","assert/assert-dependency"]},"private":false,"scripts":{"gen":"gen-cdk","lint":"cdk-lint","test":"cdk-test","build":"cdk-build","integ":"integ-runner --unstable=toolkit-lib-engine --language javascript","watch":"cdk-watch","compat":"cdk-compat","awslint":"cdk-awslint","package":"cdk-package","pkglint":"pkglint -f","build+test":"yarn build && yarn test","build+extract":"yarn build && yarn rosetta:extract","rosetta:extract":"yarn --silent jsii-rosetta extract","build+test+extract":"yarn build+test && yarn rosetta:extract","build+test+package":"yarn build+test && yarn package"},"_npmUser":{"name":"aws-cdk-team","email":"aws-cdk-dev@amazon.com"},"awscdkio":{"announce":false},"maturity":"experimental","_resolved":"/codebuild/output/src2522094598/src/js/aws-medialive-alpha@2.271.0-alpha.0.jsii.tgz","cdk-build":{"env":{"AWSLINT_BASE_CONSTRUCT":true}},"stability":"experimental","_integrity":"sha512-8tMQYqAbpJhjlav3ErbkyJRGKK9vtUVcm+ErHQZyaUbYuaTRIof4cAVR26AR/jHWb0deH9nJj+LYIL/G9aHayQ==","repository":{"url":"git+https://github.com/aws/aws-cdk.git","type":"git","directory":"packages/@aws-cdk/aws-medialive-alpha"},"_npmVersion":"10.8.2","description":"The CDK construct library for MediaLive","directories":{},"_nodeVersion":"18.20.8","publishConfig":{"tag":"latest"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","@types/jest":"^29.5.14","aws-cdk-lib":"2.271.0","@aws-cdk/pkglint":"2.271.0-alpha.0","@aws-cdk/integ-runner":"^2.202.3","@aws-cdk/cdk-build-tools":"2.271.0-alpha.0","@aws-cdk/integ-tests-alpha":"^2.271.0-alpha.0","@aws-cdk/aws-mediaconnect-alpha":"^2.271.0-alpha.0","@aws-cdk/aws-mediapackagev2-alpha":"^2.271.0-alpha.0"},"separate-module":false,"peerDependencies":{"constructs":"^10.5.0","aws-cdk-lib":"^2.271.0","@aws-cdk/aws-mediapackagev2-alpha":"^2.271.0-alpha.0"},"_npmOperationalInternal":{"tmp":"tmp/aws-medialive-alpha_2.271.0-alpha.0_1790361765183_0.008620425828935963","host":"s3://npm-registry-packages-npm-production"}},"2.272.0-alpha.0":{"_id":"@aws-cdk/aws-medialive-alpha@2.272.0-alpha.0","bugs":{"url":"https://github.com/aws/aws-cdk/issues"},"dist":{"shasum":"69b5e678de2be8005f22908651ba2582ec37cd57","tarball":"https://registry.npmjs.org/@aws-cdk/aws-medialive-alpha/-/aws-medialive-alpha-2.272.0-alpha.0.tgz","fileCount":70,"integrity":"sha512-olt7S1OnOeAU+A5PvVGQKYdolu8bQadB58Hy15m+h65evOlhPOEmDZWl3VMaOuRuXKYmY/JtmDqgsEULFq+Lfw==","signatures":[{"sig":"MEQCIDRo0tN6AbnGRLU5IAJd1DRkFMkyzsR0hrgh2CTEdUCSAiBpSLHBawn0f8fwzB/TJMefbEIUc0ZOrwxnLHTR/U1ytw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCID138cqyU6ppD/tFHNPWQ6r5XSPoO+29+J4VwKRcN6ERAiBI38PGYkIKAH3UXqhrQrCwz4EqH2WvbwaZtsRONoz58w=="}],"unpackedSize":4341819},"jsii":{"outdir":"dist","targets":{"go":{"moduleName":"github.com/aws/aws-cdk-go","packageName":"awsmedialivealpha"},"java":{"maven":{"groupId":"software.amazon.awscdk","artifactId":"medialive-alpha"},"package":"software.amazon.awscdk.services.medialive.alpha"},"dotnet":{"iconUrl":"https://raw.githubusercontent.com/aws/aws-cdk/main/logo/default-256-dark.png","namespace":"Amazon.CDK.AWS.MediaLive.Alpha","packageId":"Amazon.CDK.AWS.MediaLive.Alpha"},"python":{"module":"aws_cdk.aws_medialive_alpha","distName":"aws-cdk.aws-medialive-alpha","classifiers":["Framework :: AWS CDK","Framework :: AWS CDK :: 2"]}},"metadata":{"jsii":{"rosetta":{"strict":true}}},"tsconfig":"tsconfig.json","validateTsconfig":"minimal"},"main":"lib/index.js","name":"@aws-cdk/aws-medialive-alpha","_from":"file:/codebuild/output/src367649872/src/js/aws-medialive-alpha@2.272.0-alpha.0.jsii.tgz","types":"lib/index.d.ts","author":{"url":"https://aws.amazon.com","name":"Amazon Web Services"},"awslint":{"exclude":["no-unused-type:@aws-cdk/aws-medialive-alpha.InputType","no-unused-type:@aws-cdk/aws-medialive-alpha.AudioCodecType","no-unused-type:@aws-cdk/aws-medialive-alpha.VideoCodecType","props-no-arn-refs:@aws-cdk/aws-medialive-alpha.ChannelProps.inferenceFeedArn","props-physical-name:@aws-cdk/aws-medialive-alpha.InputSecurityGroupProps","prefer-ref-interface:aws-cdk-lib.aws_ec2.ISubnet.associateNetworkAcl.acl","duration-prop-type:@aws-cdk/aws-medialive-alpha.HlsSegmentationMode.USE_SEGMENT_DURATION","duration-prop-type:@aws-cdk/aws-medialive-alpha.M2tsPcrControl.CONFIGURED_PCR_PERIOD","duration-prop-type:@aws-cdk/aws-medialive-alpha.M3u8PcrControl.CONFIGURED_PCR_PERIOD","duration-prop-type:@aws-cdk/aws-medialive-alpha.MsSmoothSegmentationMode.USE_SEGMENT_DURATION"]},"engines":{"node":">= 20.0.0"},"license":"Apache-2.0","pkglint":{"exclude":["naming/package-matches-directory","assert/assert-dependency"]},"private":false,"scripts":{"gen":"gen-cdk","lint":"cdk-lint","test":"cdk-test","build":"cdk-build","integ":"integ-runner --unstable=toolkit-lib-engine --language javascript","watch":"cdk-watch","compat":"cdk-compat","awslint":"cdk-awslint","package":"cdk-package","pkglint":"pkglint -f","build+test":"yarn build && yarn test","build+extract":"yarn build && yarn rosetta:extract","rosetta:extract":"yarn --silent jsii-rosetta extract","build+test+extract":"yarn build+test && yarn rosetta:extract","build+test+package":"yarn build+test && yarn package"},"version":"2.272.0-alpha.0","_npmUser":{"name":"aws-cdk-team","email":"aws-cdk-dev@amazon.com"},"awscdkio":{"announce":false},"homepage":"https://github.com/aws/aws-cdk","keywords":["aws","cdk","constructs","AWS::MediaLive","aws-medialive"],"maturity":"experimental","_resolved":"/codebuild/output/src367649872/src/js/aws-medialive-alpha@2.272.0-alpha.0.jsii.tgz","cdk-build":{"env":{"AWSLINT_BASE_CONSTRUCT":true}},"stability":"experimental","_integrity":"sha512-olt7S1OnOeAU+A5PvVGQKYdolu8bQadB58Hy15m+h65evOlhPOEmDZWl3VMaOuRuXKYmY/JtmDqgsEULFq+Lfw==","repository":{"url":"git+https://github.com/aws/aws-cdk.git","type":"git","directory":"packages/@aws-cdk/aws-medialive-alpha"},"_npmVersion":"10.8.2","description":"The CDK construct library for MediaLive","directories":{},"maintainers":[{"name":"amzn-oss","email":"osa-3p@amazon.com"},{"name":"aws-cdk-team","email":"aws-cdk-dev@amazon.com"}],"_nodeVersion":"18.20.8","publishConfig":{"tag":"latest"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","@types/jest":"^29.5.14","aws-cdk-lib":"2.272.0","@aws-cdk/pkglint":"2.272.0-alpha.0","@aws-cdk/integ-runner":"^2.202.3","@aws-cdk/cdk-build-tools":"2.272.0-alpha.0","@aws-cdk/integ-tests-alpha":"^2.272.0-alpha.0","@aws-cdk/aws-mediaconnect-alpha":"^2.272.0-alpha.0","@aws-cdk/aws-mediapackagev2-alpha":"^2.272.0-alpha.0"},"separate-module":false,"peerDependencies":{"constructs":"^10.5.0","aws-cdk-lib":"^2.272.0","@aws-cdk/aws-mediapackagev2-alpha":"^2.272.0-alpha.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/aws-medialive-alpha_2.272.0-alpha.0_1790777591485_0.7001786339555307"}}},"time":{"created":"2026-09-02T19:33:15.419Z","modified":"2026-09-30T14:13:11.937Z","2.268.0-alpha.0":"2026-09-02T19:33:15.823Z","2.269.0-alpha.0":"2026-09-10T21:02:13.740Z","2.270.0-alpha.0":"2026-09-17T18:27:58.716Z","2.271.0-alpha.0":"2026-09-25T18:42:45.371Z","2.272.0-alpha.0":"2026-09-30T14:13:11.644Z"},"bugs":{"url":"https://github.com/aws/aws-cdk/issues"},"author":{"url":"https://aws.amazon.com","name":"Amazon Web Services"},"license":"Apache-2.0","homepage":"https://github.com/aws/aws-cdk","keywords":["aws","cdk","constructs","AWS::MediaLive","aws-medialive"],"repository":{"url":"git+https://github.com/aws/aws-cdk.git","type":"git","directory":"packages/@aws-cdk/aws-medialive-alpha"},"description":"The CDK construct library for MediaLive","maintainers":[{"name":"amzn-oss","email":"osa-3p@amazon.com"},{"name":"aws-cdk-team","email":"aws-cdk-dev@amazon.com"}],"readme":"# AWS::MediaLive Construct Library\n<!--BEGIN STABILITY BANNER-->\n\n---\n\n![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge)\n\n> The APIs of higher level constructs in this module are experimental and under active development.\n> They are subject to non-backward compatible changes or removal in any future version. These are\n> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be\n> announced in the release notes. This means that while you may use them, you may need to update\n> your source code when upgrading to a newer version of this package.\n\n---\n\n<!--END STABILITY BANNER-->\n\n## AWS Elemental MediaLive\n\nAWS Elemental MediaLive is a real-time video service that lets you create live outputs for broadcast and streaming delivery.\n\nThis package contains constructs for working with AWS Elemental MediaLive, including Inputs, Input Security Groups, Channels, and MediaLive Anywhere resources (Networks, Clusters, Channel Placement Groups, SDI Sources).\n\nFor further information on AWS Elemental MediaLive, see [the documentation](https://docs.aws.amazon.com/medialive/latest/ug/what-is.html). See [supported codecs per output group](https://docs.aws.amazon.com/medialive/latest/ug/outputs-supported-codecs.html).\n\nThe following example creates an SRT caller input, encodes it to H.264 + AAC, and outputs HLS segments to an S3 bucket:\n\n```ts\ndeclare const stack: Stack;\ndeclare const bucket: s3.IBucket;\n\nconst input = new medialive.Input(stack, 'SrtInput', {\n  inputName: 'my-srt-input',\n  input: medialive.InputConfiguration.srtCaller([{\n    srtListenerAddress: '203.0.113.10',\n    srtListenerPort: 5000,\n  }]),\n});\n\nconst video = medialive.EncodeConfiguration.video({\n  name: 'video_720p',\n  codec: medialive.VideoCodecSettings.h264({\n    rateControl: medialive.H264RateControl.cbr({ bitrate: Bitrate.mbps(3) }),\n    framerate: medialive.Framerate.FPS_30,\n  }),\n  width: 1280,\n  height: 720,\n});\n\nconst audio = medialive.EncodeConfiguration.audio({\n  name: 'audio_aac',\n  codec: medialive.AudioCodecSettings.aac({ bitrate: Bitrate.kbps(192) }),\n});\n\nnew medialive.Channel(stack, 'Channel', {\n  inputs: [{ input }],\n  outputGroups: [\n    medialive.OutputGroupConfiguration.hls({\n      name: 'hls',\n      destinations: [medialive.OutputDestination.toBucket(bucket, 'live/stream')],\n      outputs: [{ encodes: [video, audio], outputName: 'hls_out' }],\n    }),\n  ],\n});\n```\n\n## Input\n\nAn input represents the upstream source that feeds a MediaLive channel. Use `InputConfiguration` factory methods to create different input types.\n\n### SRT Caller\n\nMediaLive connects to a remote SRT listener:\n\n```ts\ndeclare const stack: Stack;\nnew medialive.Input(stack, 'SrtInput', {\n  inputName: 'srt-caller',\n  input: medialive.InputConfiguration.srtCaller([{\n    srtListenerAddress: '203.0.113.10',\n    srtListenerPort: 5000,\n  }]),\n});\n```\n\n### SRT Listener\n\nMediaLive listens for an incoming SRT connection. SRT listener inputs require an input security\ngroup. To receive encrypted content, supply a `decryption` block referencing a Secrets Manager\nsecret that holds the passphrase — the secret is passed by reference, so MediaLive resolves the ARN\nat synth time:\n\n```ts\ndeclare const stack: Stack;\ndeclare const passphrase: secretsmanager.ISecret;\n\nconst sg = new medialive.InputSecurityGroup(stack, 'SrtSg', {\n  allowlistRules: ['203.0.113.0/24'],\n});\n\nnew medialive.Input(stack, 'SrtListenerInput', {\n  inputName: 'srt-listener',\n  input: medialive.InputConfiguration.srtListener({\n    inputSecurityGroups: [sg],\n    minimumLatency: Duration.millis(500),\n    streamId: 'my-stream-id',\n    decryption: {\n      algorithm: medialive.SrtDecryptionAlgorithm.AES256,\n      passphraseSecret: passphrase,\n    },\n  }),\n});\n```\n\n### AWS Elemental MediaConnect Router\n\nCreates a MediaConnect Router Input with automatic encryption:\n\n```ts\ndeclare const stack: Stack;\nnew medialive.Input(stack, 'RouterInput', {\n  inputName: 'mc-router',\n  input: medialive.InputConfiguration.mediaConnectRouter(),\n});\n```\n\nAn input created this way is the only kind `@aws-cdk/aws-mediaconnect-alpha`'s `RouterOutputConfiguration.mediaLiveInput()` can deliver to — pointing it at any other input type synths but fails at deploy.\n\n### MP4 File from S3\n\nUse `InputSource.fromBucket()` to reference an S3 object:\n\n```ts\ndeclare const stack: Stack;\ndeclare const bucket: s3.IBucket;\n\nnew medialive.Input(stack, 'FileInput', {\n  inputName: 'mp4-file',\n  input: medialive.InputConfiguration.mp4File([\n    medialive.InputSource.fromBucket(bucket, 'media/input.mp4'),\n  ]),\n});\n```\n\n### Importing an Existing Input\n\n```ts\ndeclare const stack: Stack;\nconst input = medialive.Input.fromInputArn(stack, 'Imported',\n  'arn:aws:medialive:us-east-1:123456789012:input:1234567');\n```\n\n## Input Security Group\n\nAn input security group controls which IPv4 CIDR blocks can push content to a push-type input.\n\n```ts\ndeclare const stack: Stack;\nconst sg = new medialive.InputSecurityGroup(stack, 'SG', {\n  allowlistRules: ['203.0.113.0/24'],\n});\n```\n\n### Importing an Existing Input Security Group\n\n```ts\ndeclare const stack: Stack;\nconst sg = medialive.InputSecurityGroup.fromInputSecurityGroupArn(stack, 'Imported',\n  'arn:aws:medialive:us-east-1:123456789012:inputSecurityGroup:1234567');\n```\n\n## Channel\n\nA channel takes one or more inputs, encodes them, and produces output groups. If no `role` is provided, the channel auto-creates an IAM role with the `medialive.amazonaws.com` service principal.\n\nMinimal example — single input, single HLS output:\n\n```ts\ndeclare const stack: Stack;\ndeclare const input: medialive.IInput;\ndeclare const bucket: s3.IBucket;\n\nconst video = medialive.EncodeConfiguration.video({\n  name: 'video_720p',\n  codec: medialive.VideoCodecSettings.h264({\n    rateControl: medialive.H264RateControl.cbr({ bitrate: Bitrate.mbps(3) }),\n    framerate: medialive.Framerate.FPS_30,\n  }),\n  width: 1280,\n  height: 720,\n});\n\nconst audio = medialive.EncodeConfiguration.audio({\n  name: 'audio_aac',\n  codec: medialive.AudioCodecSettings.aac({ bitrate: Bitrate.kbps(192) }),\n});\n\nnew medialive.Channel(stack, 'Channel', {\n  inputs: [{ input }],\n  outputGroups: [\n    medialive.OutputGroupConfiguration.hls({\n      name: 'hls',\n      destinations: [medialive.OutputDestination.toBucket(bucket, 'live/stream')],\n      outputs: [{ encodes: [video, audio], outputName: 'hls_out' }],\n    }),\n  ],\n});\n```\n\n### STANDARD Channel with MediaPackage V2\n\nA STANDARD channel runs two pipelines for redundancy. Each output group needs two destinations — one per pipeline.\n\n```ts\ndeclare const stack: Stack;\ndeclare const input: medialive.IInput;\ndeclare const mpChannel: mediapackagev2.IChannel;\n\nconst hdVideo = medialive.EncodeConfiguration.video({\n  name: 'video_1080p',\n  codec: medialive.VideoCodecSettings.h265({\n    rateControl: medialive.H265RateControl.qvbr({\n      maxBitrate: Bitrate.mbps(8),\n      qvbrQualityLevel: 7,\n    }),\n    framerate: medialive.Framerate.FPS_30,\n  }),\n  width: 1920,\n  height: 1080,\n});\n\nconst sdVideo = medialive.EncodeConfiguration.video({\n  name: 'video_480p',\n  codec: medialive.VideoCodecSettings.h265({\n    rateControl: medialive.H265RateControl.qvbr({\n      maxBitrate: Bitrate.mbps(2),\n      qvbrQualityLevel: 7,\n    }),\n    framerate: medialive.Framerate.FPS_30,\n  }),\n  width: 854,\n  height: 480,\n});\n\nconst audio = medialive.EncodeConfiguration.audio({\n  name: 'audio_aac',\n  codec: medialive.AudioCodecSettings.aac({ bitrate: Bitrate.kbps(192) }),\n});\n\nnew medialive.Channel(stack, 'Channel', {\n  channelClass: medialive.ChannelClass.STANDARD,\n  inputs: [{ input }],\n  outputGroups: [\n    medialive.OutputGroupConfiguration.mediaPackageV2({\n      name: 'emp',\n      channel: mpChannel,\n      outputs: [\n        { encode: hdVideo, outputName: 'hd' },\n        { encode: sdVideo, outputName: 'sd' },\n        { encode: audio, outputName: 'audio' },\n      ],\n    }),\n  ],\n});\n```\n\n### Global Configuration\n\n`globalConfiguration` sets channel-wide behaviour: how the pipelines are locked together and the output timing source. All fields are optional and fall back to MediaLive defaults.\n\n```ts\ndeclare const stack: Stack;\ndeclare const input: medialive.IInput;\ndeclare const bucket: s3.IBucket;\ndeclare const video: medialive.EncodeConfiguration;\ndeclare const audio: medialive.EncodeConfiguration;\n\nnew medialive.Channel(stack, 'Channel', {\n  inputs: [{ input }],\n  timecodeConfig: {\n    source: medialive.TimecodeSource.EMBEDDED,\n  },\n  globalConfiguration: {\n    outputLocking: medialive.OutputLocking.epoch(),\n    outputTimingSource: medialive.OutputTimingSource.INPUT_CLOCK,\n  },\n  outputGroups: [\n    medialive.OutputGroupConfiguration.hls({\n      name: 'hls',\n      destinations: [medialive.OutputDestination.toBucket(bucket, 'live/stream')],\n      outputs: [{ encodes: [video, audio], outputName: 'hls_out' }],\n    }),\n  ],\n});\n```\n\n#### Output locking\n\n`outputLocking` synchronises the frames emitted by a channel's two pipelines. Pick a strategy with\nthe `OutputLocking` factory:\n\n- `OutputLocking.pipeline()` — synchronise each pipeline's output to the other. Choose how with\n  `method`: `PipelineLockingMethod.SOURCE_TIMECODE` (default, needs reliable embedded timecodes) or\n  `PipelineLockingMethod.VIDEO_ALIGNMENT` (visual content matching, no timecodes required).\n- `OutputLocking.epoch()` — synchronise to the Unix epoch (optionally a `customEpoch`/`jamSyncTime`).\n  Requires `outputTimingSource: OutputTimingSource.INPUT_CLOCK` (enforced at synth).\n- `OutputLocking.disabled()` — no synchronisation.\n\n```ts\n// Video-aligned pipeline locking — useful when sources lack reliable timecodes\nconst locking = medialive.OutputLocking.pipeline({\n  method: medialive.PipelineLockingMethod.VIDEO_ALIGNMENT,\n});\n```\n\n#### Input-loss behavior\n\n`inputLossBehavior` controls what MediaLive emits when the input is lost: a black period, then a\nrepeated frame, then either a solid colour or a slate image. Provide the slate as a\n[`FileLocation`](#file-locations).\n\n```ts\ndeclare const slateBucket: s3.IBucket;\n\nconst inputLoss: medialive.InputLossBehavior = {\n  blackFrame: Duration.seconds(1),\n  repeatFrame: Duration.seconds(5),\n  imageType: medialive.InputLossImageType.SLATE,\n  imageSlate: medialive.FileLocation.fromBucket(slateBucket, 'slates/offline.png'),\n};\n```\n\n## File locations\n\nSeveral channel features reference a file MediaLive reads at runtime — an input-loss slate, an\navail-blanking image, a blackout-slate image, or a burn-in caption font. These all take a\n`FileLocation`, created from an S3 bucket (which auto-grants the channel role read access) or a URL\n(with optional SSM-backed credentials):\n\n```ts\nimport { StringParameter } from 'aws-cdk-lib/aws-ssm';\n\ndeclare const bucket: s3.IBucket;\ndeclare const passwordParam: StringParameter;\n\n// From an S3 bucket — the channel role is granted read access automatically\nconst fromS3 = medialive.FileLocation.fromBucket(bucket, 'assets/slate.png');\n\n// From a URL with optional credentials (SSM parameter read access auto-granted)\nconst fromUrl = medialive.FileLocation.url('https://origin.example.com/font.ttf', {\n  username: 'ingest-user',\n  password: passwordParam,\n});\n```\n\n## Color correction\n\nA channel can apply one or more color-space conversions to its video, optionally using a 3D LUT\nto remap colors. Each `ColorCorrection` declares the `inputColorSpace` to match and the\n`outputColorSpace` to convert to. MediaLive reads the LUT from S3 at runtime, so it must be an S3\nlocation — provide it via `Lut.fromBucket()` (which uses the secure `s3ssl://` form and auto-grants\nthe channel role read access) or `Lut.url()` with an `s3://`/`s3ssl://` URL:\n\n```ts\ndeclare const stack: Stack;\ndeclare const bucket: s3.IBucket;\ndeclare const input: medialive.IInput;\ndeclare const video: medialive.EncodeConfiguration;\ndeclare const destination: medialive.OutputDestination;\n\nnew medialive.Channel(stack, 'Channel', {\n  inputs: [{ input }],\n  colorCorrections: [{\n    inputColorSpace: medialive.ColorSpace.REC_601,\n    outputColorSpace: medialive.ColorSpace.REC_709,\n    lut: medialive.Lut.fromBucket(bucket, 'luts/rec601-to-rec709.cube'),\n  }],\n  outputGroups: [\n    medialive.OutputGroupConfiguration.hls({\n      name: 'hls',\n      destinations: [destination],\n      outputs: [{ encodes: [video], outputName: 'video' }],\n    }),\n  ],\n});\n```\n\n## Encode Configuration\n\nUse `EncodeConfiguration.video()`, `EncodeConfiguration.audio()`, and `EncodeConfiguration.caption()` to define encodes.\n\n### Video\n\n```ts\n// H.264\nconst h264 = medialive.EncodeConfiguration.video({\n  name: 'h264_720p',\n  codec: medialive.VideoCodecSettings.h264({\n    rateControl: medialive.H264RateControl.cbr({ bitrate: Bitrate.mbps(3) }),\n    framerate: medialive.Framerate.FPS_30,\n    profile: medialive.H264Profile.HIGH,\n  }),\n  width: 1280,\n  height: 720,\n});\n\n// H.265\nconst h265 = medialive.EncodeConfiguration.video({\n  name: 'h265_1080p',\n  codec: medialive.VideoCodecSettings.h265({\n    rateControl: medialive.H265RateControl.qvbr({\n      maxBitrate: Bitrate.mbps(5),\n      qvbrQualityLevel: 7,\n    }),\n    framerate: medialive.Framerate.FPS_30,\n    profile: medialive.H265Profile.MAIN,\n    tier: medialive.H265Tier.HIGH,\n  }),\n  width: 1920,\n  height: 1080,\n});\n```\n\nVideo codecs accept optional overrides for adaptive quantization, scene-change detection, color space, and more. See the props interfaces for the full list:\n\n```ts\nconst hdr = medialive.EncodeConfiguration.video({\n  name: 'h265_hdr',\n  codec: medialive.VideoCodecSettings.h265({\n    rateControl: medialive.H265RateControl.qvbr({ maxBitrate: Bitrate.mbps(8), qvbrQualityLevel: 8 }),\n    framerate: medialive.Framerate.FPS_30,\n    sceneChangeDetect: medialive.H265SceneChangeDetect.ENABLED,\n    colorSpaceSettings: medialive.H265ColorSpaceSettings.hlg2020(),\n  }),\n  width: 1920,\n  height: 1080,\n});\n```\n\n### Audio\n\n```ts\n// AAC stereo\nconst aac = medialive.EncodeConfiguration.audio({\n  name: 'aac_stereo',\n  codec: medialive.AudioCodecSettings.aac({\n    bitrate: Bitrate.kbps(192),\n    codingMode: medialive.AacCodingMode.CODING_MODE_2_0,\n  }),\n});\n\n// AC3 5.1\nconst ac3 = medialive.EncodeConfiguration.audio({\n  name: 'ac3_surround',\n  codec: medialive.AudioCodecSettings.ac3({\n    bitrate: Bitrate.kbps(384),\n    codingMode: medialive.Ac3CodingMode.CODING_MODE_3_2_LFE,\n  }),\n});\n```\n\n### Caption\n\nA caption encode converts a source caption track (referenced by `captionSelectorName`) to an\noutput format via the `CaptionDestination` factory. One selector can feed multiple encodes:\n\n```ts\n// Define a caption selector on the input attachment (see Input Attachment Settings below)\nconst captionSelector = medialive.CaptionSelector.embedded('captions');\n\n// WebVTT captions — packaged alongside the video encode in the same output\nconst webvtt = medialive.EncodeConfiguration.caption({\n  name: 'eng_webvtt',\n  captionSelectorName: captionSelector.name,\n  languageCode: 'eng',\n  languageDescription: 'English',\n  destination: medialive.CaptionDestination.webvtt(),\n});\n\n// Burned-in captions — rendered into the video, styled via the burn-in options\nconst burnIn = medialive.EncodeConfiguration.caption({\n  name: 'eng_burnin',\n  captionSelectorName: captionSelector.name,\n  destination: medialive.CaptionDestination.burnIn({\n    alignment: medialive.CaptionAlignment.CENTERED,\n    fontColor: medialive.CaptionFontColor.WHITE,\n    outlineColor: medialive.CaptionOutlineColor.BLACK,\n    fontSize: medialive.CaptionFontSize.AUTO,\n  }),\n});\n```\n\n## Cross-service integrations\n\n| Destination | MediaLive side | Other side | Package |\n|---|---|---|---|\n| MediaPackage V2 | `medialive.OutputGroupConfiguration.mediaPackageV2()` | `mediapackagev2.Channel` | `@aws-cdk/aws-mediapackagev2-alpha` |\n| MediaConnect Router (output) | `medialive.OutputGroupConfiguration.mediaConnectRouter()` | `mediaconnect.RouterInputConfiguration.mediaLiveChannel()` | `@aws-cdk/aws-mediaconnect-alpha` |\n| MediaConnect Router (input) | `medialive.InputConfiguration.mediaConnectRouter()` | `mediaconnect.RouterOutputConfiguration.mediaLiveInput()` | `@aws-cdk/aws-mediaconnect-alpha` |\n\n### AWS Elemental MediaPackage V2\n\nUse `mediaPackageV2()` and pass a single `channel` — MediaLive maps each pipeline to a MediaPackage ingest endpoint automatically (one for `SINGLE_PIPELINE`, both for `STANDARD`). Each output contains a single encode (one track per output).\n\nIn-band captions (burn-in, embedded) ride alongside a video encode via the `captions` prop:\n\n```ts\ndeclare const mpChannel: mediapackagev2.IChannel;\ndeclare const hdVideo: medialive.EncodeConfiguration;\ndeclare const sdVideo: medialive.EncodeConfiguration;\ndeclare const audio: medialive.EncodeConfiguration;\ndeclare const burnIn: medialive.EncodeConfiguration;\n\nmedialive.OutputGroupConfiguration.mediaPackageV2({\n  name: 'emp',\n  channel: mpChannel,\n  outputs: [\n    { encode: hdVideo, captions: [burnIn], outputName: 'hd' },\n    { encode: sdVideo, outputName: 'sd' },\n    { encode: audio, outputName: 'audio' },\n  ],\n});\n```\n\nFor per-pipeline control — for example pinning pipeline 0 to a specific endpoint, or delivering each pipeline to a different (cross-region) channel — use `mediaPackageV2PerPipeline()` with explicit destinations:\n\n```ts\ndeclare const primary: mediapackagev2.IChannel;\ndeclare const hdVideo: medialive.EncodeConfiguration;\n\nmedialive.OutputGroupConfiguration.mediaPackageV2PerPipeline({\n  name: 'emp',\n  destinations: [\n    // destinations[0] → Pipeline 0, destinations[1] → Pipeline 1\n    medialive.MediaPackageV2Destination.channel(primary, medialive.MediaPackageV2EndpointId.ENDPOINT_2),\n    medialive.MediaPackageV2Destination.channel(primary, medialive.MediaPackageV2EndpointId.ENDPOINT_1),\n  ],\n  outputs: [\n    { encode: hdVideo, outputName: 'hd' },\n  ],\n});\n```\n\n### HLS\n\nUse `OutputDestination.url()` for HTTP origins or `OutputDestination.toBucket()` for S3:\n\n```ts\ndeclare const bucket: s3.IBucket;\ndeclare const video: medialive.EncodeConfiguration;\ndeclare const audio: medialive.EncodeConfiguration;\n\n// HLS to S3\nmedialive.OutputGroupConfiguration.hls({\n  name: 'hls_s3',\n  destinations: [medialive.OutputDestination.toBucket(bucket, 'live/stream')],\n  outputs: [{ encodes: [video, audio], outputName: 'hls_out' }],\n});\n\n// HLS to an HTTPS CDN origin.\nmedialive.OutputGroupConfiguration.hls({\n  name: 'hls-http',\n  destinations: [medialive.OutputDestination.url('https://203.0.113.10/ingest/stream')],\n  hlsCdnSettings: medialive.HlsCdnSettings.basicPut(),\n  outputs: [{ encodes: [video, audio], outputName: 'hls_out' }],\n});\n```\n\n### Archive\n\nArchive outputs write long-form recordings to S3:\n\n```ts\ndeclare const bucket: s3.IBucket;\ndeclare const video: medialive.EncodeConfiguration;\ndeclare const audio: medialive.EncodeConfiguration;\n\nmedialive.OutputGroupConfiguration.archive({\n  name: 'archive',\n  destinations: [medialive.S3OutputDestination.toBucket(bucket, 'archive/recording')],\n  rolloverInterval: Duration.seconds(600),\n  outputs: [{ encodes: [video, audio], outputName: 'archive_out' }],\n});\n```\n\n### RTMP\n\nRTMP outputs support H.264 + AAC only. Each output takes one destination per channel pipeline (the console's \"Destination A\" / \"Destination B\") via `RtmpDestination.url()` — one for `SINGLE_PIPELINE`, two for `STANDARD`:\n\n```ts\ndeclare const video: medialive.EncodeConfiguration;\ndeclare const audio: medialive.EncodeConfiguration;\n\nmedialive.OutputGroupConfiguration.rtmp({\n  name: 'social',\n  outputs: [{\n    encodes: [video, audio],\n    outputName: 'live',\n    destinations: [\n      medialive.RtmpDestination.url('rtmp://rtmp.example.com/live', 'your-stream-key'),\n    ],\n  }],\n});\n```\n\n### SRT\n\nSRT outputs use `SrtDestination.caller()` for caller mode or `SrtDestination.listener()` for listener mode. When you already have a full SRT URL rather than a separate host and port, use `SrtDestination.callerUrl()`. SRT output is always encrypted, so every destination takes an `encryptionPassphraseSecret` (a Secrets Manager secret). Each output takes one destination per channel pipeline (\"Destination A\"/\"Destination B\") — one for `SINGLE_PIPELINE`, two for `STANDARD`:\n\n```ts\ndeclare const video: medialive.EncodeConfiguration;\ndeclare const audio: medialive.EncodeConfiguration;\ndeclare const passphrase: secretsmanager.ISecret;\n\n// SRT caller to a remote listener\nmedialive.OutputGroupConfiguration.srt({\n  name: 'srt_out',\n  outputs: [{\n    encodes: [video, audio],\n    outputName: 'srt_caller',\n    destinations: [medialive.SrtDestination.caller({\n      address: '203.0.113.20',\n      port: 5000,\n      encryptionPassphraseSecret: passphrase,\n    })],\n  }],\n});\n\n// SRT listener — MediaLive waits for the downstream system to connect\nmedialive.OutputGroupConfiguration.srt({\n  name: 'srt_listen',\n  outputs: [{\n    encodes: [video, audio],\n    outputName: 'srt_listener',\n    destinations: [medialive.SrtDestination.listener({\n      listenerPort: 5000,\n      encryptionPassphraseSecret: passphrase,\n    })],\n  }],\n});\n```\n\n### AWS Elemental MediaConnect Router\n\n`mediaConnectRouter()` delivers each channel pipeline to an AWS Elemental MediaConnect Router. Transit encryption defaults to AUTOMATIC; CDK derives one destination per pipeline from the channel class, so the common case needs no per-pipeline configuration. You must specify `availabilityZones` — exactly one for a `SINGLE_PIPELINE` channel, or two (one per pipeline) for `STANDARD`. The downstream wiring — which router input each pipeline feeds — is configured on the MediaConnect side, referencing this group's output by name and pipeline id.\n\n```ts\ndeclare const video: medialive.EncodeConfiguration;\ndeclare const audio: medialive.EncodeConfiguration;\ndeclare const passphrase: secretsmanager.ISecret;\ndeclare const passphrase1: secretsmanager.ISecret;\n\n// AUTOMATIC encryption on every pipeline (MPEG-TS container, like UDP)\nmedialive.OutputGroupConfiguration.mediaConnectRouter({\n  name: 'router_out',\n  availabilityZones: ['us-east-1a'],\n  outputs: [{ encodes: [video, audio], outputName: 'router_ts' }],\n});\n\n// One shared Secrets Manager passphrase across all pipelines (SECRETS_MANAGER encryption)\nmedialive.OutputGroupConfiguration.mediaConnectRouter({\n  name: 'router_out',\n  availabilityZones: ['us-east-1a'],\n  routerSettings: medialive.MediaConnectRouterSettings.shared({ encryptionSecret: passphrase }),\n  outputs: [{ encodes: [video, audio], outputName: 'router_ts' }],\n});\n\n// Distinct encryption per pipeline — an omitted pipeline stays AUTOMATIC (STANDARD channels)\nmedialive.OutputGroupConfiguration.mediaConnectRouter({\n  name: 'router_out',\n  availabilityZones: ['us-east-1a', 'us-east-1b'],\n  routerSettings: medialive.MediaConnectRouterSettings.perPipeline({\n    pipeline1: { encryptionSecret: passphrase1 },\n  }),\n  outputs: [{ encodes: [video, audio], outputName: 'router_ts' }],\n});\n```\n\nWhen a passphrase secret is supplied, the channel's IAM role is automatically granted read access to it.\n\n### UDP\n\nUDP outputs deliver MPEG-TS over UDP or RTP. Use `UdpOutputDestination.udp()` for plain UDP or `.rtp()` for RTP (required if using FEC):\n\n```ts\ndeclare const video: medialive.EncodeConfiguration;\ndeclare const audio: medialive.EncodeConfiguration;\n\nmedialive.OutputGroupConfiguration.udp({\n  name: 'udp_out',\n  destinations: [medialive.UdpOutputDestination.udp({ address: '203.0.113.5', port: 5000 })],\n  outputs: [{ encodes: [video, audio], outputName: 'ts_out' }],\n});\n```\n\n### Frame Capture\n\nFrame capture outputs write periodic JPEG snapshots to S3:\n\n```ts\ndeclare const bucket: s3.IBucket;\ndeclare const video: medialive.EncodeConfiguration;\n\nmedialive.OutputGroupConfiguration.frameCapture({\n  name: 'thumbnails',\n  destinations: [medialive.S3OutputDestination.toBucket(bucket, 'thumbnails/live')],\n  outputs: [{ encodes: [video], outputName: 'thumb' }],\n});\n```\n\n### Microsoft Smooth Streaming\n\nMS Smooth outputs push fragmented MP4 to an IIS Smooth Streaming endpoint:\n\n```ts\ndeclare const video: medialive.EncodeConfiguration;\ndeclare const audio: medialive.EncodeConfiguration;\n\nmedialive.OutputGroupConfiguration.msSmooth({\n  name: 'smooth',\n  destinations: [medialive.OutputDestination.url('https://smooth.example.com/live')],\n  outputs: [{ encodes: [video, audio], outputName: 'smooth_out' }],\n});\n```\n\n### Per-output HLS settings\n\nHLS outputs accept per-output `hlsSettings` via the `HlsSettings` factory — `standard()` for a video\nrendition (with optional `M3u8Settings` for the transport stream), `audioOnly()` for an audio\nrendition (with optional cover art as a [`FileLocation`](#file-locations)), `fmp4()`, or\n`frameCapture()`.\n\n```ts\ndeclare const bucket: s3.IBucket;\ndeclare const video: medialive.EncodeConfiguration;\ndeclare const audio: medialive.EncodeConfiguration;\n\nmedialive.OutputGroupConfiguration.hls({\n  name: 'hls',\n  destinations: [medialive.OutputDestination.toBucket(bucket, 'live/stream')],\n  outputs: [\n    {\n      encodes: [video],\n      outputName: 'video',\n      hlsSettings: medialive.HlsSettings.standard({\n        m3u8Settings: medialive.M3u8Settings.of({\n          scte35Behavior: medialive.M3u8Scte35Behavior.PASSTHROUGH,\n          programNum: 1,\n        }),\n      }),\n    },\n    {\n      encodes: [audio],\n      outputName: 'audio',\n      hlsSettings: medialive.HlsSettings.audioOnly({\n        audioGroupId: 'program',\n        audioOnlyImage: medialive.FileLocation.fromBucket(bucket, 'art/cover.png'),\n      }),\n    },\n  ],\n});\n```\n\n### Forward Error Correction (UDP)\n\nUDP outputs accept optional `fec` settings (SMPTE 2022-1) — column-only or column-and-row FEC.\nFEC requires an `rtp://` destination:\n\n```ts\ndeclare const video: medialive.EncodeConfiguration;\n\nmedialive.OutputGroupConfiguration.udp({\n  name: 'udp',\n  destinations: [medialive.UdpOutputDestination.rtp({ address: '203.0.113.5', port: 5000 })],\n  outputs: [{\n    encodes: [video],\n    outputName: 'ts',\n    fec: { mode: medialive.FecMode.COLUMN_AND_ROW, columnDepth: 10, rowLength: 10 },\n  }],\n});\n```\n\n### MPEG-TS Container Settings\n\nThe MPEG-TS output groups — `udp()`, `archive()`, `srt()`, and `mediaConnectRouter()` — accept optional per-output `m2tsSettings` via `M2tsSettings.of()`. Omit it to use MediaLive's service defaults. Bitrates use `Bitrate`, intervals use `Duration`, and closed-value fields use enums (e.g. `M2tsRateMode`, `M2tsScte35Control`); PID fields are strings that accept decimal, hexadecimal, ranges, or comma-separated lists.\n\n```ts\ndeclare const video: medialive.EncodeConfiguration;\ndeclare const audio: medialive.EncodeConfiguration;\n\nmedialive.OutputGroupConfiguration.udp({\n  name: 'udp_out',\n  destinations: [medialive.UdpOutputDestination.udp({ address: '203.0.113.5', port: 5000 })],\n  outputs: [{\n    encodes: [video, audio],\n    outputName: 'ts',\n    m2tsSettings: medialive.M2tsSettings.of({\n      bitrate: Bitrate.mbps(8),\n      rateMode: medialive.M2tsRateMode.VBR,\n      programNum: 1,\n      patInterval: Duration.millis(100),\n      pmtInterval: Duration.millis(100),\n      scte35Control: medialive.M2tsScte35Control.PASSTHROUGH,\n      dvbSdtSettings: {\n        outputSdt: medialive.DvbSdtOutputMode.SDT_MANUAL,\n        serviceName: 'My Service',\n        repInterval: Duration.millis(2000),\n      },\n    }),\n  }],\n});\n```\n\n## Destinations\n\nEach output group type uses a specific destination class. Destinations are created via static factory methods:\n\n| Destination class | Factory methods | Used by |\n|---|---|---|\n| `OutputDestination` | `url()`, `toBucket()` | HLS, MS Smooth, CMAF Ingest |\n| `S3OutputDestination` | `url()`, `toBucket()` | Archive, Frame Capture |\n| `UdpOutputDestination` | `udp()`, `rtp()`, `url()` | UDP |\n| `MediaPackageV2Destination` | `channel()` | MediaPackage V2 |\n| `RtmpDestination` | `url()` | RTMP |\n| `SrtDestination` | `caller()`, `callerUrl()`, `listener()` | SRT |\n\n`OutputDestination.toBucket()` (and `S3OutputDestination.toBucket()`) build canonical `s3ssl://` URLs and automatically grant the channel's IAM role the required S3 permissions; `InputSource.fromBucket()` does the same for input reads. `MediaPackageV2Destination.channel()` automatically grants ingest permissions on the MediaPackage V2 channel.\n\nThe MediaConnect Router output group has no destination class — its delivery is configured on the MediaConnect side. Per-pipeline transit encryption is set via the group's `routerSettings` prop using `MediaConnectRouterSettings.shared()` / `.perPipeline()` (see [MediaConnect Router](#mediaconnect-router) above).\n\n## Additional Destinations\n\nMediaPackage V2 and CMAF Ingest output groups support `additionalDestinations` for cross-region delivery or backup packaging. These are separate from pipeline redundancy — they fan out the same content to extra endpoints.\n\nThe region for each destination is resolved automatically from the channel's stack. For cross-region imports, pass the region explicitly:\n\n```ts\ndeclare const primaryChannel: mediapackagev2.IChannel;\ndeclare const video: medialive.EncodeConfiguration;\ndeclare const audio: medialive.EncodeConfiguration;\n\n// Import a channel from another region — the region travels with the channel\nconst backupChannel = mediapackagev2.Channel.fromChannelAttributes(this, 'BackupChannel', {\n  channelName: 'backup-channel',\n  channelGroupName: 'backup-group',\n  region: 'us-west-2',\n});\n\nmedialive.OutputGroupConfiguration.mediaPackageV2({\n  name: 'emp',\n  channel: primaryChannel,\n  additionalDestinations: [\n    // Cross-region: the destination picks up us-west-2 from the imported channel\n    medialive.MediaPackageV2Destination.channel(backupChannel, medialive.MediaPackageV2EndpointId.ENDPOINT_1),\n  ],\n  outputs: [\n    { encode: video, outputName: 'video' },\n    { encode: audio, outputName: 'audio' },\n  ],\n});\n```\n\n## Pipeline Redundancy\n\nChannels default to `SINGLE_PIPELINE`. Set `channelClass: ChannelClass.STANDARD` for two-pipeline redundancy.\n\nWhen using STANDARD:\n\n- Each output group's `destinations` array must have two entries — `destinations[0]` maps to Pipeline 0, `destinations[1]` maps to Pipeline 1.\n- For MediaPackage V2, use `ENDPOINT_1` for Pipeline 0 and `ENDPOINT_2` for Pipeline 1.\n- `additionalDestinations` are separate from pipeline redundancy — they fan out to extra endpoints.\n\n```ts\ndeclare const stack: Stack;\ndeclare const input: medialive.IInput;\ndeclare const bucket: s3.IBucket;\ndeclare const video: medialive.EncodeConfiguration;\ndeclare const audio: medialive.EncodeConfiguration;\n\nnew medialive.Channel(stack, 'StandardChannel', {\n  channelClass: medialive.ChannelClass.STANDARD,\n  inputs: [{ input }],\n  outputGroups: [\n    medialive.OutputGroupConfiguration.hls({\n      name: 'hls',\n      destinations: [\n        medialive.OutputDestination.toBucket(bucket, 'live/pipeline0'),\n        medialive.OutputDestination.toBucket(bucket, 'live/pipeline1'),\n      ],\n      outputs: [{ encodes: [video, audio], outputName: 'hls_out' }],\n    }),\n  ],\n});\n```\n\n## Input Attachment Settings\n\nEach entry in `inputs` is an input attachment, which can carry per-input extraction and connection\nsettings beyond the input itself.\n\n**Selectors** pick specific tracks out of the input. Use `AudioSelector` (`byLanguage()`, `byPid()`,\n`byTrack()`, `hlsRendition()`, `default()`), `CaptionSelector` (`byLanguage()`, `embedded()`,\n`ancillary()`, `dvbSub()`, `scte27()`, `teletext()`, `arib()`), and `videoSelector` (color space,\nHDR10 metadata, and program/PID selection via `VideoSelection`). A caption encode then references a\ncaption selector by name.\n\n```ts\ndeclare const stack: Stack;\ndeclare const input: medialive.IInput;\ndeclare const bucket: s3.IBucket;\ndeclare const video: medialive.EncodeConfiguration;\n\nnew medialive.Channel(stack, 'Channel', {\n  inputs: [{\n    input,\n    audioSelectors: [\n      medialive.AudioSelector.byLanguage('eng', 'eng', medialive.AudioLanguageSelectionPolicy.STRICT),\n    ],\n    captionSelectors: [\n      medialive.CaptionSelector.embedded('embedded'),\n    ],\n    videoSelector: {\n      colorSpace: medialive.VideoColorSpace.HDR10,\n      colorSpaceUsage: medialive.VideoColorSpaceUsage.FORCE,\n      selectBy: medialive.VideoSelection.byProgramId(1),\n    },\n  }],\n  outputGroups: [\n    medialive.OutputGroupConfiguration.hls({\n      name: 'hls',\n      destinations: [medialive.OutputDestination.toBucket(bucket, 'live/stream')],\n      outputs: [{ encodes: [video], outputName: 'hls_out' }],\n    }),\n  ],\n});\n```\n\n**Network input settings** apply to URL-pull and multicast inputs — HLS bandwidth/buffer/retry\nbehaviour, the SCTE-35 source (`HlsScte35Source.SEGMENTS` or `MANIFEST`), HTTPS server validation,\nand a multicast source IP for source-specific multicast. `logicalInterfaceNames` maps the input to\nnetwork interfaces on MediaLive Anywhere nodes.\n\n```ts\ndeclare const stack: Stack;\ndeclare const input: medialive.IInput;\ndeclare const bucket: s3.IBucket;\ndeclare const video: medialive.EncodeConfiguration;\n\nnew medialive.Channel(stack, 'Channel', {\n  inputs: [{\n    input,\n    networkInputSettings: {\n      serverValidation: medialive.ServerValidation.CHECK_CRYPTOGRAPHY_AND_VALIDATE_NAME,\n      hlsInputSettings: {\n        bandwidth: Bitrate.mbps(5),\n        scte35Source: medialive.HlsScte35Source.MANIFEST,\n      },\n    },\n    logicalInterfaceNames: ['eth0', 'eth1'],\n  }],\n  outputGroups: [\n    medialive.OutputGroupConfiguration.hls({\n      name: 'hls',\n      destinations: [medialive.OutputDestination.toBucket(bucket, 'live/stream')],\n      outputs: [{ encodes: [video], outputName: 'hls_out' }],\n    }),\n  ],\n});\n```\n\n## Automatic Input Failover\n\nAutomatic input failover gives you input-*source* redundancy: attach a secondary input, and\nMediaLive switches to it without restarting the channel when the active input meets a failover\ncondition. This is separate from the pipeline redundancy of `ChannelClass.STANDARD` (which\nduplicates a single source across two pipelines).\n\nProvide `automaticInputFailover` on the input attachment. If you don't specify conditions, a\nsingle input-loss condition is used:\n\n```ts\ndeclare const stack: Stack;\ndeclare const primaryInput: medialive.IInput;\ndeclare const secondaryInput: medialive.IInput;\ndeclare const audioSelector: medialive.AudioSelector;\ndeclare const video: medialive.EncodeConfiguration;\ndeclare const audio: medialive.EncodeConfiguration;\ndeclare const bucket: s3.IBucket;\n\nnew medialive.Channel(stack, 'Channel', {\n  inputs: [{\n    input: primaryInput,\n    automaticInputFailover: {\n      secondaryInput,\n      inputPreference: medialive.InputPreference.PRIMARY_INPUT_PREFERRED,\n      errorClearTime: Duration.seconds(3),\n      failoverConditions: [\n        medialive.FailoverCondition.inputLoss({ threshold: Duration.millis(1500) }),\n        medialive.FailoverCondition.audioSilence({ audioSelector, threshold: Duration.seconds(2) }),\n        medialive.FailoverCondition.videoBlack({ blackDetectThreshold: 0.1, threshold: Duration.seconds(1) }),\n      ],\n    },\n  }, {\n    // The secondary input must also be attached to the channel as its own input.\n    input: secondaryInput,\n  }],\n  outputGroups: [\n    medialive.OutputGroupConfiguration.hls({\n      name: 'hls',\n      destinations: [medialive.OutputDestination.toBucket(bucket, 'live/stream')],\n      outputs: [{ encodes: [video, audio], outputName: 'hls_out' }],\n    }),\n  ],\n});\n```\n\nThe primary and secondary inputs must have the same input class. The channel's IAM role is\ngranted read access to the secondary input's sources automatically, just like the primary.\n\n## Ad Avail Handling\n\nMediaLive can blank content during ad avails, insert blackout slates, and signal SCTE-35 ad avails\nto downstream systems. These are all channel-level props.\n\n`availBlanking` replaces video/audio/captions with black (or an image) during an ad avail, and\n`blackoutSlate` shows a slate when a SCTE-35 blackout is signalled. Both image fields take a\n[`FileLocation`](#file-locations).\n\n```ts\ndeclare const stack: Stack;\ndeclare const input: medialive.IInput;\ndeclare const bucket: s3.IBucket;\ndeclare const video: medialive.EncodeConfiguration;\n\nnew medialive.Channel(stack, 'Channel', {\n  inputs: [{ input }],\n  availBlanking: {\n    state: medialive.AvailBlankingState.ENABLED,\n    image: medialive.FileLocation.fromBucket(bucket, 'slates/avail.png'),\n  },\n  blackoutSlate: {\n    state: medialive.BlackoutSlateState.ENABLED,\n    image: medialive.FileLocation.fromBucket(bucket, 'slates/blackout.png'),\n  },\n  outputGroups: [\n    medialive.OutputGroupConfiguration.hls({\n      name: 'hls',\n      destinations: [medialive.OutputDestination.toBucket(bucket, 'live/stream')],\n      outputs: [{ encodes: [video], outputName: 'hls_out' }],\n    }),\n  ],\n});\n```\n\n`availSettings` selects how SCTE-35 ad avails are handled — `AvailSettings.spliceInsert()`,\n`AvailSettings.timeSignalApos()`, or `AvailSettings.esam()` for Event Signaling and Management\nagainst an external POIS endpoint. `scte35SegmentationScope` controls which output groups receive\nthe segmentation cues. The ESAM POIS password is supplied as an SSM parameter, and the channel role\nis granted read access to it automatically.\n\n```ts\nimport { StringParameter } from 'aws-cdk-lib/aws-ssm';\n\ndeclare const stack: Stack;\ndeclare const input: medialive.IInput;\ndeclare const bucket: s3.IBucket;\ndeclare const video: medialive.EncodeConfiguration;\ndeclare const poisPassword: StringParameter;\n\nnew medialive.Channel(stack, 'Channel', {\n  inputs: [{ input }],\n  availSettings: medialive.AvailSettings.esam({\n    pois: {\n      url: 'https://pois.example.com/esam',\n      username: 'pois-user',\n      password: poisPassword,\n    },\n    acquisitionPointId: 'acquisition-point-1',\n    adAvailOffset: Duration.millis(200),\n  }),\n  scte35SegmentationScope: medialive.Scte35SegmentationScope.SCTE35_ENABLED_OUTPUT_GROUPS,\n  outputGroups: [\n    medialive.OutputGroupConfiguration.hls({\n      name: 'hls',\n      destinations: [medialive.OutputDestination.toBucket(bucket, 'live/stream')],\n      outputs: [{ encodes: [video], outputName: 'hls_out' }],\n    }),\n  ],\n});\n```\n\n## Auto-Created Role and Grants\n\nWhen no `role` is provided, the channel auto-creates an IAM role with the `medialive.amazonaws.com` service principal and grants it only the permissions your configuration actually needs. These automatic grants apply **only** to the channel-managed role; if you bring your own `role`, none are added.\n\n**Channel role grants** — wired based on what you configure (channel-managed role only):\n\n| Configuration | Grant | Scope |\n|---|---|---|\n| `OutputDestination.toBucket()` | S3 read/write | The destination bucket/prefix |\n| `InputSource.fromBucket()` | S3 read | The input source bucket/prefix |\n| `MediaPackageV2Destination.channel()` | `mediapackagev2:PutObject` | The MediaPackage V2 channel |\n| `SrtDestination` with an encryption secret | Secrets Manager read | The secret |\n| URL pull input with a password parameter | SSM parameter read | The parameter |\n| Thumbnails (on by default) | `s3:PutObject` | `*` — uploads to an AWS service-owned bucket |\n| Channel logging (`logLevel` set) | CloudWatch Logs write | The `ElementalMediaLive` log group in your account/region |\n| VPC output (`vpc` set) | EC2 ENI create/delete + describe | Scoped to your subnets/SGs; `Describe*` requires `*` |\n\n**Input role grants** — separate from the channel role, used at input create/delete time. Like the channel role, these are added only when the input auto-creates its role; pass a `role` to `mediaConnect()` or `cdi()` and no grants are added:\n\n| Input type | Grant | Scope |\n|---|---|---|\n| `InputConfiguration.mediaConnect()` | `mediaconnect:ManagedDescribeFlow`, `ManagedAddOutput`, `ManagedRemoveOutput` | `*` — service rejects flow-scoped grants |\n| `InputConfiguration.cdi()` | EC2 ENI create/delete + describe | Scoped to your subnets/SGs; `Describe*` requires `*` |\n\nBoth channel and input auto-created roles include confused-deputy prevention (`aws:SourceAccount` + `aws:SourceArn` conditions). For the full list of trusted-entity requirements, see [the documentation](https://docs.aws.amazon.com/medialive/latest/ug/trusted-entity-requirements.html).\n\nThe auto-created role is available on `channel.role` if you need to add further permissions.\n\n### Bringing your pre-defined role\n\nWhen you pass a `role`, the channel makes **no** automatic grants — you will need to add the permissions that role needs. That covers both the principal policy and any referenced resource policies: S3 output destinations and input sources, Secrets Manager and SSM reads, MediaPackage V2 ingest, CloudWatch Logs, and VPC output ENI management. See the [trusted-entity requirements](https://docs.aws.amazon.com/medialive/latest/ug/trusted-entity-requirements.html), or pass the account's `MediaLiveAccessRole` — an IAM role that MediaLive can assume.\n\n## CloudWatch Metrics\n\nChannels expose CloudWatch metric helpers in the `AWS/MediaLive` namespace, dimensioned by `ChannelId` and `Pipeline`. Use the named helpers below for the most common metrics, or `metric(metricName, pipeline)` to access any metric documented by the [MediaLive metrics reference](https://docs.aws.amazon.com/medialive/latest/ug/monitoring-eml-metrics.html).\n\nMediaLive publishes metrics per pipeline. Every helper takes a `Pipeline` argument so you make an explicit decision about which pipeline you're monitoring. `STANDARD` channels run two redundant pipelines (`PIPELINE_0`, `PIPELINE_1`) — alarm on both to cover the full channel. `SINGLE_PIPELINE` channels only publish on `PIPELINE_0`; passing `PIPELINE_1` throws at synth time.\n\n```ts\ndeclare const channel: medialive.Channel;\ndeclare const stack: Stack;\n\nchannel.metricDroppedFrames(medialive.Pipeline.PIPELINE_0).createAlarm(stack, 'DroppedFrames', {\n  threshold: 1,\n  evaluationPeriods: 2,\n});\n\nchannel.metricSvqTime(medialive.Pipeline.PIPELINE_0).createAlarm(stack, 'SvqTime', {\n  threshold: 0,\n  evaluationPeriods: 1,\n});\n\n// Custom metric by name with sum statistic\nchannel.metric('Output4xxErrors', medialive.Pipeline.PIPELINE_0, { statistic: 'sum' });\n```\n\nFor STANDARD channels, alarm on both pipelines:\n\n```ts\ndeclare const standardChannel: medialive.Channel;\ndeclare const stack: Stack;\n\nstandardChannel.metricDroppedFrames(medialive.Pipeline.PIPELINE_0).createAlarm(stack, 'Drops0', {\n  threshold: 1,\n  evaluationPeriods: 2,\n});\nstandardChannel.metricDroppedFrames(medialive.Pipeline.PIPELINE_1).createAlarm(stack, 'Drops1', {\n  threshold: 1,\n  evaluationPeriods: 2,\n});\n```\n\n### Channel metrics\n\n| Helper | Metric name | Default statistic | Notes |\n|---|---|---|---|\n| `metricActiveAlerts(pipeline)` | `ActiveAlerts` | Max | Total active alerts on the channel |\n| `metricNetworkIn(pipeline)` | `NetworkIn` | Avg | Inbound traffic in Mbps |\n| `metricNetworkOut(pipeline)` | `NetworkOut` | Avg | Outbound traffic in Mbps |\n| `metricInputVideoFrameRate(pipeline)` | `InputVideoFrameRate` | Max | Source video frame rate |\n| `metricFillMsec(pipeline)` | `FillMsec` | Max | Time filled with fill frames — non-zero indicates input loss |\n| `metricInputLossSeconds(pipeline)` | `InputLossSeconds` | Sum | Seconds without packets (RTP / MediaConnect inputs) |\n| `metricDroppedFrames(pipeline)` | `DroppedFrames` | Sum | Frames dropped because the encoder fell behind |\n| `metricSvqTime(pipeline)` | `SvqTime` | Max | Percent of time MediaLive reduced quality to keep up |\n| `metric(name, pipeline, props?)` | (custom) | (caller-provided) | Build any metric in `AWS/MediaLive` |\n\nThe defaults match the AWS-recommended statistic for each metric. Pass `props` to override statistic, period, dimensions, or any other `MetricOptions` field.\n\n## MediaLive Anywhere\n\nMediaLive Anywhere lets you run MediaLive channels on your own on-premises hardware.\n\nCertain input types are only available with Anywhere channels (channels configured with `anywhereSettings`):\nSDI, SMPTE 2110 Receiver Group, and Multicast. Attempting to use these input types on a cloud channel will throw a validation error at synth time.\n\n### Network\n\nA network defines IP address pools and routes for Anywhere resources:\n\n```ts\ndeclare const stack: Stack;\nconst network = new medialive.Network(stack, 'Network', {\n  networkName: 'on-prem-network',\n  ipPools: ['10.0.0.0/24'],\n  routes: [{ cidr: '0.0.0.0/0', gateway: '10.0.0.1' }],\n});\n```\n\n### Cluster\n\nA cluster represents a group of on-premises hardware nodes:\n\n```ts\ndeclare const stack: Stack;\ndeclare const instanceRole: iam.IRole;\n\nconst cluster = new medialive.Cluster(stack, 'Cluster', {\n  clusterName: 'on-prem-cluster',\n  clusterType: medialive.ClusterType.ON_PREMISES,\n  instanceRole,\n});\n```\n\n### Channel Placement Group\n\nA channel placement group assigns channels to specific nodes within a cluster. Associate it with a channel via `anywhereSettings`:\n\n```ts\ndeclare const stack: Stack;\ndeclare const cluster: medialive.ICluster;\ndeclare const input: medialive.IInput;\ndeclare const video: medialive.EncodeConfiguration;\ndeclare const bucket: s3.IBucket;\n\nconst cpg = new medialive.ChannelPlacementGroup(stack, 'CPG', {\n  channelPlacementGroupName: 'my-cpg',\n  cluster,\n});\n\nnew medialive.Channel(stack, 'AnywhereChannel', {\n  inputs: [{ input }],\n  anywhereSettings: { cluster, channelPlacementGroup: cpg },\n  outputGroups: [\n    medialive.OutputGroupConfiguration.hls({\n      name: 'hls',\n      destinations: [medialive.OutputDestination.toBucket(bucket, 'live/stream')],\n      outputs: [{ encodes: [video], outputName: 'hls_out' }],\n    }),\n  ],\n});\n```\n\n### SDI Source\n\nAn SDI source represents a physical SDI input on Anywhere hardware:\n\n```ts\ndeclare const stack: Stack;\nconst sdi = new medialive.SdiSource(stack, 'Sdi', {\n  sdiSourceName: 'camera-1',\n  type: medialive.SdiType.SINGLE,\n});\n```\n\n### On-premises input networking\n\nFor inputs that live in an on-premises network, set `inputNetworkLocation` to\n`InputNetworkLocation.ON_PREMISES`. On-premises inputs do not use input security groups. Push\ninputs (RTMP/RTP/UDP) can pin their destination to a `Network`, declare the `networkRoutes` to\nreach it on the local network, and request a `staticIpAddress`:\n\n```ts\ndeclare const stack: Stack;\n\nconst network = new medialive.Network(stack, 'Network', {\n  networkName: 'on-prem-network',\n  ipPools: ['192.168.1.0/24'],\n});\n\nnew medialive.Input(stack, 'OnPremInput', {\n  inputName: 'on-prem-rtp',\n  inputNetworkLocation: medialive.InputNetworkLocation.ON_PREMISES,\n  input: medialive.InputConfiguration.rtpPush({\n    destinations: [{\n      network,\n      networkRoutes: [{ cidr: '10.0.0.0/24', gateway: '10.0.0.1' }],\n      staticIpAddress: '192.168.1.50',\n    }],\n  }),\n});\n```\n\nSRT listener inputs accept a `streamId` that the upstream system uses when connecting:\n\n```ts\ndeclare const stack: Stack;\ndeclare const sg: medialive.IInputSecurityGroup;\n\nnew medialive.Input(stack, 'SrtListener', {\n  inputName: 'srt-listener',\n  input: medialive.InputConfiguration.srtListener({\n    inputSecurityGroups: [sg],\n    streamId: 'my-stream-id',\n  }),\n});\n```\n","readmeFilename":"README.md"}