aws-cdk.aws-ivs-alpha 2.135.0a0__py3-none-any.whl → 2.230.0a0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aws_cdk/aws_ivs_alpha/__init__.py +1261 -13
- aws_cdk/aws_ivs_alpha/_jsii/__init__.py +18 -3
- aws_cdk/aws_ivs_alpha/_jsii/aws-ivs-alpha@2.230.0-alpha.0.jsii.tgz +0 -0
- {aws_cdk.aws_ivs_alpha-2.135.0a0.dist-info → aws_cdk_aws_ivs_alpha-2.230.0a0.dist-info}/LICENSE +1 -1
- aws_cdk_aws_ivs_alpha-2.230.0a0.dist-info/METADATA +257 -0
- aws_cdk_aws_ivs_alpha-2.230.0a0.dist-info/NOTICE +2 -0
- aws_cdk_aws_ivs_alpha-2.230.0a0.dist-info/RECORD +10 -0
- {aws_cdk.aws_ivs_alpha-2.135.0a0.dist-info → aws_cdk_aws_ivs_alpha-2.230.0a0.dist-info}/WHEEL +1 -1
- aws_cdk/aws_ivs_alpha/_jsii/aws-ivs-alpha@2.135.0-alpha.0.jsii.tgz +0 -0
- aws_cdk.aws_ivs_alpha-2.135.0a0.dist-info/METADATA +0 -119
- aws_cdk.aws_ivs_alpha-2.135.0a0.dist-info/NOTICE +0 -2
- aws_cdk.aws_ivs_alpha-2.135.0a0.dist-info/RECORD +0 -10
- {aws_cdk.aws_ivs_alpha-2.135.0a0.dist-info → aws_cdk_aws_ivs_alpha-2.230.0a0.dist-info}/top_level.txt +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'''
|
|
1
|
+
r'''
|
|
2
2
|
# AWS::IVS Construct Library
|
|
3
3
|
|
|
4
4
|
<!--BEGIN STABILITY BANNER-->---
|
|
@@ -39,6 +39,54 @@ You can create a channel
|
|
|
39
39
|
my_channel = ivs.Channel(self, "Channel")
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
+
You can use Advanced Channel type by setting the `type` property to
|
|
43
|
+
`ivs.ChannelType.ADVANCED_HD` or `ivs.ChannelType.ADVANCED_SD`.
|
|
44
|
+
|
|
45
|
+
Additionally, when using the Advanced Channel type, you can set
|
|
46
|
+
the `preset` property to `ivs.Preset.CONSTRAINED_BANDWIDTH_DELIVERY`
|
|
47
|
+
or `ivs.Preset.HIGHER_BANDWIDTH_DELIVERY`.
|
|
48
|
+
|
|
49
|
+
For more information, see [Amazon IVS Streaming Configuration](https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/streaming-config.html).
|
|
50
|
+
|
|
51
|
+
```python
|
|
52
|
+
my_channel = ivs.Channel(self, "myChannel",
|
|
53
|
+
type=ivs.ChannelType.ADVANCED_HD,
|
|
54
|
+
preset=ivs.Preset.CONSTRAINED_BANDWIDTH_DELIVERY
|
|
55
|
+
)
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
If you want to use RTMP ingest, set `insecureIngest` property to `true`.
|
|
59
|
+
By default, `insecureIngest` is `false` which means using RTMPS ingest.
|
|
60
|
+
|
|
61
|
+
**⚠ Note:** RTMP ingest might result in reduced security for your streams. AWS recommends that you use RTMPS for ingest, unless you have specific and verified use cases. For more information, see [Encoder Settings](https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/streaming-config.html#streaming-config-settings).
|
|
62
|
+
|
|
63
|
+
```python
|
|
64
|
+
my_rtmp_channel = ivs.Channel(self, "myRtmpChannel",
|
|
65
|
+
type=ivs.ChannelType.STANDARD,
|
|
66
|
+
insecure_ingest=True
|
|
67
|
+
)
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Multitrack Video
|
|
71
|
+
|
|
72
|
+
Multitrack video is a new, low-latency streaming paradigm supported by Amazon Interactive Video Service (IVS) and services that use Amazon IVS.
|
|
73
|
+
|
|
74
|
+
You can use Multitrack Video by setting the `multitrackInputConfiguration` property.
|
|
75
|
+
Multitrack Video requires both a STANDARD Channel and Fragmented Mp4.
|
|
76
|
+
|
|
77
|
+
For more information, see [Amazon IVS Multitrack Video](https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multitrack-video.html).
|
|
78
|
+
|
|
79
|
+
```python
|
|
80
|
+
ivs.Channel(self, "ChannelWithMultitrackVideo",
|
|
81
|
+
type=ivs.ChannelType.STANDARD,
|
|
82
|
+
container_format=ivs.ContainerFormat.FRAGMENTED_MP4,
|
|
83
|
+
multitrack_input_configuration=ivs.MultitrackInputConfiguration(
|
|
84
|
+
maximum_resolution=ivs.MaximumResolution.HD,
|
|
85
|
+
policy=ivs.Policy.ALLOW
|
|
86
|
+
)
|
|
87
|
+
)
|
|
88
|
+
```
|
|
89
|
+
|
|
42
90
|
### Importing an existing channel
|
|
43
91
|
|
|
44
92
|
You can reference an existing channel, for example, if you need to create a
|
|
@@ -87,6 +135,97 @@ my_channel = ivs.Channel(self, "Channel",
|
|
|
87
135
|
authorized=True
|
|
88
136
|
)
|
|
89
137
|
```
|
|
138
|
+
|
|
139
|
+
## Recording Configurations
|
|
140
|
+
|
|
141
|
+
An Amazon IVS Recording Configuration stores settings that specify how a channel's live streams should be recorded.
|
|
142
|
+
You can configure video quality, thumbnail generation, and where recordings are stored in Amazon S3.
|
|
143
|
+
|
|
144
|
+
For more information about IVS recording, see [IVS Auto-Record to Amazon S3 | Low-Latency Streaming](https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/record-to-s3.html).
|
|
145
|
+
|
|
146
|
+
You can create a recording configuration:
|
|
147
|
+
|
|
148
|
+
```python
|
|
149
|
+
# create an S3 bucket for storing recordings
|
|
150
|
+
recording_bucket = s3.Bucket(self, "RecordingBucket")
|
|
151
|
+
|
|
152
|
+
# create a basic recording configuration
|
|
153
|
+
recording_configuration = ivs.RecordingConfiguration(self, "RecordingConfiguration",
|
|
154
|
+
bucket=recording_bucket
|
|
155
|
+
)
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Renditions of a Recording
|
|
159
|
+
|
|
160
|
+
When you stream content to an Amazon IVS channel, auto-record-to-s3 uses the source video to generate multiple renditions.
|
|
161
|
+
|
|
162
|
+
For more information, see [Discovering the Renditions of a Recording](https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/record-to-s3.html#r2s3-recording-renditions).
|
|
163
|
+
|
|
164
|
+
```python
|
|
165
|
+
# recording_bucket: s3.Bucket
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
recording_configuration = ivs.RecordingConfiguration(self, "RecordingConfiguration",
|
|
169
|
+
bucket=recording_bucket,
|
|
170
|
+
|
|
171
|
+
# set rendition configuration
|
|
172
|
+
rendition_configuration=ivs.RenditionConfiguration.custom([ivs.Resolution.HD, ivs.Resolution.SD])
|
|
173
|
+
)
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Thumbnail Generation
|
|
177
|
+
|
|
178
|
+
You can enable or disable the recording of thumbnails for a live session and modify the interval at which thumbnails are generated for the live session.
|
|
179
|
+
|
|
180
|
+
Thumbnail intervals may range from 1 second to 60 seconds; by default, thumbnail recording is enabled, at an interval of 60 seconds.
|
|
181
|
+
|
|
182
|
+
For more information, see [Thumbnails](https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/record-to-s3.html#r2s3-thumbnails).
|
|
183
|
+
|
|
184
|
+
```python
|
|
185
|
+
# recording_bucket: s3.Bucket
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
recording_configuration = ivs.RecordingConfiguration(self, "RecordingConfiguration",
|
|
189
|
+
bucket=recording_bucket,
|
|
190
|
+
|
|
191
|
+
# set thumbnail settings
|
|
192
|
+
thumbnail_configuration=ivs.ThumbnailConfiguration.interval(ivs.Resolution.HD, [ivs.Storage.LATEST, ivs.Storage.SEQUENTIAL], Duration.seconds(30))
|
|
193
|
+
)
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Merge Fragmented Streams
|
|
197
|
+
|
|
198
|
+
The `recordingReconnectWindow` property allows you to specify a window of time (in seconds) during which, if your stream is interrupted and a new stream is started, Amazon IVS tries to record to the same S3 prefix as the previous stream.
|
|
199
|
+
|
|
200
|
+
In other words, if a broadcast disconnects and then reconnects within the specified interval, the multiple streams are considered a single broadcast and merged together.
|
|
201
|
+
|
|
202
|
+
For more information, see [Merge Fragmented Streams](https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/record-to-s3.html#r2s3-merge-fragmented-streams).
|
|
203
|
+
|
|
204
|
+
```python
|
|
205
|
+
# recording_bucket: s3.Bucket
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
recording_configuration = ivs.RecordingConfiguration(self, "RecordingConfiguration",
|
|
209
|
+
bucket=recording_bucket,
|
|
210
|
+
|
|
211
|
+
# set recording reconnect window
|
|
212
|
+
recording_reconnect_window=Duration.seconds(60)
|
|
213
|
+
)
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Attaching Recording Configuration to a Channel
|
|
217
|
+
|
|
218
|
+
To enable recording for a channel, specify the recording configuration when creating the channel:
|
|
219
|
+
|
|
220
|
+
```python
|
|
221
|
+
# recording_configuration: ivs.RecordingConfiguration
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
channel = ivs.Channel(self, "Channel",
|
|
225
|
+
# set recording configuration
|
|
226
|
+
recording_configuration=recording_configuration
|
|
227
|
+
)
|
|
228
|
+
```
|
|
90
229
|
'''
|
|
91
230
|
from pkgutil import extend_path
|
|
92
231
|
__path__ = extend_path(__path__, __name__)
|
|
@@ -101,11 +240,27 @@ import jsii
|
|
|
101
240
|
import publication
|
|
102
241
|
import typing_extensions
|
|
103
242
|
|
|
104
|
-
|
|
243
|
+
import typeguard
|
|
244
|
+
from importlib.metadata import version as _metadata_package_version
|
|
245
|
+
TYPEGUARD_MAJOR_VERSION = int(_metadata_package_version('typeguard').split('.')[0])
|
|
246
|
+
|
|
247
|
+
def check_type(argname: str, value: object, expected_type: typing.Any) -> typing.Any:
|
|
248
|
+
if TYPEGUARD_MAJOR_VERSION <= 2:
|
|
249
|
+
return typeguard.check_type(argname=argname, value=value, expected_type=expected_type) # type:ignore
|
|
250
|
+
else:
|
|
251
|
+
if isinstance(value, jsii._reference_map.InterfaceDynamicProxy): # pyright: ignore [reportAttributeAccessIssue]
|
|
252
|
+
pass
|
|
253
|
+
else:
|
|
254
|
+
if TYPEGUARD_MAJOR_VERSION == 3:
|
|
255
|
+
typeguard.config.collection_check_strategy = typeguard.CollectionCheckStrategy.ALL_ITEMS # type:ignore
|
|
256
|
+
typeguard.check_type(value=value, expected_type=expected_type) # type:ignore
|
|
257
|
+
else:
|
|
258
|
+
typeguard.check_type(value=value, expected_type=expected_type, collection_check_strategy=typeguard.CollectionCheckStrategy.ALL_ITEMS) # type:ignore
|
|
105
259
|
|
|
106
260
|
from ._jsii import *
|
|
107
261
|
|
|
108
262
|
import aws_cdk as _aws_cdk_ceddda9d
|
|
263
|
+
import aws_cdk.interfaces.aws_s3 as _aws_cdk_interfaces_aws_s3_ceddda9d
|
|
109
264
|
import constructs as _constructs_77d1e7e8
|
|
110
265
|
|
|
111
266
|
|
|
@@ -115,7 +270,12 @@ import constructs as _constructs_77d1e7e8
|
|
|
115
270
|
name_mapping={
|
|
116
271
|
"authorized": "authorized",
|
|
117
272
|
"channel_name": "channelName",
|
|
273
|
+
"container_format": "containerFormat",
|
|
274
|
+
"insecure_ingest": "insecureIngest",
|
|
118
275
|
"latency_mode": "latencyMode",
|
|
276
|
+
"multitrack_input_configuration": "multitrackInputConfiguration",
|
|
277
|
+
"preset": "preset",
|
|
278
|
+
"recording_configuration": "recordingConfiguration",
|
|
119
279
|
"type": "type",
|
|
120
280
|
},
|
|
121
281
|
)
|
|
@@ -125,14 +285,24 @@ class ChannelProps:
|
|
|
125
285
|
*,
|
|
126
286
|
authorized: typing.Optional[builtins.bool] = None,
|
|
127
287
|
channel_name: typing.Optional[builtins.str] = None,
|
|
288
|
+
container_format: typing.Optional["ContainerFormat"] = None,
|
|
289
|
+
insecure_ingest: typing.Optional[builtins.bool] = None,
|
|
128
290
|
latency_mode: typing.Optional["LatencyMode"] = None,
|
|
291
|
+
multitrack_input_configuration: typing.Optional[typing.Union["MultitrackInputConfiguration", typing.Dict[builtins.str, typing.Any]]] = None,
|
|
292
|
+
preset: typing.Optional["Preset"] = None,
|
|
293
|
+
recording_configuration: typing.Optional["IRecordingConfiguration"] = None,
|
|
129
294
|
type: typing.Optional["ChannelType"] = None,
|
|
130
295
|
) -> None:
|
|
131
296
|
'''(experimental) Properties for creating a new Channel.
|
|
132
297
|
|
|
133
298
|
:param authorized: (experimental) Whether the channel is authorized. If you wish to make an authorized channel, you will need to ensure that a PlaybackKeyPair has been uploaded to your account as this is used to validate the signed JWT that is required for authorization Default: false
|
|
134
299
|
:param channel_name: (experimental) A name for the channel. Default: Automatically generated name
|
|
300
|
+
:param container_format: (experimental) Indicates which content-packaging format is used (MPEG-TS or fMP4). If ``multitrackInputConfiguration`` is specified, only fMP4 can be used. Otherwise, ``containerFormat`` may be set to ``ContainerFormat.TS`` or ``ContainerFormat.FRAGMENTED_MP4``. Default: - ``ContainerFormat.FRAGMENTED_MP4`` is automatically set when the ``multitrackInputConfiguration`` is specified. If not specified, it remains undefined and uses the IVS default setting (TS).
|
|
301
|
+
:param insecure_ingest: (experimental) Whether the channel allows insecure RTMP ingest. Default: false
|
|
135
302
|
:param latency_mode: (experimental) Channel latency mode. Default: LatencyMode.LOW
|
|
303
|
+
:param multitrack_input_configuration: (experimental) Object specifying multitrack input configuration. You must specify ``multitrackInputConfiguration`` if you want to use MultiTrack Video. ``multitrackInputConfiguration`` is only supported for ``ChannelType.STANDARD``. Default: undefined - IVS default setting is not use MultiTrack Video.
|
|
304
|
+
:param preset: (experimental) An optional transcode preset for the channel. Can be used for ADVANCED_HD and ADVANCED_SD channel types. When LOW or STANDARD is used, the preset will be overridden and set to none regardless of the value provided. Default: - Preset.HIGHER_BANDWIDTH_DELIVERY if channelType is ADVANCED_SD or ADVANCED_HD, none otherwise
|
|
305
|
+
:param recording_configuration: (experimental) A recording configuration for the channel. Default: - recording is disabled
|
|
136
306
|
:param type: (experimental) The channel type, which determines the allowable resolution and bitrate. If you exceed the allowable resolution or bitrate, the stream will disconnect immediately Default: ChannelType.STANDARD
|
|
137
307
|
|
|
138
308
|
:stability: experimental
|
|
@@ -140,23 +310,41 @@ class ChannelProps:
|
|
|
140
310
|
|
|
141
311
|
Example::
|
|
142
312
|
|
|
143
|
-
my_channel = ivs.Channel(self, "
|
|
144
|
-
|
|
313
|
+
my_channel = ivs.Channel(self, "myChannel",
|
|
314
|
+
type=ivs.ChannelType.ADVANCED_HD,
|
|
315
|
+
preset=ivs.Preset.CONSTRAINED_BANDWIDTH_DELIVERY
|
|
145
316
|
)
|
|
146
317
|
'''
|
|
318
|
+
if isinstance(multitrack_input_configuration, dict):
|
|
319
|
+
multitrack_input_configuration = MultitrackInputConfiguration(**multitrack_input_configuration)
|
|
147
320
|
if __debug__:
|
|
148
321
|
type_hints = typing.get_type_hints(_typecheckingstub__0ebf6a0e98bbd5b88d9676fbe616666a44f837cba80675eade5df1fea22c9d22)
|
|
149
322
|
check_type(argname="argument authorized", value=authorized, expected_type=type_hints["authorized"])
|
|
150
323
|
check_type(argname="argument channel_name", value=channel_name, expected_type=type_hints["channel_name"])
|
|
324
|
+
check_type(argname="argument container_format", value=container_format, expected_type=type_hints["container_format"])
|
|
325
|
+
check_type(argname="argument insecure_ingest", value=insecure_ingest, expected_type=type_hints["insecure_ingest"])
|
|
151
326
|
check_type(argname="argument latency_mode", value=latency_mode, expected_type=type_hints["latency_mode"])
|
|
327
|
+
check_type(argname="argument multitrack_input_configuration", value=multitrack_input_configuration, expected_type=type_hints["multitrack_input_configuration"])
|
|
328
|
+
check_type(argname="argument preset", value=preset, expected_type=type_hints["preset"])
|
|
329
|
+
check_type(argname="argument recording_configuration", value=recording_configuration, expected_type=type_hints["recording_configuration"])
|
|
152
330
|
check_type(argname="argument type", value=type, expected_type=type_hints["type"])
|
|
153
331
|
self._values: typing.Dict[builtins.str, typing.Any] = {}
|
|
154
332
|
if authorized is not None:
|
|
155
333
|
self._values["authorized"] = authorized
|
|
156
334
|
if channel_name is not None:
|
|
157
335
|
self._values["channel_name"] = channel_name
|
|
336
|
+
if container_format is not None:
|
|
337
|
+
self._values["container_format"] = container_format
|
|
338
|
+
if insecure_ingest is not None:
|
|
339
|
+
self._values["insecure_ingest"] = insecure_ingest
|
|
158
340
|
if latency_mode is not None:
|
|
159
341
|
self._values["latency_mode"] = latency_mode
|
|
342
|
+
if multitrack_input_configuration is not None:
|
|
343
|
+
self._values["multitrack_input_configuration"] = multitrack_input_configuration
|
|
344
|
+
if preset is not None:
|
|
345
|
+
self._values["preset"] = preset
|
|
346
|
+
if recording_configuration is not None:
|
|
347
|
+
self._values["recording_configuration"] = recording_configuration
|
|
160
348
|
if type is not None:
|
|
161
349
|
self._values["type"] = type
|
|
162
350
|
|
|
@@ -186,6 +374,31 @@ class ChannelProps:
|
|
|
186
374
|
result = self._values.get("channel_name")
|
|
187
375
|
return typing.cast(typing.Optional[builtins.str], result)
|
|
188
376
|
|
|
377
|
+
@builtins.property
|
|
378
|
+
def container_format(self) -> typing.Optional["ContainerFormat"]:
|
|
379
|
+
'''(experimental) Indicates which content-packaging format is used (MPEG-TS or fMP4).
|
|
380
|
+
|
|
381
|
+
If ``multitrackInputConfiguration`` is specified, only fMP4 can be used.
|
|
382
|
+
Otherwise, ``containerFormat`` may be set to ``ContainerFormat.TS`` or ``ContainerFormat.FRAGMENTED_MP4``.
|
|
383
|
+
|
|
384
|
+
:default: - ``ContainerFormat.FRAGMENTED_MP4`` is automatically set when the ``multitrackInputConfiguration`` is specified. If not specified, it remains undefined and uses the IVS default setting (TS).
|
|
385
|
+
|
|
386
|
+
:stability: experimental
|
|
387
|
+
'''
|
|
388
|
+
result = self._values.get("container_format")
|
|
389
|
+
return typing.cast(typing.Optional["ContainerFormat"], result)
|
|
390
|
+
|
|
391
|
+
@builtins.property
|
|
392
|
+
def insecure_ingest(self) -> typing.Optional[builtins.bool]:
|
|
393
|
+
'''(experimental) Whether the channel allows insecure RTMP ingest.
|
|
394
|
+
|
|
395
|
+
:default: false
|
|
396
|
+
|
|
397
|
+
:stability: experimental
|
|
398
|
+
'''
|
|
399
|
+
result = self._values.get("insecure_ingest")
|
|
400
|
+
return typing.cast(typing.Optional[builtins.bool], result)
|
|
401
|
+
|
|
189
402
|
@builtins.property
|
|
190
403
|
def latency_mode(self) -> typing.Optional["LatencyMode"]:
|
|
191
404
|
'''(experimental) Channel latency mode.
|
|
@@ -197,6 +410,47 @@ class ChannelProps:
|
|
|
197
410
|
result = self._values.get("latency_mode")
|
|
198
411
|
return typing.cast(typing.Optional["LatencyMode"], result)
|
|
199
412
|
|
|
413
|
+
@builtins.property
|
|
414
|
+
def multitrack_input_configuration(
|
|
415
|
+
self,
|
|
416
|
+
) -> typing.Optional["MultitrackInputConfiguration"]:
|
|
417
|
+
'''(experimental) Object specifying multitrack input configuration. You must specify ``multitrackInputConfiguration`` if you want to use MultiTrack Video.
|
|
418
|
+
|
|
419
|
+
``multitrackInputConfiguration`` is only supported for ``ChannelType.STANDARD``.
|
|
420
|
+
|
|
421
|
+
:default: undefined - IVS default setting is not use MultiTrack Video.
|
|
422
|
+
|
|
423
|
+
:see: https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/multitrack-video.html
|
|
424
|
+
:stability: experimental
|
|
425
|
+
'''
|
|
426
|
+
result = self._values.get("multitrack_input_configuration")
|
|
427
|
+
return typing.cast(typing.Optional["MultitrackInputConfiguration"], result)
|
|
428
|
+
|
|
429
|
+
@builtins.property
|
|
430
|
+
def preset(self) -> typing.Optional["Preset"]:
|
|
431
|
+
'''(experimental) An optional transcode preset for the channel.
|
|
432
|
+
|
|
433
|
+
Can be used for ADVANCED_HD and ADVANCED_SD channel types.
|
|
434
|
+
When LOW or STANDARD is used, the preset will be overridden and set to none regardless of the value provided.
|
|
435
|
+
|
|
436
|
+
:default: - Preset.HIGHER_BANDWIDTH_DELIVERY if channelType is ADVANCED_SD or ADVANCED_HD, none otherwise
|
|
437
|
+
|
|
438
|
+
:stability: experimental
|
|
439
|
+
'''
|
|
440
|
+
result = self._values.get("preset")
|
|
441
|
+
return typing.cast(typing.Optional["Preset"], result)
|
|
442
|
+
|
|
443
|
+
@builtins.property
|
|
444
|
+
def recording_configuration(self) -> typing.Optional["IRecordingConfiguration"]:
|
|
445
|
+
'''(experimental) A recording configuration for the channel.
|
|
446
|
+
|
|
447
|
+
:default: - recording is disabled
|
|
448
|
+
|
|
449
|
+
:stability: experimental
|
|
450
|
+
'''
|
|
451
|
+
result = self._values.get("recording_configuration")
|
|
452
|
+
return typing.cast(typing.Optional["IRecordingConfiguration"], result)
|
|
453
|
+
|
|
200
454
|
@builtins.property
|
|
201
455
|
def type(self) -> typing.Optional["ChannelType"]:
|
|
202
456
|
'''(experimental) The channel type, which determines the allowable resolution and bitrate.
|
|
@@ -228,21 +482,78 @@ class ChannelType(enum.Enum):
|
|
|
228
482
|
|
|
229
483
|
If you exceed the allowable resolution or bitrate, the stream probably will disconnect immediately.
|
|
230
484
|
|
|
485
|
+
:see: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html
|
|
231
486
|
:stability: experimental
|
|
487
|
+
:exampleMetadata: infused
|
|
488
|
+
|
|
489
|
+
Example::
|
|
490
|
+
|
|
491
|
+
my_channel = ivs.Channel(self, "myChannel",
|
|
492
|
+
type=ivs.ChannelType.ADVANCED_HD,
|
|
493
|
+
preset=ivs.Preset.CONSTRAINED_BANDWIDTH_DELIVERY
|
|
494
|
+
)
|
|
232
495
|
'''
|
|
233
496
|
|
|
234
497
|
STANDARD = "STANDARD"
|
|
235
498
|
'''(experimental) Multiple qualities are generated from the original input, to automatically give viewers the best experience for their devices and network conditions.
|
|
236
499
|
|
|
237
|
-
|
|
500
|
+
Transcoding allows higher playback quality across a range of download speeds. Resolution can be up to 1080p and bitrate can be up to 8.5 Mbps.
|
|
501
|
+
Audio is transcoded only for renditions 360p and below; above that, audio is passed through.
|
|
502
|
+
|
|
238
503
|
:stability: experimental
|
|
239
504
|
'''
|
|
240
505
|
BASIC = "BASIC"
|
|
241
|
-
'''(experimental)
|
|
506
|
+
'''(experimental) Delivers the original input to viewers.
|
|
242
507
|
|
|
243
508
|
The viewer’s video-quality choice is limited to the original input.
|
|
244
509
|
|
|
245
|
-
:
|
|
510
|
+
:stability: experimental
|
|
511
|
+
'''
|
|
512
|
+
ADVANCED_SD = "ADVANCED_SD"
|
|
513
|
+
'''(experimental) Multiple qualities are generated from the original input, to automatically give viewers the best experience for their devices and network conditions.
|
|
514
|
+
|
|
515
|
+
Input resolution can be up to 1080p and bitrate can be up to 8.5 Mbps; output is capped at SD quality (480p).
|
|
516
|
+
Audio for all renditions is transcoded, and an audio-only rendition is available.
|
|
517
|
+
|
|
518
|
+
:stability: experimental
|
|
519
|
+
'''
|
|
520
|
+
ADVANCED_HD = "ADVANCED_HD"
|
|
521
|
+
'''(experimental) Multiple qualities are generated from the original input, to automatically give viewers the best experience for their devices and network conditions.
|
|
522
|
+
|
|
523
|
+
Input resolution can be up to 1080p and bitrate can be up to 8.5 Mbps; output is capped at HD quality (720p).
|
|
524
|
+
Audio for all renditions is transcoded, and an audio-only rendition is available.
|
|
525
|
+
|
|
526
|
+
:stability: experimental
|
|
527
|
+
'''
|
|
528
|
+
|
|
529
|
+
|
|
530
|
+
@jsii.enum(jsii_type="@aws-cdk/aws-ivs-alpha.ContainerFormat")
|
|
531
|
+
class ContainerFormat(enum.Enum):
|
|
532
|
+
'''(experimental) Container Format.
|
|
533
|
+
|
|
534
|
+
:stability: experimental
|
|
535
|
+
:exampleMetadata: infused
|
|
536
|
+
|
|
537
|
+
Example::
|
|
538
|
+
|
|
539
|
+
ivs.Channel(self, "ChannelWithMultitrackVideo",
|
|
540
|
+
type=ivs.ChannelType.STANDARD,
|
|
541
|
+
container_format=ivs.ContainerFormat.FRAGMENTED_MP4,
|
|
542
|
+
multitrack_input_configuration=ivs.MultitrackInputConfiguration(
|
|
543
|
+
maximum_resolution=ivs.MaximumResolution.HD,
|
|
544
|
+
policy=ivs.Policy.ALLOW
|
|
545
|
+
)
|
|
546
|
+
)
|
|
547
|
+
'''
|
|
548
|
+
|
|
549
|
+
TS = "TS"
|
|
550
|
+
'''(experimental) Use MPEG-TS.
|
|
551
|
+
|
|
552
|
+
:stability: experimental
|
|
553
|
+
'''
|
|
554
|
+
FRAGMENTED_MP4 = "FRAGMENTED_MP4"
|
|
555
|
+
'''(experimental) Use fMP4.
|
|
556
|
+
|
|
246
557
|
:stability: experimental
|
|
247
558
|
'''
|
|
248
559
|
|
|
@@ -362,6 +673,68 @@ class _IPlaybackKeyPairProxy(
|
|
|
362
673
|
typing.cast(typing.Any, IPlaybackKeyPair).__jsii_proxy_class__ = lambda : _IPlaybackKeyPairProxy
|
|
363
674
|
|
|
364
675
|
|
|
676
|
+
@jsii.interface(jsii_type="@aws-cdk/aws-ivs-alpha.IRecordingConfiguration")
|
|
677
|
+
class IRecordingConfiguration(_aws_cdk_ceddda9d.IResource, typing_extensions.Protocol):
|
|
678
|
+
'''(experimental) Represents the IVS Recording configuration.
|
|
679
|
+
|
|
680
|
+
:stability: experimental
|
|
681
|
+
'''
|
|
682
|
+
|
|
683
|
+
@builtins.property
|
|
684
|
+
@jsii.member(jsii_name="recordingConfigurationArn")
|
|
685
|
+
def recording_configuration_arn(self) -> builtins.str:
|
|
686
|
+
'''(experimental) The ARN of the Recording configuration.
|
|
687
|
+
|
|
688
|
+
:stability: experimental
|
|
689
|
+
:attribute: true
|
|
690
|
+
'''
|
|
691
|
+
...
|
|
692
|
+
|
|
693
|
+
@builtins.property
|
|
694
|
+
@jsii.member(jsii_name="recordingConfigurationId")
|
|
695
|
+
def recording_configuration_id(self) -> builtins.str:
|
|
696
|
+
'''(experimental) The ID of the Recording configuration.
|
|
697
|
+
|
|
698
|
+
:stability: experimental
|
|
699
|
+
:attribute: true
|
|
700
|
+
'''
|
|
701
|
+
...
|
|
702
|
+
|
|
703
|
+
|
|
704
|
+
class _IRecordingConfigurationProxy(
|
|
705
|
+
jsii.proxy_for(_aws_cdk_ceddda9d.IResource), # type: ignore[misc]
|
|
706
|
+
):
|
|
707
|
+
'''(experimental) Represents the IVS Recording configuration.
|
|
708
|
+
|
|
709
|
+
:stability: experimental
|
|
710
|
+
'''
|
|
711
|
+
|
|
712
|
+
__jsii_type__: typing.ClassVar[str] = "@aws-cdk/aws-ivs-alpha.IRecordingConfiguration"
|
|
713
|
+
|
|
714
|
+
@builtins.property
|
|
715
|
+
@jsii.member(jsii_name="recordingConfigurationArn")
|
|
716
|
+
def recording_configuration_arn(self) -> builtins.str:
|
|
717
|
+
'''(experimental) The ARN of the Recording configuration.
|
|
718
|
+
|
|
719
|
+
:stability: experimental
|
|
720
|
+
:attribute: true
|
|
721
|
+
'''
|
|
722
|
+
return typing.cast(builtins.str, jsii.get(self, "recordingConfigurationArn"))
|
|
723
|
+
|
|
724
|
+
@builtins.property
|
|
725
|
+
@jsii.member(jsii_name="recordingConfigurationId")
|
|
726
|
+
def recording_configuration_id(self) -> builtins.str:
|
|
727
|
+
'''(experimental) The ID of the Recording configuration.
|
|
728
|
+
|
|
729
|
+
:stability: experimental
|
|
730
|
+
:attribute: true
|
|
731
|
+
'''
|
|
732
|
+
return typing.cast(builtins.str, jsii.get(self, "recordingConfigurationId"))
|
|
733
|
+
|
|
734
|
+
# Adding a "__jsii_proxy_class__(): typing.Type" function to the interface
|
|
735
|
+
typing.cast(typing.Any, IRecordingConfiguration).__jsii_proxy_class__ = lambda : _IRecordingConfigurationProxy
|
|
736
|
+
|
|
737
|
+
|
|
365
738
|
@jsii.interface(jsii_type="@aws-cdk/aws-ivs-alpha.IStreamKey")
|
|
366
739
|
class IStreamKey(_aws_cdk_ceddda9d.IResource, typing_extensions.Protocol):
|
|
367
740
|
'''(experimental) Represents an IVS Stream Key.
|
|
@@ -427,6 +800,114 @@ class LatencyMode(enum.Enum):
|
|
|
427
800
|
'''
|
|
428
801
|
|
|
429
802
|
|
|
803
|
+
@jsii.enum(jsii_type="@aws-cdk/aws-ivs-alpha.MaximumResolution")
|
|
804
|
+
class MaximumResolution(enum.Enum):
|
|
805
|
+
'''(experimental) Maximum resolution for multitrack input.
|
|
806
|
+
|
|
807
|
+
:stability: experimental
|
|
808
|
+
:exampleMetadata: infused
|
|
809
|
+
|
|
810
|
+
Example::
|
|
811
|
+
|
|
812
|
+
ivs.Channel(self, "ChannelWithMultitrackVideo",
|
|
813
|
+
type=ivs.ChannelType.STANDARD,
|
|
814
|
+
container_format=ivs.ContainerFormat.FRAGMENTED_MP4,
|
|
815
|
+
multitrack_input_configuration=ivs.MultitrackInputConfiguration(
|
|
816
|
+
maximum_resolution=ivs.MaximumResolution.HD,
|
|
817
|
+
policy=ivs.Policy.ALLOW
|
|
818
|
+
)
|
|
819
|
+
)
|
|
820
|
+
'''
|
|
821
|
+
|
|
822
|
+
FULL_HD = "FULL_HD"
|
|
823
|
+
'''(experimental) Full HD (1080p).
|
|
824
|
+
|
|
825
|
+
:stability: experimental
|
|
826
|
+
'''
|
|
827
|
+
HD = "HD"
|
|
828
|
+
'''(experimental) HD (720p).
|
|
829
|
+
|
|
830
|
+
:stability: experimental
|
|
831
|
+
'''
|
|
832
|
+
SD = "SD"
|
|
833
|
+
'''(experimental) SD (480p).
|
|
834
|
+
|
|
835
|
+
:stability: experimental
|
|
836
|
+
'''
|
|
837
|
+
|
|
838
|
+
|
|
839
|
+
@jsii.data_type(
|
|
840
|
+
jsii_type="@aws-cdk/aws-ivs-alpha.MultitrackInputConfiguration",
|
|
841
|
+
jsii_struct_bases=[],
|
|
842
|
+
name_mapping={"maximum_resolution": "maximumResolution", "policy": "policy"},
|
|
843
|
+
)
|
|
844
|
+
class MultitrackInputConfiguration:
|
|
845
|
+
def __init__(
|
|
846
|
+
self,
|
|
847
|
+
*,
|
|
848
|
+
maximum_resolution: MaximumResolution,
|
|
849
|
+
policy: "Policy",
|
|
850
|
+
) -> None:
|
|
851
|
+
'''(experimental) A complex type that specifies multitrack input configuration.
|
|
852
|
+
|
|
853
|
+
:param maximum_resolution: (experimental) Maximum resolution for multitrack input.
|
|
854
|
+
:param policy: (experimental) Indicates whether multitrack input is allowed or required.
|
|
855
|
+
|
|
856
|
+
:stability: experimental
|
|
857
|
+
:exampleMetadata: infused
|
|
858
|
+
|
|
859
|
+
Example::
|
|
860
|
+
|
|
861
|
+
ivs.Channel(self, "ChannelWithMultitrackVideo",
|
|
862
|
+
type=ivs.ChannelType.STANDARD,
|
|
863
|
+
container_format=ivs.ContainerFormat.FRAGMENTED_MP4,
|
|
864
|
+
multitrack_input_configuration=ivs.MultitrackInputConfiguration(
|
|
865
|
+
maximum_resolution=ivs.MaximumResolution.HD,
|
|
866
|
+
policy=ivs.Policy.ALLOW
|
|
867
|
+
)
|
|
868
|
+
)
|
|
869
|
+
'''
|
|
870
|
+
if __debug__:
|
|
871
|
+
type_hints = typing.get_type_hints(_typecheckingstub__45e5ad260ecfc7dc92d23bd36a068b4a317871ab3322fe7e7ef92573084ea6b6)
|
|
872
|
+
check_type(argname="argument maximum_resolution", value=maximum_resolution, expected_type=type_hints["maximum_resolution"])
|
|
873
|
+
check_type(argname="argument policy", value=policy, expected_type=type_hints["policy"])
|
|
874
|
+
self._values: typing.Dict[builtins.str, typing.Any] = {
|
|
875
|
+
"maximum_resolution": maximum_resolution,
|
|
876
|
+
"policy": policy,
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
@builtins.property
|
|
880
|
+
def maximum_resolution(self) -> MaximumResolution:
|
|
881
|
+
'''(experimental) Maximum resolution for multitrack input.
|
|
882
|
+
|
|
883
|
+
:stability: experimental
|
|
884
|
+
'''
|
|
885
|
+
result = self._values.get("maximum_resolution")
|
|
886
|
+
assert result is not None, "Required property 'maximum_resolution' is missing"
|
|
887
|
+
return typing.cast(MaximumResolution, result)
|
|
888
|
+
|
|
889
|
+
@builtins.property
|
|
890
|
+
def policy(self) -> "Policy":
|
|
891
|
+
'''(experimental) Indicates whether multitrack input is allowed or required.
|
|
892
|
+
|
|
893
|
+
:stability: experimental
|
|
894
|
+
'''
|
|
895
|
+
result = self._values.get("policy")
|
|
896
|
+
assert result is not None, "Required property 'policy' is missing"
|
|
897
|
+
return typing.cast("Policy", result)
|
|
898
|
+
|
|
899
|
+
def __eq__(self, rhs: typing.Any) -> builtins.bool:
|
|
900
|
+
return isinstance(rhs, self.__class__) and rhs._values == self._values
|
|
901
|
+
|
|
902
|
+
def __ne__(self, rhs: typing.Any) -> builtins.bool:
|
|
903
|
+
return not (rhs == self)
|
|
904
|
+
|
|
905
|
+
def __repr__(self) -> str:
|
|
906
|
+
return "MultitrackInputConfiguration(%s)" % ", ".join(
|
|
907
|
+
k + "=" + repr(v) for k, v in self._values.items()
|
|
908
|
+
)
|
|
909
|
+
|
|
910
|
+
|
|
430
911
|
@jsii.implements(IPlaybackKeyPair)
|
|
431
912
|
class PlaybackKeyPair(
|
|
432
913
|
_aws_cdk_ceddda9d.Resource,
|
|
@@ -472,6 +953,15 @@ class PlaybackKeyPair(
|
|
|
472
953
|
|
|
473
954
|
jsii.create(self.__class__, self, [scope, id, props])
|
|
474
955
|
|
|
956
|
+
@jsii.python.classproperty
|
|
957
|
+
@jsii.member(jsii_name="PROPERTY_INJECTION_ID")
|
|
958
|
+
def PROPERTY_INJECTION_ID(cls) -> builtins.str:
|
|
959
|
+
'''(experimental) Uniquely identifies this class.
|
|
960
|
+
|
|
961
|
+
:stability: experimental
|
|
962
|
+
'''
|
|
963
|
+
return typing.cast(builtins.str, jsii.sget(cls, "PROPERTY_INJECTION_ID"))
|
|
964
|
+
|
|
475
965
|
@builtins.property
|
|
476
966
|
@jsii.member(jsii_name="playbackKeyPairArn")
|
|
477
967
|
def playback_key_pair_arn(self) -> builtins.str:
|
|
@@ -570,11 +1060,545 @@ class PlaybackKeyPairProps:
|
|
|
570
1060
|
)
|
|
571
1061
|
|
|
572
1062
|
|
|
573
|
-
@jsii.
|
|
574
|
-
class
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
1063
|
+
@jsii.enum(jsii_type="@aws-cdk/aws-ivs-alpha.Policy")
|
|
1064
|
+
class Policy(enum.Enum):
|
|
1065
|
+
'''(experimental) Whether multitrack input is allowed or required.
|
|
1066
|
+
|
|
1067
|
+
:stability: experimental
|
|
1068
|
+
:exampleMetadata: infused
|
|
1069
|
+
|
|
1070
|
+
Example::
|
|
1071
|
+
|
|
1072
|
+
ivs.Channel(self, "ChannelWithMultitrackVideo",
|
|
1073
|
+
type=ivs.ChannelType.STANDARD,
|
|
1074
|
+
container_format=ivs.ContainerFormat.FRAGMENTED_MP4,
|
|
1075
|
+
multitrack_input_configuration=ivs.MultitrackInputConfiguration(
|
|
1076
|
+
maximum_resolution=ivs.MaximumResolution.HD,
|
|
1077
|
+
policy=ivs.Policy.ALLOW
|
|
1078
|
+
)
|
|
1079
|
+
)
|
|
1080
|
+
'''
|
|
1081
|
+
|
|
1082
|
+
ALLOW = "ALLOW"
|
|
1083
|
+
'''(experimental) Multitrack input is allowed.
|
|
1084
|
+
|
|
1085
|
+
:stability: experimental
|
|
1086
|
+
'''
|
|
1087
|
+
REQUIRE = "REQUIRE"
|
|
1088
|
+
'''(experimental) Multitrack input is required.
|
|
1089
|
+
|
|
1090
|
+
:stability: experimental
|
|
1091
|
+
'''
|
|
1092
|
+
|
|
1093
|
+
|
|
1094
|
+
@jsii.enum(jsii_type="@aws-cdk/aws-ivs-alpha.Preset")
|
|
1095
|
+
class Preset(enum.Enum):
|
|
1096
|
+
'''(experimental) An optional transcode preset for the channel.
|
|
1097
|
+
|
|
1098
|
+
This is selectable only for ADVANCED_HD and ADVANCED_SD channel types.
|
|
1099
|
+
|
|
1100
|
+
:see: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ivs-channel.html
|
|
1101
|
+
:stability: experimental
|
|
1102
|
+
:exampleMetadata: infused
|
|
1103
|
+
|
|
1104
|
+
Example::
|
|
1105
|
+
|
|
1106
|
+
my_channel = ivs.Channel(self, "myChannel",
|
|
1107
|
+
type=ivs.ChannelType.ADVANCED_HD,
|
|
1108
|
+
preset=ivs.Preset.CONSTRAINED_BANDWIDTH_DELIVERY
|
|
1109
|
+
)
|
|
1110
|
+
'''
|
|
1111
|
+
|
|
1112
|
+
CONSTRAINED_BANDWIDTH_DELIVERY = "CONSTRAINED_BANDWIDTH_DELIVERY"
|
|
1113
|
+
'''(experimental) Use a lower bitrate than STANDARD for each quality level.
|
|
1114
|
+
|
|
1115
|
+
Use it if you have low download bandwidth and/or simple video content (e.g., talking heads).
|
|
1116
|
+
|
|
1117
|
+
:stability: experimental
|
|
1118
|
+
'''
|
|
1119
|
+
HIGHER_BANDWIDTH_DELIVERY = "HIGHER_BANDWIDTH_DELIVERY"
|
|
1120
|
+
'''(experimental) Use a higher bitrate for each quality level.
|
|
1121
|
+
|
|
1122
|
+
Use it if you have high download bandwidth and/or complex video content (e.g., flashes and quick scene changes).
|
|
1123
|
+
|
|
1124
|
+
:stability: experimental
|
|
1125
|
+
'''
|
|
1126
|
+
|
|
1127
|
+
|
|
1128
|
+
@jsii.implements(IRecordingConfiguration)
|
|
1129
|
+
class RecordingConfiguration(
|
|
1130
|
+
_aws_cdk_ceddda9d.Resource,
|
|
1131
|
+
metaclass=jsii.JSIIMeta,
|
|
1132
|
+
jsii_type="@aws-cdk/aws-ivs-alpha.RecordingConfiguration",
|
|
1133
|
+
):
|
|
1134
|
+
'''(experimental) The IVS Recording configuration.
|
|
1135
|
+
|
|
1136
|
+
:stability: experimental
|
|
1137
|
+
:resource: AWS::IVS::RecordingConfiguration
|
|
1138
|
+
:exampleMetadata: infused
|
|
1139
|
+
|
|
1140
|
+
Example::
|
|
1141
|
+
|
|
1142
|
+
# recording_bucket: s3.Bucket
|
|
1143
|
+
|
|
1144
|
+
|
|
1145
|
+
recording_configuration = ivs.RecordingConfiguration(self, "RecordingConfiguration",
|
|
1146
|
+
bucket=recording_bucket,
|
|
1147
|
+
|
|
1148
|
+
# set rendition configuration
|
|
1149
|
+
rendition_configuration=ivs.RenditionConfiguration.custom([ivs.Resolution.HD, ivs.Resolution.SD])
|
|
1150
|
+
)
|
|
1151
|
+
'''
|
|
1152
|
+
|
|
1153
|
+
def __init__(
|
|
1154
|
+
self,
|
|
1155
|
+
scope: _constructs_77d1e7e8.Construct,
|
|
1156
|
+
id: builtins.str,
|
|
1157
|
+
*,
|
|
1158
|
+
bucket: _aws_cdk_interfaces_aws_s3_ceddda9d.IBucketRef,
|
|
1159
|
+
recording_configuration_name: typing.Optional[builtins.str] = None,
|
|
1160
|
+
recording_reconnect_window: typing.Optional[_aws_cdk_ceddda9d.Duration] = None,
|
|
1161
|
+
rendition_configuration: typing.Optional["RenditionConfiguration"] = None,
|
|
1162
|
+
thumbnail_configuration: typing.Optional["ThumbnailConfiguration"] = None,
|
|
1163
|
+
) -> None:
|
|
1164
|
+
'''
|
|
1165
|
+
:param scope: -
|
|
1166
|
+
:param id: -
|
|
1167
|
+
:param bucket: (experimental) S3 bucket where recorded videos will be stored.
|
|
1168
|
+
:param recording_configuration_name: (experimental) The name of the Recording configuration. The value does not need to be unique. Default: - auto generate
|
|
1169
|
+
:param recording_reconnect_window: (experimental) If a broadcast disconnects and then reconnects within the specified interval, the multiple streams will be considered a single broadcast and merged together. ``recordingReconnectWindow`` must be between 0 and 300 seconds Default: - 0 seconds (means disabled)
|
|
1170
|
+
:param rendition_configuration: (experimental) A rendition configuration describes which renditions should be recorded for a stream. Default: - no rendition configuration
|
|
1171
|
+
:param thumbnail_configuration: (experimental) A thumbnail configuration enables/disables the recording of thumbnails for a live session and controls the interval at which thumbnails are generated for the live session. Default: - no thumbnail configuration
|
|
1172
|
+
|
|
1173
|
+
:stability: experimental
|
|
1174
|
+
'''
|
|
1175
|
+
if __debug__:
|
|
1176
|
+
type_hints = typing.get_type_hints(_typecheckingstub__84f7bfe030fdaeee83dd169a4320aa71fb0e576e76fac8a6fb5e799d638df503)
|
|
1177
|
+
check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
|
|
1178
|
+
check_type(argname="argument id", value=id, expected_type=type_hints["id"])
|
|
1179
|
+
props = RecordingConfigurationProps(
|
|
1180
|
+
bucket=bucket,
|
|
1181
|
+
recording_configuration_name=recording_configuration_name,
|
|
1182
|
+
recording_reconnect_window=recording_reconnect_window,
|
|
1183
|
+
rendition_configuration=rendition_configuration,
|
|
1184
|
+
thumbnail_configuration=thumbnail_configuration,
|
|
1185
|
+
)
|
|
1186
|
+
|
|
1187
|
+
jsii.create(self.__class__, self, [scope, id, props])
|
|
1188
|
+
|
|
1189
|
+
@jsii.member(jsii_name="fromArn")
|
|
1190
|
+
@builtins.classmethod
|
|
1191
|
+
def from_arn(
|
|
1192
|
+
cls,
|
|
1193
|
+
scope: _constructs_77d1e7e8.Construct,
|
|
1194
|
+
id: builtins.str,
|
|
1195
|
+
recording_configuration_arn: builtins.str,
|
|
1196
|
+
) -> IRecordingConfiguration:
|
|
1197
|
+
'''(experimental) Imports an IVS Recording Configuration from its ARN.
|
|
1198
|
+
|
|
1199
|
+
:param scope: -
|
|
1200
|
+
:param id: -
|
|
1201
|
+
:param recording_configuration_arn: -
|
|
1202
|
+
|
|
1203
|
+
:stability: experimental
|
|
1204
|
+
'''
|
|
1205
|
+
if __debug__:
|
|
1206
|
+
type_hints = typing.get_type_hints(_typecheckingstub__5f6cbd063c6e695eed56d0c9c16dea95fe5f4b2a11e461c72cb33aa8d324e82d)
|
|
1207
|
+
check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
|
|
1208
|
+
check_type(argname="argument id", value=id, expected_type=type_hints["id"])
|
|
1209
|
+
check_type(argname="argument recording_configuration_arn", value=recording_configuration_arn, expected_type=type_hints["recording_configuration_arn"])
|
|
1210
|
+
return typing.cast(IRecordingConfiguration, jsii.sinvoke(cls, "fromArn", [scope, id, recording_configuration_arn]))
|
|
1211
|
+
|
|
1212
|
+
@jsii.member(jsii_name="fromRecordingConfigurationId")
|
|
1213
|
+
@builtins.classmethod
|
|
1214
|
+
def from_recording_configuration_id(
|
|
1215
|
+
cls,
|
|
1216
|
+
scope: _constructs_77d1e7e8.Construct,
|
|
1217
|
+
id: builtins.str,
|
|
1218
|
+
recording_configuration_id: builtins.str,
|
|
1219
|
+
) -> IRecordingConfiguration:
|
|
1220
|
+
'''(experimental) Imports an IVS Recording Configuration from attributes.
|
|
1221
|
+
|
|
1222
|
+
:param scope: -
|
|
1223
|
+
:param id: -
|
|
1224
|
+
:param recording_configuration_id: -
|
|
1225
|
+
|
|
1226
|
+
:stability: experimental
|
|
1227
|
+
'''
|
|
1228
|
+
if __debug__:
|
|
1229
|
+
type_hints = typing.get_type_hints(_typecheckingstub__9c05eebd5485c91c16b38e6bf9c1d896abb2eee019bb8f0da1ec7fa25b69b0d8)
|
|
1230
|
+
check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
|
|
1231
|
+
check_type(argname="argument id", value=id, expected_type=type_hints["id"])
|
|
1232
|
+
check_type(argname="argument recording_configuration_id", value=recording_configuration_id, expected_type=type_hints["recording_configuration_id"])
|
|
1233
|
+
return typing.cast(IRecordingConfiguration, jsii.sinvoke(cls, "fromRecordingConfigurationId", [scope, id, recording_configuration_id]))
|
|
1234
|
+
|
|
1235
|
+
@jsii.python.classproperty
|
|
1236
|
+
@jsii.member(jsii_name="PROPERTY_INJECTION_ID")
|
|
1237
|
+
def PROPERTY_INJECTION_ID(cls) -> builtins.str:
|
|
1238
|
+
'''(experimental) Uniquely identifies this class.
|
|
1239
|
+
|
|
1240
|
+
:stability: experimental
|
|
1241
|
+
'''
|
|
1242
|
+
return typing.cast(builtins.str, jsii.sget(cls, "PROPERTY_INJECTION_ID"))
|
|
1243
|
+
|
|
1244
|
+
@builtins.property
|
|
1245
|
+
@jsii.member(jsii_name="recordingConfigurationArn")
|
|
1246
|
+
def recording_configuration_arn(self) -> builtins.str:
|
|
1247
|
+
'''(experimental) The ARN of the Recording configuration.
|
|
1248
|
+
|
|
1249
|
+
:stability: experimental
|
|
1250
|
+
:attribute: true
|
|
1251
|
+
'''
|
|
1252
|
+
return typing.cast(builtins.str, jsii.get(self, "recordingConfigurationArn"))
|
|
1253
|
+
|
|
1254
|
+
@builtins.property
|
|
1255
|
+
@jsii.member(jsii_name="recordingConfigurationId")
|
|
1256
|
+
def recording_configuration_id(self) -> builtins.str:
|
|
1257
|
+
'''(experimental) The ID of the Recording configuration.
|
|
1258
|
+
|
|
1259
|
+
:stability: experimental
|
|
1260
|
+
:attribute: true
|
|
1261
|
+
'''
|
|
1262
|
+
return typing.cast(builtins.str, jsii.get(self, "recordingConfigurationId"))
|
|
1263
|
+
|
|
1264
|
+
|
|
1265
|
+
@jsii.data_type(
|
|
1266
|
+
jsii_type="@aws-cdk/aws-ivs-alpha.RecordingConfigurationProps",
|
|
1267
|
+
jsii_struct_bases=[],
|
|
1268
|
+
name_mapping={
|
|
1269
|
+
"bucket": "bucket",
|
|
1270
|
+
"recording_configuration_name": "recordingConfigurationName",
|
|
1271
|
+
"recording_reconnect_window": "recordingReconnectWindow",
|
|
1272
|
+
"rendition_configuration": "renditionConfiguration",
|
|
1273
|
+
"thumbnail_configuration": "thumbnailConfiguration",
|
|
1274
|
+
},
|
|
1275
|
+
)
|
|
1276
|
+
class RecordingConfigurationProps:
|
|
1277
|
+
def __init__(
|
|
1278
|
+
self,
|
|
1279
|
+
*,
|
|
1280
|
+
bucket: _aws_cdk_interfaces_aws_s3_ceddda9d.IBucketRef,
|
|
1281
|
+
recording_configuration_name: typing.Optional[builtins.str] = None,
|
|
1282
|
+
recording_reconnect_window: typing.Optional[_aws_cdk_ceddda9d.Duration] = None,
|
|
1283
|
+
rendition_configuration: typing.Optional["RenditionConfiguration"] = None,
|
|
1284
|
+
thumbnail_configuration: typing.Optional["ThumbnailConfiguration"] = None,
|
|
1285
|
+
) -> None:
|
|
1286
|
+
'''(experimental) Properties of the IVS Recording configuration.
|
|
1287
|
+
|
|
1288
|
+
:param bucket: (experimental) S3 bucket where recorded videos will be stored.
|
|
1289
|
+
:param recording_configuration_name: (experimental) The name of the Recording configuration. The value does not need to be unique. Default: - auto generate
|
|
1290
|
+
:param recording_reconnect_window: (experimental) If a broadcast disconnects and then reconnects within the specified interval, the multiple streams will be considered a single broadcast and merged together. ``recordingReconnectWindow`` must be between 0 and 300 seconds Default: - 0 seconds (means disabled)
|
|
1291
|
+
:param rendition_configuration: (experimental) A rendition configuration describes which renditions should be recorded for a stream. Default: - no rendition configuration
|
|
1292
|
+
:param thumbnail_configuration: (experimental) A thumbnail configuration enables/disables the recording of thumbnails for a live session and controls the interval at which thumbnails are generated for the live session. Default: - no thumbnail configuration
|
|
1293
|
+
|
|
1294
|
+
:stability: experimental
|
|
1295
|
+
:exampleMetadata: infused
|
|
1296
|
+
|
|
1297
|
+
Example::
|
|
1298
|
+
|
|
1299
|
+
# recording_bucket: s3.Bucket
|
|
1300
|
+
|
|
1301
|
+
|
|
1302
|
+
recording_configuration = ivs.RecordingConfiguration(self, "RecordingConfiguration",
|
|
1303
|
+
bucket=recording_bucket,
|
|
1304
|
+
|
|
1305
|
+
# set rendition configuration
|
|
1306
|
+
rendition_configuration=ivs.RenditionConfiguration.custom([ivs.Resolution.HD, ivs.Resolution.SD])
|
|
1307
|
+
)
|
|
1308
|
+
'''
|
|
1309
|
+
if __debug__:
|
|
1310
|
+
type_hints = typing.get_type_hints(_typecheckingstub__21d80b5a61c717610ae7eec3eb729c41345980329354b0189415aab6624a4259)
|
|
1311
|
+
check_type(argname="argument bucket", value=bucket, expected_type=type_hints["bucket"])
|
|
1312
|
+
check_type(argname="argument recording_configuration_name", value=recording_configuration_name, expected_type=type_hints["recording_configuration_name"])
|
|
1313
|
+
check_type(argname="argument recording_reconnect_window", value=recording_reconnect_window, expected_type=type_hints["recording_reconnect_window"])
|
|
1314
|
+
check_type(argname="argument rendition_configuration", value=rendition_configuration, expected_type=type_hints["rendition_configuration"])
|
|
1315
|
+
check_type(argname="argument thumbnail_configuration", value=thumbnail_configuration, expected_type=type_hints["thumbnail_configuration"])
|
|
1316
|
+
self._values: typing.Dict[builtins.str, typing.Any] = {
|
|
1317
|
+
"bucket": bucket,
|
|
1318
|
+
}
|
|
1319
|
+
if recording_configuration_name is not None:
|
|
1320
|
+
self._values["recording_configuration_name"] = recording_configuration_name
|
|
1321
|
+
if recording_reconnect_window is not None:
|
|
1322
|
+
self._values["recording_reconnect_window"] = recording_reconnect_window
|
|
1323
|
+
if rendition_configuration is not None:
|
|
1324
|
+
self._values["rendition_configuration"] = rendition_configuration
|
|
1325
|
+
if thumbnail_configuration is not None:
|
|
1326
|
+
self._values["thumbnail_configuration"] = thumbnail_configuration
|
|
1327
|
+
|
|
1328
|
+
@builtins.property
|
|
1329
|
+
def bucket(self) -> _aws_cdk_interfaces_aws_s3_ceddda9d.IBucketRef:
|
|
1330
|
+
'''(experimental) S3 bucket where recorded videos will be stored.
|
|
1331
|
+
|
|
1332
|
+
:stability: experimental
|
|
1333
|
+
'''
|
|
1334
|
+
result = self._values.get("bucket")
|
|
1335
|
+
assert result is not None, "Required property 'bucket' is missing"
|
|
1336
|
+
return typing.cast(_aws_cdk_interfaces_aws_s3_ceddda9d.IBucketRef, result)
|
|
1337
|
+
|
|
1338
|
+
@builtins.property
|
|
1339
|
+
def recording_configuration_name(self) -> typing.Optional[builtins.str]:
|
|
1340
|
+
'''(experimental) The name of the Recording configuration.
|
|
1341
|
+
|
|
1342
|
+
The value does not need to be unique.
|
|
1343
|
+
|
|
1344
|
+
:default: - auto generate
|
|
1345
|
+
|
|
1346
|
+
:stability: experimental
|
|
1347
|
+
'''
|
|
1348
|
+
result = self._values.get("recording_configuration_name")
|
|
1349
|
+
return typing.cast(typing.Optional[builtins.str], result)
|
|
1350
|
+
|
|
1351
|
+
@builtins.property
|
|
1352
|
+
def recording_reconnect_window(self) -> typing.Optional[_aws_cdk_ceddda9d.Duration]:
|
|
1353
|
+
'''(experimental) If a broadcast disconnects and then reconnects within the specified interval, the multiple streams will be considered a single broadcast and merged together.
|
|
1354
|
+
|
|
1355
|
+
``recordingReconnectWindow`` must be between 0 and 300 seconds
|
|
1356
|
+
|
|
1357
|
+
:default: - 0 seconds (means disabled)
|
|
1358
|
+
|
|
1359
|
+
:stability: experimental
|
|
1360
|
+
'''
|
|
1361
|
+
result = self._values.get("recording_reconnect_window")
|
|
1362
|
+
return typing.cast(typing.Optional[_aws_cdk_ceddda9d.Duration], result)
|
|
1363
|
+
|
|
1364
|
+
@builtins.property
|
|
1365
|
+
def rendition_configuration(self) -> typing.Optional["RenditionConfiguration"]:
|
|
1366
|
+
'''(experimental) A rendition configuration describes which renditions should be recorded for a stream.
|
|
1367
|
+
|
|
1368
|
+
:default: - no rendition configuration
|
|
1369
|
+
|
|
1370
|
+
:see: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ivs-recordingconfiguration-renditionconfiguration.html
|
|
1371
|
+
:stability: experimental
|
|
1372
|
+
'''
|
|
1373
|
+
result = self._values.get("rendition_configuration")
|
|
1374
|
+
return typing.cast(typing.Optional["RenditionConfiguration"], result)
|
|
1375
|
+
|
|
1376
|
+
@builtins.property
|
|
1377
|
+
def thumbnail_configuration(self) -> typing.Optional["ThumbnailConfiguration"]:
|
|
1378
|
+
'''(experimental) A thumbnail configuration enables/disables the recording of thumbnails for a live session and controls the interval at which thumbnails are generated for the live session.
|
|
1379
|
+
|
|
1380
|
+
:default: - no thumbnail configuration
|
|
1381
|
+
|
|
1382
|
+
:see: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ivs-recordingconfiguration-thumbnailconfiguration.html
|
|
1383
|
+
:stability: experimental
|
|
1384
|
+
'''
|
|
1385
|
+
result = self._values.get("thumbnail_configuration")
|
|
1386
|
+
return typing.cast(typing.Optional["ThumbnailConfiguration"], result)
|
|
1387
|
+
|
|
1388
|
+
def __eq__(self, rhs: typing.Any) -> builtins.bool:
|
|
1389
|
+
return isinstance(rhs, self.__class__) and rhs._values == self._values
|
|
1390
|
+
|
|
1391
|
+
def __ne__(self, rhs: typing.Any) -> builtins.bool:
|
|
1392
|
+
return not (rhs == self)
|
|
1393
|
+
|
|
1394
|
+
def __repr__(self) -> str:
|
|
1395
|
+
return "RecordingConfigurationProps(%s)" % ", ".join(
|
|
1396
|
+
k + "=" + repr(v) for k, v in self._values.items()
|
|
1397
|
+
)
|
|
1398
|
+
|
|
1399
|
+
|
|
1400
|
+
@jsii.enum(jsii_type="@aws-cdk/aws-ivs-alpha.RecordingMode")
|
|
1401
|
+
class RecordingMode(enum.Enum):
|
|
1402
|
+
'''(experimental) Thumbnail recording mode.
|
|
1403
|
+
|
|
1404
|
+
:stability: experimental
|
|
1405
|
+
'''
|
|
1406
|
+
|
|
1407
|
+
INTERVAL = "INTERVAL"
|
|
1408
|
+
'''(experimental) Use INTERVAL to enable the generation of thumbnails for recorded video at a time interval controlled by the TargetIntervalSeconds property.
|
|
1409
|
+
|
|
1410
|
+
:stability: experimental
|
|
1411
|
+
'''
|
|
1412
|
+
DISABLED = "DISABLED"
|
|
1413
|
+
'''(experimental) Use DISABLED to disable the generation of thumbnails for recorded video.
|
|
1414
|
+
|
|
1415
|
+
:stability: experimental
|
|
1416
|
+
'''
|
|
1417
|
+
|
|
1418
|
+
|
|
1419
|
+
class RenditionConfiguration(
|
|
1420
|
+
metaclass=jsii.JSIIMeta,
|
|
1421
|
+
jsii_type="@aws-cdk/aws-ivs-alpha.RenditionConfiguration",
|
|
1422
|
+
):
|
|
1423
|
+
'''(experimental) Rendition configuration for IVS Recording configuration.
|
|
1424
|
+
|
|
1425
|
+
:stability: experimental
|
|
1426
|
+
:exampleMetadata: infused
|
|
1427
|
+
|
|
1428
|
+
Example::
|
|
1429
|
+
|
|
1430
|
+
# recording_bucket: s3.Bucket
|
|
1431
|
+
|
|
1432
|
+
|
|
1433
|
+
recording_configuration = ivs.RecordingConfiguration(self, "RecordingConfiguration",
|
|
1434
|
+
bucket=recording_bucket,
|
|
1435
|
+
|
|
1436
|
+
# set rendition configuration
|
|
1437
|
+
rendition_configuration=ivs.RenditionConfiguration.custom([ivs.Resolution.HD, ivs.Resolution.SD])
|
|
1438
|
+
)
|
|
1439
|
+
'''
|
|
1440
|
+
|
|
1441
|
+
@jsii.member(jsii_name="all")
|
|
1442
|
+
@builtins.classmethod
|
|
1443
|
+
def all(cls) -> "RenditionConfiguration":
|
|
1444
|
+
'''(experimental) Record all available renditions.
|
|
1445
|
+
|
|
1446
|
+
:stability: experimental
|
|
1447
|
+
'''
|
|
1448
|
+
return typing.cast("RenditionConfiguration", jsii.sinvoke(cls, "all", []))
|
|
1449
|
+
|
|
1450
|
+
@jsii.member(jsii_name="custom")
|
|
1451
|
+
@builtins.classmethod
|
|
1452
|
+
def custom(
|
|
1453
|
+
cls,
|
|
1454
|
+
renditions: typing.Sequence["Resolution"],
|
|
1455
|
+
) -> "RenditionConfiguration":
|
|
1456
|
+
'''(experimental) Record a subset of video renditions.
|
|
1457
|
+
|
|
1458
|
+
:param renditions: A list of which renditions are recorded for a stream.
|
|
1459
|
+
|
|
1460
|
+
:stability: experimental
|
|
1461
|
+
'''
|
|
1462
|
+
if __debug__:
|
|
1463
|
+
type_hints = typing.get_type_hints(_typecheckingstub__72cbe17572adb3a1344760dd6061eca45611a877ad41668210371524b85d90da)
|
|
1464
|
+
check_type(argname="argument renditions", value=renditions, expected_type=type_hints["renditions"])
|
|
1465
|
+
return typing.cast("RenditionConfiguration", jsii.sinvoke(cls, "custom", [renditions]))
|
|
1466
|
+
|
|
1467
|
+
@jsii.member(jsii_name="none")
|
|
1468
|
+
@builtins.classmethod
|
|
1469
|
+
def none(cls) -> "RenditionConfiguration":
|
|
1470
|
+
'''(experimental) Does not record any video.
|
|
1471
|
+
|
|
1472
|
+
:stability: experimental
|
|
1473
|
+
'''
|
|
1474
|
+
return typing.cast("RenditionConfiguration", jsii.sinvoke(cls, "none", []))
|
|
1475
|
+
|
|
1476
|
+
@builtins.property
|
|
1477
|
+
@jsii.member(jsii_name="renditionSelection")
|
|
1478
|
+
def rendition_selection(self) -> "RenditionSelection":
|
|
1479
|
+
'''(experimental) The set of renditions are recorded for a stream.
|
|
1480
|
+
|
|
1481
|
+
:stability: experimental
|
|
1482
|
+
'''
|
|
1483
|
+
return typing.cast("RenditionSelection", jsii.get(self, "renditionSelection"))
|
|
1484
|
+
|
|
1485
|
+
@builtins.property
|
|
1486
|
+
@jsii.member(jsii_name="renditions")
|
|
1487
|
+
def renditions(self) -> typing.Optional[typing.List["Resolution"]]:
|
|
1488
|
+
'''(experimental) A list of which renditions are recorded for a stream.
|
|
1489
|
+
|
|
1490
|
+
If you do not specify this property, no resolution is selected.
|
|
1491
|
+
|
|
1492
|
+
:stability: experimental
|
|
1493
|
+
'''
|
|
1494
|
+
return typing.cast(typing.Optional[typing.List["Resolution"]], jsii.get(self, "renditions"))
|
|
1495
|
+
|
|
1496
|
+
|
|
1497
|
+
@jsii.enum(jsii_type="@aws-cdk/aws-ivs-alpha.RenditionSelection")
|
|
1498
|
+
class RenditionSelection(enum.Enum):
|
|
1499
|
+
'''(experimental) Rendition selection mode.
|
|
1500
|
+
|
|
1501
|
+
:stability: experimental
|
|
1502
|
+
'''
|
|
1503
|
+
|
|
1504
|
+
ALL = "ALL"
|
|
1505
|
+
'''(experimental) Record all available renditions.
|
|
1506
|
+
|
|
1507
|
+
:stability: experimental
|
|
1508
|
+
'''
|
|
1509
|
+
NONE = "NONE"
|
|
1510
|
+
'''(experimental) Does not record any video.
|
|
1511
|
+
|
|
1512
|
+
This option is useful if you just want to record thumbnails.
|
|
1513
|
+
|
|
1514
|
+
:stability: experimental
|
|
1515
|
+
'''
|
|
1516
|
+
CUSTOM = "CUSTOM"
|
|
1517
|
+
'''(experimental) Select a subset of video renditions to record.
|
|
1518
|
+
|
|
1519
|
+
:stability: experimental
|
|
1520
|
+
'''
|
|
1521
|
+
|
|
1522
|
+
|
|
1523
|
+
@jsii.enum(jsii_type="@aws-cdk/aws-ivs-alpha.Resolution")
|
|
1524
|
+
class Resolution(enum.Enum):
|
|
1525
|
+
'''(experimental) Resolution for rendition.
|
|
1526
|
+
|
|
1527
|
+
:stability: experimental
|
|
1528
|
+
:exampleMetadata: infused
|
|
1529
|
+
|
|
1530
|
+
Example::
|
|
1531
|
+
|
|
1532
|
+
# recording_bucket: s3.Bucket
|
|
1533
|
+
|
|
1534
|
+
|
|
1535
|
+
recording_configuration = ivs.RecordingConfiguration(self, "RecordingConfiguration",
|
|
1536
|
+
bucket=recording_bucket,
|
|
1537
|
+
|
|
1538
|
+
# set rendition configuration
|
|
1539
|
+
rendition_configuration=ivs.RenditionConfiguration.custom([ivs.Resolution.HD, ivs.Resolution.SD])
|
|
1540
|
+
)
|
|
1541
|
+
'''
|
|
1542
|
+
|
|
1543
|
+
FULL_HD = "FULL_HD"
|
|
1544
|
+
'''(experimental) Full HD (1080p).
|
|
1545
|
+
|
|
1546
|
+
:stability: experimental
|
|
1547
|
+
'''
|
|
1548
|
+
HD = "HD"
|
|
1549
|
+
'''(experimental) HD (720p).
|
|
1550
|
+
|
|
1551
|
+
:stability: experimental
|
|
1552
|
+
'''
|
|
1553
|
+
SD = "SD"
|
|
1554
|
+
'''(experimental) SD (480p).
|
|
1555
|
+
|
|
1556
|
+
:stability: experimental
|
|
1557
|
+
'''
|
|
1558
|
+
LOWEST_RESOLUTION = "LOWEST_RESOLUTION"
|
|
1559
|
+
'''(experimental) Lowest resolution.
|
|
1560
|
+
|
|
1561
|
+
:stability: experimental
|
|
1562
|
+
'''
|
|
1563
|
+
|
|
1564
|
+
|
|
1565
|
+
@jsii.enum(jsii_type="@aws-cdk/aws-ivs-alpha.Storage")
|
|
1566
|
+
class Storage(enum.Enum):
|
|
1567
|
+
'''(experimental) The format in which thumbnails are recorded for a stream.
|
|
1568
|
+
|
|
1569
|
+
:stability: experimental
|
|
1570
|
+
:exampleMetadata: infused
|
|
1571
|
+
|
|
1572
|
+
Example::
|
|
1573
|
+
|
|
1574
|
+
# recording_bucket: s3.Bucket
|
|
1575
|
+
|
|
1576
|
+
|
|
1577
|
+
recording_configuration = ivs.RecordingConfiguration(self, "RecordingConfiguration",
|
|
1578
|
+
bucket=recording_bucket,
|
|
1579
|
+
|
|
1580
|
+
# set thumbnail settings
|
|
1581
|
+
thumbnail_configuration=ivs.ThumbnailConfiguration.interval(ivs.Resolution.HD, [ivs.Storage.LATEST, ivs.Storage.SEQUENTIAL], Duration.seconds(30))
|
|
1582
|
+
)
|
|
1583
|
+
'''
|
|
1584
|
+
|
|
1585
|
+
SEQUENTIAL = "SEQUENTIAL"
|
|
1586
|
+
'''(experimental) SEQUENTIAL records all generated thumbnails in a serial manner, to the media/thumbnails directory.
|
|
1587
|
+
|
|
1588
|
+
:stability: experimental
|
|
1589
|
+
'''
|
|
1590
|
+
LATEST = "LATEST"
|
|
1591
|
+
'''(experimental) LATEST saves the latest thumbnail in media/thumbnails/latest/thumb.jpg and overwrites it at the interval specified by thumbnailTargetInterval.
|
|
1592
|
+
|
|
1593
|
+
:stability: experimental
|
|
1594
|
+
'''
|
|
1595
|
+
|
|
1596
|
+
|
|
1597
|
+
@jsii.implements(IStreamKey)
|
|
1598
|
+
class StreamKey(
|
|
1599
|
+
_aws_cdk_ceddda9d.Resource,
|
|
1600
|
+
metaclass=jsii.JSIIMeta,
|
|
1601
|
+
jsii_type="@aws-cdk/aws-ivs-alpha.StreamKey",
|
|
578
1602
|
):
|
|
579
1603
|
'''(experimental) A new IVS Stream Key.
|
|
580
1604
|
|
|
@@ -608,6 +1632,15 @@ class StreamKey(
|
|
|
608
1632
|
|
|
609
1633
|
jsii.create(self.__class__, self, [scope, id, props])
|
|
610
1634
|
|
|
1635
|
+
@jsii.python.classproperty
|
|
1636
|
+
@jsii.member(jsii_name="PROPERTY_INJECTION_ID")
|
|
1637
|
+
def PROPERTY_INJECTION_ID(cls) -> builtins.str:
|
|
1638
|
+
'''(experimental) Uniquely identifies this class.
|
|
1639
|
+
|
|
1640
|
+
:stability: experimental
|
|
1641
|
+
'''
|
|
1642
|
+
return typing.cast(builtins.str, jsii.sget(cls, "PROPERTY_INJECTION_ID"))
|
|
1643
|
+
|
|
611
1644
|
@builtins.property
|
|
612
1645
|
@jsii.member(jsii_name="streamKeyArn")
|
|
613
1646
|
def stream_key_arn(self) -> builtins.str:
|
|
@@ -687,6 +1720,105 @@ class StreamKeyProps:
|
|
|
687
1720
|
)
|
|
688
1721
|
|
|
689
1722
|
|
|
1723
|
+
class ThumbnailConfiguration(
|
|
1724
|
+
metaclass=jsii.JSIIMeta,
|
|
1725
|
+
jsii_type="@aws-cdk/aws-ivs-alpha.ThumbnailConfiguration",
|
|
1726
|
+
):
|
|
1727
|
+
'''(experimental) Thumbnail configuration for IVS Recording configuration.
|
|
1728
|
+
|
|
1729
|
+
:stability: experimental
|
|
1730
|
+
:exampleMetadata: infused
|
|
1731
|
+
|
|
1732
|
+
Example::
|
|
1733
|
+
|
|
1734
|
+
# recording_bucket: s3.Bucket
|
|
1735
|
+
|
|
1736
|
+
|
|
1737
|
+
recording_configuration = ivs.RecordingConfiguration(self, "RecordingConfiguration",
|
|
1738
|
+
bucket=recording_bucket,
|
|
1739
|
+
|
|
1740
|
+
# set thumbnail settings
|
|
1741
|
+
thumbnail_configuration=ivs.ThumbnailConfiguration.interval(ivs.Resolution.HD, [ivs.Storage.LATEST, ivs.Storage.SEQUENTIAL], Duration.seconds(30))
|
|
1742
|
+
)
|
|
1743
|
+
'''
|
|
1744
|
+
|
|
1745
|
+
@jsii.member(jsii_name="disable")
|
|
1746
|
+
@builtins.classmethod
|
|
1747
|
+
def disable(cls) -> "ThumbnailConfiguration":
|
|
1748
|
+
'''(experimental) Disable the generation of thumbnails for recorded video.
|
|
1749
|
+
|
|
1750
|
+
:stability: experimental
|
|
1751
|
+
'''
|
|
1752
|
+
return typing.cast("ThumbnailConfiguration", jsii.sinvoke(cls, "disable", []))
|
|
1753
|
+
|
|
1754
|
+
@jsii.member(jsii_name="interval")
|
|
1755
|
+
@builtins.classmethod
|
|
1756
|
+
def interval(
|
|
1757
|
+
cls,
|
|
1758
|
+
resolution: typing.Optional[Resolution] = None,
|
|
1759
|
+
storage: typing.Optional[typing.Sequence[Storage]] = None,
|
|
1760
|
+
target_interval: typing.Optional[_aws_cdk_ceddda9d.Duration] = None,
|
|
1761
|
+
) -> "ThumbnailConfiguration":
|
|
1762
|
+
'''(experimental) Enable the generation of thumbnails for recorded video at a time interval.
|
|
1763
|
+
|
|
1764
|
+
:param resolution: The desired resolution of recorded thumbnails for a stream. If you do not specify this property, same resolution as Input stream is used.
|
|
1765
|
+
:param storage: The format in which thumbnails are recorded for a stream. If you do not specify this property, ``ThumbnailStorage.SEQUENTIAL`` is set.
|
|
1766
|
+
:param target_interval: The targeted thumbnail-generation interval. If you do not specify this property, ``Duration.seconds(60)`` is set.
|
|
1767
|
+
|
|
1768
|
+
:stability: experimental
|
|
1769
|
+
'''
|
|
1770
|
+
if __debug__:
|
|
1771
|
+
type_hints = typing.get_type_hints(_typecheckingstub__7613b92b71ccf7e94fae8fd523b44fd066922450801fcef8848b59ff75f9eeb2)
|
|
1772
|
+
check_type(argname="argument resolution", value=resolution, expected_type=type_hints["resolution"])
|
|
1773
|
+
check_type(argname="argument storage", value=storage, expected_type=type_hints["storage"])
|
|
1774
|
+
check_type(argname="argument target_interval", value=target_interval, expected_type=type_hints["target_interval"])
|
|
1775
|
+
return typing.cast("ThumbnailConfiguration", jsii.sinvoke(cls, "interval", [resolution, storage, target_interval]))
|
|
1776
|
+
|
|
1777
|
+
@builtins.property
|
|
1778
|
+
@jsii.member(jsii_name="recordingMode")
|
|
1779
|
+
def recording_mode(self) -> typing.Optional[RecordingMode]:
|
|
1780
|
+
'''(experimental) Thumbnail recording mode.
|
|
1781
|
+
|
|
1782
|
+
If you do not specify this property, ``ThumbnailRecordingMode.INTERVAL`` is set.
|
|
1783
|
+
|
|
1784
|
+
:stability: experimental
|
|
1785
|
+
'''
|
|
1786
|
+
return typing.cast(typing.Optional[RecordingMode], jsii.get(self, "recordingMode"))
|
|
1787
|
+
|
|
1788
|
+
@builtins.property
|
|
1789
|
+
@jsii.member(jsii_name="resolution")
|
|
1790
|
+
def resolution(self) -> typing.Optional[Resolution]:
|
|
1791
|
+
'''(experimental) The desired resolution of recorded thumbnails for a stream.
|
|
1792
|
+
|
|
1793
|
+
If you do not specify this property, same resolution as Input stream is used.
|
|
1794
|
+
|
|
1795
|
+
:stability: experimental
|
|
1796
|
+
'''
|
|
1797
|
+
return typing.cast(typing.Optional[Resolution], jsii.get(self, "resolution"))
|
|
1798
|
+
|
|
1799
|
+
@builtins.property
|
|
1800
|
+
@jsii.member(jsii_name="storage")
|
|
1801
|
+
def storage(self) -> typing.Optional[typing.List[Storage]]:
|
|
1802
|
+
'''(experimental) The format in which thumbnails are recorded for a stream.
|
|
1803
|
+
|
|
1804
|
+
If you do not specify this property, ``ThumbnailStorage.SEQUENTIAL`` is set.
|
|
1805
|
+
|
|
1806
|
+
:stability: experimental
|
|
1807
|
+
'''
|
|
1808
|
+
return typing.cast(typing.Optional[typing.List[Storage]], jsii.get(self, "storage"))
|
|
1809
|
+
|
|
1810
|
+
@builtins.property
|
|
1811
|
+
@jsii.member(jsii_name="targetInterval")
|
|
1812
|
+
def target_interval(self) -> typing.Optional[_aws_cdk_ceddda9d.Duration]:
|
|
1813
|
+
'''(experimental) The targeted thumbnail-generation interval.
|
|
1814
|
+
|
|
1815
|
+
Must be between 1 and 60 seconds. If you do not specify this property, ``Duration.seconds(60)`` is set.
|
|
1816
|
+
|
|
1817
|
+
:stability: experimental
|
|
1818
|
+
'''
|
|
1819
|
+
return typing.cast(typing.Optional[_aws_cdk_ceddda9d.Duration], jsii.get(self, "targetInterval"))
|
|
1820
|
+
|
|
1821
|
+
|
|
690
1822
|
@jsii.implements(IChannel)
|
|
691
1823
|
class Channel(
|
|
692
1824
|
_aws_cdk_ceddda9d.Resource,
|
|
@@ -700,7 +1832,10 @@ class Channel(
|
|
|
700
1832
|
|
|
701
1833
|
Example::
|
|
702
1834
|
|
|
703
|
-
|
|
1835
|
+
my_rtmp_channel = ivs.Channel(self, "myRtmpChannel",
|
|
1836
|
+
type=ivs.ChannelType.STANDARD,
|
|
1837
|
+
insecure_ingest=True
|
|
1838
|
+
)
|
|
704
1839
|
'''
|
|
705
1840
|
|
|
706
1841
|
def __init__(
|
|
@@ -710,7 +1845,12 @@ class Channel(
|
|
|
710
1845
|
*,
|
|
711
1846
|
authorized: typing.Optional[builtins.bool] = None,
|
|
712
1847
|
channel_name: typing.Optional[builtins.str] = None,
|
|
1848
|
+
container_format: typing.Optional[ContainerFormat] = None,
|
|
1849
|
+
insecure_ingest: typing.Optional[builtins.bool] = None,
|
|
713
1850
|
latency_mode: typing.Optional[LatencyMode] = None,
|
|
1851
|
+
multitrack_input_configuration: typing.Optional[typing.Union[MultitrackInputConfiguration, typing.Dict[builtins.str, typing.Any]]] = None,
|
|
1852
|
+
preset: typing.Optional[Preset] = None,
|
|
1853
|
+
recording_configuration: typing.Optional[IRecordingConfiguration] = None,
|
|
714
1854
|
type: typing.Optional[ChannelType] = None,
|
|
715
1855
|
) -> None:
|
|
716
1856
|
'''
|
|
@@ -718,7 +1858,12 @@ class Channel(
|
|
|
718
1858
|
:param id: -
|
|
719
1859
|
:param authorized: (experimental) Whether the channel is authorized. If you wish to make an authorized channel, you will need to ensure that a PlaybackKeyPair has been uploaded to your account as this is used to validate the signed JWT that is required for authorization Default: false
|
|
720
1860
|
:param channel_name: (experimental) A name for the channel. Default: Automatically generated name
|
|
1861
|
+
:param container_format: (experimental) Indicates which content-packaging format is used (MPEG-TS or fMP4). If ``multitrackInputConfiguration`` is specified, only fMP4 can be used. Otherwise, ``containerFormat`` may be set to ``ContainerFormat.TS`` or ``ContainerFormat.FRAGMENTED_MP4``. Default: - ``ContainerFormat.FRAGMENTED_MP4`` is automatically set when the ``multitrackInputConfiguration`` is specified. If not specified, it remains undefined and uses the IVS default setting (TS).
|
|
1862
|
+
:param insecure_ingest: (experimental) Whether the channel allows insecure RTMP ingest. Default: false
|
|
721
1863
|
:param latency_mode: (experimental) Channel latency mode. Default: LatencyMode.LOW
|
|
1864
|
+
:param multitrack_input_configuration: (experimental) Object specifying multitrack input configuration. You must specify ``multitrackInputConfiguration`` if you want to use MultiTrack Video. ``multitrackInputConfiguration`` is only supported for ``ChannelType.STANDARD``. Default: undefined - IVS default setting is not use MultiTrack Video.
|
|
1865
|
+
:param preset: (experimental) An optional transcode preset for the channel. Can be used for ADVANCED_HD and ADVANCED_SD channel types. When LOW or STANDARD is used, the preset will be overridden and set to none regardless of the value provided. Default: - Preset.HIGHER_BANDWIDTH_DELIVERY if channelType is ADVANCED_SD or ADVANCED_HD, none otherwise
|
|
1866
|
+
:param recording_configuration: (experimental) A recording configuration for the channel. Default: - recording is disabled
|
|
722
1867
|
:param type: (experimental) The channel type, which determines the allowable resolution and bitrate. If you exceed the allowable resolution or bitrate, the stream will disconnect immediately Default: ChannelType.STANDARD
|
|
723
1868
|
|
|
724
1869
|
:stability: experimental
|
|
@@ -730,7 +1875,12 @@ class Channel(
|
|
|
730
1875
|
props = ChannelProps(
|
|
731
1876
|
authorized=authorized,
|
|
732
1877
|
channel_name=channel_name,
|
|
1878
|
+
container_format=container_format,
|
|
1879
|
+
insecure_ingest=insecure_ingest,
|
|
733
1880
|
latency_mode=latency_mode,
|
|
1881
|
+
multitrack_input_configuration=multitrack_input_configuration,
|
|
1882
|
+
preset=preset,
|
|
1883
|
+
recording_configuration=recording_configuration,
|
|
734
1884
|
type=type,
|
|
735
1885
|
)
|
|
736
1886
|
|
|
@@ -772,6 +1922,15 @@ class Channel(
|
|
|
772
1922
|
check_type(argname="argument id", value=id, expected_type=type_hints["id"])
|
|
773
1923
|
return typing.cast(StreamKey, jsii.invoke(self, "addStreamKey", [id]))
|
|
774
1924
|
|
|
1925
|
+
@jsii.python.classproperty
|
|
1926
|
+
@jsii.member(jsii_name="PROPERTY_INJECTION_ID")
|
|
1927
|
+
def PROPERTY_INJECTION_ID(cls) -> builtins.str:
|
|
1928
|
+
'''(experimental) Uniquely identifies this class.
|
|
1929
|
+
|
|
1930
|
+
:stability: experimental
|
|
1931
|
+
'''
|
|
1932
|
+
return typing.cast(builtins.str, jsii.sget(cls, "PROPERTY_INJECTION_ID"))
|
|
1933
|
+
|
|
775
1934
|
@builtins.property
|
|
776
1935
|
@jsii.member(jsii_name="channelArn")
|
|
777
1936
|
def channel_arn(self) -> builtins.str:
|
|
@@ -813,14 +1972,28 @@ __all__ = [
|
|
|
813
1972
|
"Channel",
|
|
814
1973
|
"ChannelProps",
|
|
815
1974
|
"ChannelType",
|
|
1975
|
+
"ContainerFormat",
|
|
816
1976
|
"IChannel",
|
|
817
1977
|
"IPlaybackKeyPair",
|
|
1978
|
+
"IRecordingConfiguration",
|
|
818
1979
|
"IStreamKey",
|
|
819
1980
|
"LatencyMode",
|
|
1981
|
+
"MaximumResolution",
|
|
1982
|
+
"MultitrackInputConfiguration",
|
|
820
1983
|
"PlaybackKeyPair",
|
|
821
1984
|
"PlaybackKeyPairProps",
|
|
1985
|
+
"Policy",
|
|
1986
|
+
"Preset",
|
|
1987
|
+
"RecordingConfiguration",
|
|
1988
|
+
"RecordingConfigurationProps",
|
|
1989
|
+
"RecordingMode",
|
|
1990
|
+
"RenditionConfiguration",
|
|
1991
|
+
"RenditionSelection",
|
|
1992
|
+
"Resolution",
|
|
1993
|
+
"Storage",
|
|
822
1994
|
"StreamKey",
|
|
823
1995
|
"StreamKeyProps",
|
|
1996
|
+
"ThumbnailConfiguration",
|
|
824
1997
|
]
|
|
825
1998
|
|
|
826
1999
|
publication.publish()
|
|
@@ -829,7 +2002,12 @@ def _typecheckingstub__0ebf6a0e98bbd5b88d9676fbe616666a44f837cba80675eade5df1fea
|
|
|
829
2002
|
*,
|
|
830
2003
|
authorized: typing.Optional[builtins.bool] = None,
|
|
831
2004
|
channel_name: typing.Optional[builtins.str] = None,
|
|
2005
|
+
container_format: typing.Optional[ContainerFormat] = None,
|
|
2006
|
+
insecure_ingest: typing.Optional[builtins.bool] = None,
|
|
832
2007
|
latency_mode: typing.Optional[LatencyMode] = None,
|
|
2008
|
+
multitrack_input_configuration: typing.Optional[typing.Union[MultitrackInputConfiguration, typing.Dict[builtins.str, typing.Any]]] = None,
|
|
2009
|
+
preset: typing.Optional[Preset] = None,
|
|
2010
|
+
recording_configuration: typing.Optional[IRecordingConfiguration] = None,
|
|
833
2011
|
type: typing.Optional[ChannelType] = None,
|
|
834
2012
|
) -> None:
|
|
835
2013
|
"""Type checking stubs"""
|
|
@@ -841,6 +2019,14 @@ def _typecheckingstub__809e7d60e77d2ede718027f4d99dcf810db3b33f39daebb557b424c64
|
|
|
841
2019
|
"""Type checking stubs"""
|
|
842
2020
|
pass
|
|
843
2021
|
|
|
2022
|
+
def _typecheckingstub__45e5ad260ecfc7dc92d23bd36a068b4a317871ab3322fe7e7ef92573084ea6b6(
|
|
2023
|
+
*,
|
|
2024
|
+
maximum_resolution: MaximumResolution,
|
|
2025
|
+
policy: Policy,
|
|
2026
|
+
) -> None:
|
|
2027
|
+
"""Type checking stubs"""
|
|
2028
|
+
pass
|
|
2029
|
+
|
|
844
2030
|
def _typecheckingstub__75931c57bc0ba240c98824ea65da9a0bc0a3bc48be2344ac7b70c03f259e632f(
|
|
845
2031
|
scope: _constructs_77d1e7e8.Construct,
|
|
846
2032
|
id: builtins.str,
|
|
@@ -859,6 +2045,52 @@ def _typecheckingstub__5f26b3314acb516329ef76511a5408ac87ae783446cab3f1be9ed1d0b
|
|
|
859
2045
|
"""Type checking stubs"""
|
|
860
2046
|
pass
|
|
861
2047
|
|
|
2048
|
+
def _typecheckingstub__84f7bfe030fdaeee83dd169a4320aa71fb0e576e76fac8a6fb5e799d638df503(
|
|
2049
|
+
scope: _constructs_77d1e7e8.Construct,
|
|
2050
|
+
id: builtins.str,
|
|
2051
|
+
*,
|
|
2052
|
+
bucket: _aws_cdk_interfaces_aws_s3_ceddda9d.IBucketRef,
|
|
2053
|
+
recording_configuration_name: typing.Optional[builtins.str] = None,
|
|
2054
|
+
recording_reconnect_window: typing.Optional[_aws_cdk_ceddda9d.Duration] = None,
|
|
2055
|
+
rendition_configuration: typing.Optional[RenditionConfiguration] = None,
|
|
2056
|
+
thumbnail_configuration: typing.Optional[ThumbnailConfiguration] = None,
|
|
2057
|
+
) -> None:
|
|
2058
|
+
"""Type checking stubs"""
|
|
2059
|
+
pass
|
|
2060
|
+
|
|
2061
|
+
def _typecheckingstub__5f6cbd063c6e695eed56d0c9c16dea95fe5f4b2a11e461c72cb33aa8d324e82d(
|
|
2062
|
+
scope: _constructs_77d1e7e8.Construct,
|
|
2063
|
+
id: builtins.str,
|
|
2064
|
+
recording_configuration_arn: builtins.str,
|
|
2065
|
+
) -> None:
|
|
2066
|
+
"""Type checking stubs"""
|
|
2067
|
+
pass
|
|
2068
|
+
|
|
2069
|
+
def _typecheckingstub__9c05eebd5485c91c16b38e6bf9c1d896abb2eee019bb8f0da1ec7fa25b69b0d8(
|
|
2070
|
+
scope: _constructs_77d1e7e8.Construct,
|
|
2071
|
+
id: builtins.str,
|
|
2072
|
+
recording_configuration_id: builtins.str,
|
|
2073
|
+
) -> None:
|
|
2074
|
+
"""Type checking stubs"""
|
|
2075
|
+
pass
|
|
2076
|
+
|
|
2077
|
+
def _typecheckingstub__21d80b5a61c717610ae7eec3eb729c41345980329354b0189415aab6624a4259(
|
|
2078
|
+
*,
|
|
2079
|
+
bucket: _aws_cdk_interfaces_aws_s3_ceddda9d.IBucketRef,
|
|
2080
|
+
recording_configuration_name: typing.Optional[builtins.str] = None,
|
|
2081
|
+
recording_reconnect_window: typing.Optional[_aws_cdk_ceddda9d.Duration] = None,
|
|
2082
|
+
rendition_configuration: typing.Optional[RenditionConfiguration] = None,
|
|
2083
|
+
thumbnail_configuration: typing.Optional[ThumbnailConfiguration] = None,
|
|
2084
|
+
) -> None:
|
|
2085
|
+
"""Type checking stubs"""
|
|
2086
|
+
pass
|
|
2087
|
+
|
|
2088
|
+
def _typecheckingstub__72cbe17572adb3a1344760dd6061eca45611a877ad41668210371524b85d90da(
|
|
2089
|
+
renditions: typing.Sequence[Resolution],
|
|
2090
|
+
) -> None:
|
|
2091
|
+
"""Type checking stubs"""
|
|
2092
|
+
pass
|
|
2093
|
+
|
|
862
2094
|
def _typecheckingstub__67fad0f56ffbc15680b0f651250d8bb5cf4dacb899e5c5bbf4abdcfc3ae39632(
|
|
863
2095
|
scope: _constructs_77d1e7e8.Construct,
|
|
864
2096
|
id: builtins.str,
|
|
@@ -875,13 +2107,26 @@ def _typecheckingstub__10474702d05a8d909166c4d0ef1de9632d82c17ae609436e3980c1bd4
|
|
|
875
2107
|
"""Type checking stubs"""
|
|
876
2108
|
pass
|
|
877
2109
|
|
|
2110
|
+
def _typecheckingstub__7613b92b71ccf7e94fae8fd523b44fd066922450801fcef8848b59ff75f9eeb2(
|
|
2111
|
+
resolution: typing.Optional[Resolution] = None,
|
|
2112
|
+
storage: typing.Optional[typing.Sequence[Storage]] = None,
|
|
2113
|
+
target_interval: typing.Optional[_aws_cdk_ceddda9d.Duration] = None,
|
|
2114
|
+
) -> None:
|
|
2115
|
+
"""Type checking stubs"""
|
|
2116
|
+
pass
|
|
2117
|
+
|
|
878
2118
|
def _typecheckingstub__07139327925dc97a551bbf17c849a0f698e0c9c60d3da3f65f2b3d2bea0e0c50(
|
|
879
2119
|
scope: _constructs_77d1e7e8.Construct,
|
|
880
2120
|
id: builtins.str,
|
|
881
2121
|
*,
|
|
882
2122
|
authorized: typing.Optional[builtins.bool] = None,
|
|
883
2123
|
channel_name: typing.Optional[builtins.str] = None,
|
|
2124
|
+
container_format: typing.Optional[ContainerFormat] = None,
|
|
2125
|
+
insecure_ingest: typing.Optional[builtins.bool] = None,
|
|
884
2126
|
latency_mode: typing.Optional[LatencyMode] = None,
|
|
2127
|
+
multitrack_input_configuration: typing.Optional[typing.Union[MultitrackInputConfiguration, typing.Dict[builtins.str, typing.Any]]] = None,
|
|
2128
|
+
preset: typing.Optional[Preset] = None,
|
|
2129
|
+
recording_configuration: typing.Optional[IRecordingConfiguration] = None,
|
|
885
2130
|
type: typing.Optional[ChannelType] = None,
|
|
886
2131
|
) -> None:
|
|
887
2132
|
"""Type checking stubs"""
|
|
@@ -900,3 +2145,6 @@ def _typecheckingstub__65e1f25de7c3a0e391031082a65ee02865e1f85fe29f43a74bbc59866
|
|
|
900
2145
|
) -> None:
|
|
901
2146
|
"""Type checking stubs"""
|
|
902
2147
|
pass
|
|
2148
|
+
|
|
2149
|
+
for cls in [IChannel, IPlaybackKeyPair, IRecordingConfiguration, IStreamKey]:
|
|
2150
|
+
typing.cast(typing.Any, cls).__protocol_attrs__ = typing.cast(typing.Any, cls).__protocol_attrs__ - set(['__jsii_proxy_class__', '__jsii_type__'])
|