aws-sdk-kinesisvideoarchivedmedia 1.1.0 → 1.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9265abd211e9d699e897a757676fb061db3f0662
4
- data.tar.gz: ceb3b79ac1d7414310f03e990060ebdf22887d36
3
+ metadata.gz: 94844d8f11bcddb68a3dfa0b9284275ee0793cc7
4
+ data.tar.gz: 53f46ecb5f44556da15c49a17a2a14011dfcbff0
5
5
  SHA512:
6
- metadata.gz: c4fe3937f182d949a6a7fc3cef1c10d4b4544eb18070c29d0a057c3bca194b9e4eb9effb98dac8915d4538d9397097bc0e621123d257650362e00f4145b5c947
7
- data.tar.gz: 57cd750819ec9ac4c0e2b98da1164a4333cfaab730071d4c4d46a1fcd4eaf7364e6546b5bbe8d8da8ffcbd15cb6fbe9e0f04ab21cfbf8ff50d3fa7b1e2ed9cb2
6
+ metadata.gz: eb78af1d98d4018ab6bcd53a298467323763d444f30c6ee1e30ecc34ead1b72a9cdf15dc73bdddd21e983267fc4f029111cea6a0274c7e07b35c385790f21a9d
7
+ data.tar.gz: c31a95a2fdc968864f687c4b28343f210506770f50d62bbcc7a330725e53f1be2b9d443f53f03544daa1aea4417fefa6a1f93da5157b7bb9ef4a5e236e6d8394
@@ -42,6 +42,6 @@ require_relative 'aws-sdk-kinesisvideoarchivedmedia/customizations'
42
42
  # @service
43
43
  module Aws::KinesisVideoArchivedMedia
44
44
 
45
- GEM_VERSION = '1.1.0'
45
+ GEM_VERSION = '1.2.0'
46
46
 
47
47
  end
@@ -156,14 +156,308 @@ module Aws::KinesisVideoArchivedMedia
156
156
 
157
157
  # @!group API Operations
158
158
 
159
- # Gets media for a list of fragments (specified by fragment number) from
160
- # the archived data in a Kinesis video stream.
161
- #
162
- # <note markdown="1"> This operation is only available for the AWS SDK for Java. It is not
163
- # supported in AWS SDKs for other languages.
159
+ # Retrieves an HTTP Live Streaming (HLS) URL for the stream. You can
160
+ # then open the URL in a browser or media player to view the stream
161
+ # contents.
162
+ #
163
+ # You must specify either the `StreamName` or the `StreamARN`.
164
+ #
165
+ # An Amazon Kinesis video stream has the following requirements for
166
+ # providing data through HLS:
167
+ #
168
+ # * The media type must be `video/h264`.
169
+ #
170
+ # * Data retention must be greater than 0.
171
+ #
172
+ # * The fragments must contain codec private data in the AVC (Advanced
173
+ # Video Coding) for H.264 format ([MPEG-4 specification ISO/IEC
174
+ # 14496-15][1]). For information about adapting stream data to a given
175
+ # format, see [NAL Adaptation Flags][2].
176
+ #
177
+ # Kinesis Video Streams HLS sessions contain fragments in the fragmented
178
+ # MPEG-4 form (also called fMP4 or CMAF), rather than the MPEG-2 form
179
+ # (also called TS chunks, which the HLS specification also supports).
180
+ # For more information about HLS fragment types, see the [HLS
181
+ # specification][3].
182
+ #
183
+ # The following procedure shows how to use HLS with Kinesis Video
184
+ # Streams:
185
+ #
186
+ # 1. Get an endpoint using [GetDataEndpoint][4], specifying
187
+ # `GET_HLS_STREAMING_SESSION_URL` for the `APIName` parameter.
188
+ #
189
+ # 2. Retrieve the HLS URL using `GetHLSStreamingSessionURL`. Kinesis
190
+ # Video Streams creates an HLS streaming session to be used for
191
+ # accessing content in a stream using the HLS protocol.
192
+ # `GetHLSStreamingSessionURL` returns an authenticated URL (that
193
+ # includes an encrypted session token) for the session's HLS
194
+ # *master playlist* (the root resource needed for streaming with
195
+ # HLS).
196
+ #
197
+ # <note markdown="1"> Don't share or store this token where an unauthorized entity
198
+ # could access it. The token provides access to the content of the
199
+ # stream. Safeguard the token with the same measures that you would
200
+ # use with your AWS credentials.
201
+ #
202
+ # </note>
203
+ #
204
+ # The media that is made available through the playlist consists
205
+ # only of the requested stream, time range, and format. No other
206
+ # media data (such as frames outside the requested window or
207
+ # alternate bit rates) is made available.
208
+ #
209
+ # 3. Provide the URL (containing the encrypted session token) for the
210
+ # HLS master playlist to a media player that supports the HLS
211
+ # protocol. Kinesis Video Streams makes the HLS media playlist,
212
+ # initialization fragment, and media fragments available through the
213
+ # master playlist URL. The initialization fragment contains the
214
+ # codec private data for the stream, and other data needed to set up
215
+ # the video decoder and renderer. The media fragments contain
216
+ # H.264-encoded video frames and time stamps.
217
+ #
218
+ # 4. The media player receives the authenticated URL and requests
219
+ # stream metadata and media data normally. When the media player
220
+ # requests data, it calls the following actions:
221
+ #
222
+ # * **GetHLSMasterPlaylist:** Retrieves an HLS master playlist,
223
+ # which contains a URL for the `GetHLSMediaPlaylist` action, and
224
+ # additional metadata for the media player, including estimated
225
+ # bit rate and resolution.
226
+ #
227
+ # * **GetHLSMediaPlaylist:** Retrieves an HLS media playlist, which
228
+ # contains a URL to access the MP4 initialization fragment with
229
+ # the `GetMP4InitFragment` action, and URLs to access the MP4
230
+ # media fragments with the `GetMP4MediaFragment` actions. The HLS
231
+ # media playlist also contains metadata about the stream that the
232
+ # player needs to play it, such as whether the `PlaybackMode` is
233
+ # `LIVE` or `ON_DEMAND`. The HLS media playlist is typically
234
+ # static for sessions with a `PlaybackType` of `ON_DEMAND`. The
235
+ # HLS media playlist is continually updated with new fragments for
236
+ # sessions with a `PlaybackType` of `LIVE`.
237
+ #
238
+ # * **GetMP4InitFragment:** Retrieves the MP4 initialization
239
+ # fragment. The media player typically loads the initialization
240
+ # fragment before loading any media fragments. This fragment
241
+ # contains the "`fytp`" and "`moov`" MP4 atoms, and the child
242
+ # atoms that are needed to initialize the media player decoder.
243
+ #
244
+ # The initialization fragment does not correspond to a fragment in
245
+ # a Kinesis video stream. It contains only the codec private data
246
+ # for the stream, which the media player needs to decode video
247
+ # frames.
248
+ #
249
+ # * **GetMP4MediaFragment:** Retrieves MP4 media fragments. These
250
+ # fragments contain the "`moof`" and "`mdat`" MP4 atoms and
251
+ # their child atoms, containing the encoded fragment's video
252
+ # frames and their time stamps.
253
+ #
254
+ # <note markdown="1"> After the first media fragment is made available in a streaming
255
+ # session, any fragments that don't contain the same codec
256
+ # private data are excluded in the HLS media playlist. Therefore,
257
+ # the codec private data does not change between fragments in a
258
+ # session.
259
+ #
260
+ # </note>
261
+ #
262
+ # Data retrieved with this action is billable. See
263
+ # [Pricing](aws.amazon.comkinesis/video-streams/pricing/) for
264
+ # details.
265
+ #
266
+ # <note markdown="1"> The following restrictions apply to HLS sessions:
267
+ #
268
+ # * A streaming session URL should not be shared between players. The
269
+ # service might throttle a session if multiple media players are
270
+ # sharing it. For connection limits, see [Kinesis Video Streams
271
+ # Limits][5].
272
+ #
273
+ # * A Kinesis video stream can have a maximum of five active HLS
274
+ # streaming sessions. If a new session is created when the maximum
275
+ # number of sessions is already active, the oldest (earliest created)
276
+ # session is closed. The number of active `GetMedia` connections on a
277
+ # Kinesis video stream does not count against this limit, and the
278
+ # number of active HLS sessions does not count against the active
279
+ # `GetMedia` connection limit.
164
280
  #
165
281
  # </note>
166
282
  #
283
+ # You can monitor the amount of data that the media player consumes by
284
+ # monitoring the `GetMP4MediaFragment.OutgoingBytes` Amazon CloudWatch
285
+ # metric. For information about using CloudWatch to monitor Kinesis
286
+ # Video Streams, see [Monitoring Kinesis Video Streams][6]. For pricing
287
+ # information, see [Amazon Kinesis Video Streams Pricing][7] and [AWS
288
+ # Pricing][8]. Charges for both HLS sessions and outgoing AWS data
289
+ # apply.
290
+ #
291
+ # For more information about HLS, see [HTTP Live Streaming][9] on the
292
+ # [Apple Developer site][10].
293
+ #
294
+ #
295
+ #
296
+ # [1]: https://www.iso.org/standard/55980.html
297
+ # [2]: http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/latest/dg/producer-reference-nal.html
298
+ # [3]: https://tools.ietf.org/html/draft-pantos-http-live-streaming-23
299
+ # [4]: http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_GetDataEndpoint.html
300
+ # [5]: http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/limits.html
301
+ # [6]: http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/monitoring.html
302
+ # [7]: https://aws.amazon.com/kinesis/video-streams/pricing/
303
+ # [8]: https://aws.amazon.com/pricing/
304
+ # [9]: https://developer.apple.com/streaming/
305
+ # [10]: https://developer.apple.com
306
+ #
307
+ # @option params [String] :stream_name
308
+ # The name of the stream for which to retrieve the HLS master playlist
309
+ # URL.
310
+ #
311
+ # You must specify either the `StreamName` or the `StreamARN`.
312
+ #
313
+ # @option params [String] :stream_arn
314
+ # The Amazon Resource Name (ARN) of the stream for which to retrieve the
315
+ # HLS master playlist URL.
316
+ #
317
+ # You must specify either the `StreamName` or the `StreamARN`.
318
+ #
319
+ # @option params [String] :playback_mode
320
+ # Whether to retrieve live or archived, on-demand data.
321
+ #
322
+ # Features of the two types of session include the following:
323
+ #
324
+ # * <b> <code>LIVE</code> </b>\: For sessions of this type, the HLS
325
+ # media playlist is continually updated with the latest fragments as
326
+ # they become available. We recommend that the media player retrieve a
327
+ # new playlist on a one-second interval. When this type of session is
328
+ # played in a media player, the user interface typically displays a
329
+ # "live" notification, with no scrubber control for choosing the
330
+ # position in the playback window to display.
331
+ #
332
+ # <note markdown="1"> In `LIVE` mode, the newest available fragments are included in an
333
+ # HLS media playlist, even if there is a gap between fragments (that
334
+ # is, if a fragment is missing). A gap like this might cause a media
335
+ # player to halt or cause a jump in playback. In this mode, fragments
336
+ # are not added to the HLS media playlist if they are older than the
337
+ # newest fragment in the playlist. If the missing fragment becomes
338
+ # available after a subsequent fragment is added to the playlist, the
339
+ # older fragment is not added, and the gap is not filled.
340
+ #
341
+ # </note>
342
+ #
343
+ # * <b> <code>ON_DEMAND</code> </b>\: For sessions of this type, the HLS
344
+ # media playlist contains all the fragments for the session, up to the
345
+ # number that is specified in `MaxMediaPlaylistFragmentResults`. The
346
+ # playlist must be retrieved only once for each session. When this
347
+ # type of session is played in a media player, the user interface
348
+ # typically displays a scrubber control for choosing the position in
349
+ # the playback window to display.
350
+ #
351
+ # In both playback modes, if `FragmentSelectorType` is
352
+ # `PRODUCER_TIMESTAMP`, and if there are multiple fragments with the
353
+ # same start time stamp, the fragment that has the larger fragment
354
+ # number (that is, the newer fragment) is included in the HLS media
355
+ # playlist. The other fragments are not included. Fragments that have
356
+ # different time stamps but have overlapping durations are still
357
+ # included in the HLS media playlist. This can lead to unexpected
358
+ # behavior in the media player.
359
+ #
360
+ # The default is `LIVE`.
361
+ #
362
+ # @option params [Types::HLSFragmentSelector] :hls_fragment_selector
363
+ # The time range of the requested fragment, and the source of the time
364
+ # stamps.
365
+ #
366
+ # This parameter is required if `PlaybackMode` is `ON_DEMAND`. This
367
+ # parameter is optional if `PlaybackMode` is `LIVE`. If `PlaybackMode`
368
+ # is `LIVE`, the `FragmentSelectorType` can be set, but the
369
+ # `TimestampRange` should not be set. If `PlaybackMode` is `ON_DEMAND`,
370
+ # both `FragmentSelectorType` and `TimestampRange` must be set.
371
+ #
372
+ # @option params [String] :discontinuity_mode
373
+ # Specifies when flags marking discontinuities between fragments will be
374
+ # added to the media playlists. The default is `ALWAYS` when
375
+ # HLSFragmentSelector is `SERVER_TIMESTAMP`, and `NEVER` when it is
376
+ # `PRODUCER_TIMESTAMP`.
377
+ #
378
+ # Media players typically build a timeline of media content to play,
379
+ # based on the time stamps of each fragment. This means that if there is
380
+ # any overlap between fragments (as is typical if HLSFragmentSelector is
381
+ # `SERVER_TIMESTAMP`), the media player timeline has small gaps between
382
+ # fragments in some places, and overwrites frames in other places. When
383
+ # there are discontinuity flags between fragments, the media player is
384
+ # expected to reset the timeline, resulting in the fragment being played
385
+ # immediately after the previous fragment. We recommend that you always
386
+ # have discontinuity flags between fragments if the fragment time stamps
387
+ # are not accurate or if fragments might be missing. You should not
388
+ # place discontinuity flags between fragments for the player timeline to
389
+ # accurately map to the producer time stamps.
390
+ #
391
+ # @option params [Integer] :expires
392
+ # The time in seconds until the requested session expires. This value
393
+ # can be between 300 (5 minutes) and 43200 (12 hours).
394
+ #
395
+ # When a session expires, no new calls to `GetHLSMasterPlaylist`,
396
+ # `GetHLSMediaPlaylist`, `GetMP4InitFragment`, or `GetMP4MediaFragment`
397
+ # can be made for that session.
398
+ #
399
+ # The default is 300 (5 minutes).
400
+ #
401
+ # @option params [Integer] :max_media_playlist_fragment_results
402
+ # The maximum number of fragments that are returned in the HLS media
403
+ # playlists.
404
+ #
405
+ # When the `PlaybackMode` is `LIVE`, the most recent fragments are
406
+ # returned up to this value. When the `PlaybackMode` is `ON_DEMAND`, the
407
+ # oldest fragments are returned, up to this maximum number.
408
+ #
409
+ # When there are a higher number of fragments available in a live HLS
410
+ # media playlist, video players often buffer content before starting
411
+ # playback. Increasing the buffer size increases the playback latency,
412
+ # but it decreases the likelihood that rebuffering will occur during
413
+ # playback. We recommend that a live HLS media playlist have a minimum
414
+ # of 3 fragments and a maximum of 10 fragments.
415
+ #
416
+ # The default is 5 fragments if `PlaybackMode` is `LIVE`, and 1,000 if
417
+ # `PlaybackMode` is `ON_DEMAND`.
418
+ #
419
+ # The maximum value of 1,000 fragments corresponds to more than 16
420
+ # minutes of video on streams with 1-second fragments, and more than 2
421
+ # 1/2 hours of video on streams with 10-second fragments.
422
+ #
423
+ # @return [Types::GetHLSStreamingSessionURLOutput] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
424
+ #
425
+ # * {Types::GetHLSStreamingSessionURLOutput#hls_streaming_session_url #hls_streaming_session_url} => String
426
+ #
427
+ # @example Request syntax with placeholder values
428
+ #
429
+ # resp = client.get_hls_streaming_session_url({
430
+ # stream_name: "StreamName",
431
+ # stream_arn: "ResourceARN",
432
+ # playback_mode: "LIVE", # accepts LIVE, ON_DEMAND
433
+ # hls_fragment_selector: {
434
+ # fragment_selector_type: "PRODUCER_TIMESTAMP", # accepts PRODUCER_TIMESTAMP, SERVER_TIMESTAMP
435
+ # timestamp_range: {
436
+ # start_timestamp: Time.now,
437
+ # end_timestamp: Time.now,
438
+ # },
439
+ # },
440
+ # discontinuity_mode: "ALWAYS", # accepts ALWAYS, NEVER
441
+ # expires: 1,
442
+ # max_media_playlist_fragment_results: 1,
443
+ # })
444
+ #
445
+ # @example Response structure
446
+ #
447
+ # resp.hls_streaming_session_url #=> String
448
+ #
449
+ # @see http://docs.aws.amazon.com/goto/WebAPI/kinesis-video-archived-media-2017-09-30/GetHLSStreamingSessionURL AWS API Documentation
450
+ #
451
+ # @overload get_hls_streaming_session_url(params = {})
452
+ # @param [Hash] params ({})
453
+ def get_hls_streaming_session_url(params = {}, options = {})
454
+ req = build_request(:get_hls_streaming_session_url, params)
455
+ req.send_request(options)
456
+ end
457
+
458
+ # Gets media for a list of fragments (specified by fragment number) from
459
+ # the archived data in an Amazon Kinesis video stream.
460
+ #
167
461
  # The following limits apply when using the `GetMediaForFragmentList`
168
462
  # API:
169
463
  #
@@ -279,7 +573,7 @@ module Aws::KinesisVideoArchivedMedia
279
573
  params: params,
280
574
  config: config)
281
575
  context[:gem_name] = 'aws-sdk-kinesisvideoarchivedmedia'
282
- context[:gem_version] = '1.1.0'
576
+ context[:gem_version] = '1.2.0'
283
577
  Seahorse::Client::Request.new(handlers, context)
284
578
  end
285
579
 
@@ -13,27 +13,41 @@ module Aws::KinesisVideoArchivedMedia
13
13
 
14
14
  ClientLimitExceededException = Shapes::StructureShape.new(name: 'ClientLimitExceededException')
15
15
  ContentType = Shapes::StringShape.new(name: 'ContentType')
16
+ DiscontinuityMode = Shapes::StringShape.new(name: 'DiscontinuityMode')
16
17
  ErrorMessage = Shapes::StringShape.new(name: 'ErrorMessage')
18
+ Expires = Shapes::IntegerShape.new(name: 'Expires')
17
19
  Fragment = Shapes::StructureShape.new(name: 'Fragment')
18
20
  FragmentList = Shapes::ListShape.new(name: 'FragmentList')
19
21
  FragmentNumberList = Shapes::ListShape.new(name: 'FragmentNumberList')
20
22
  FragmentNumberString = Shapes::StringShape.new(name: 'FragmentNumberString')
21
23
  FragmentSelector = Shapes::StructureShape.new(name: 'FragmentSelector')
22
24
  FragmentSelectorType = Shapes::StringShape.new(name: 'FragmentSelectorType')
25
+ GetHLSStreamingSessionURLInput = Shapes::StructureShape.new(name: 'GetHLSStreamingSessionURLInput')
26
+ GetHLSStreamingSessionURLOutput = Shapes::StructureShape.new(name: 'GetHLSStreamingSessionURLOutput')
23
27
  GetMediaForFragmentListInput = Shapes::StructureShape.new(name: 'GetMediaForFragmentListInput')
24
28
  GetMediaForFragmentListOutput = Shapes::StructureShape.new(name: 'GetMediaForFragmentListOutput')
29
+ HLSFragmentSelector = Shapes::StructureShape.new(name: 'HLSFragmentSelector')
30
+ HLSFragmentSelectorType = Shapes::StringShape.new(name: 'HLSFragmentSelectorType')
31
+ HLSStreamingSessionURL = Shapes::StringShape.new(name: 'HLSStreamingSessionURL')
32
+ HLSTimestampRange = Shapes::StructureShape.new(name: 'HLSTimestampRange')
25
33
  InvalidArgumentException = Shapes::StructureShape.new(name: 'InvalidArgumentException')
34
+ InvalidCodecPrivateDataException = Shapes::StructureShape.new(name: 'InvalidCodecPrivateDataException')
26
35
  ListFragmentsInput = Shapes::StructureShape.new(name: 'ListFragmentsInput')
27
36
  ListFragmentsOutput = Shapes::StructureShape.new(name: 'ListFragmentsOutput')
28
37
  Long = Shapes::IntegerShape.new(name: 'Long')
38
+ MissingCodecPrivateDataException = Shapes::StructureShape.new(name: 'MissingCodecPrivateDataException')
39
+ NoDataRetentionException = Shapes::StructureShape.new(name: 'NoDataRetentionException')
29
40
  NotAuthorizedException = Shapes::StructureShape.new(name: 'NotAuthorizedException')
30
41
  PageLimit = Shapes::IntegerShape.new(name: 'PageLimit')
31
42
  Payload = Shapes::BlobShape.new(name: 'Payload')
43
+ PlaybackMode = Shapes::StringShape.new(name: 'PlaybackMode')
44
+ ResourceARN = Shapes::StringShape.new(name: 'ResourceARN')
32
45
  ResourceNotFoundException = Shapes::StructureShape.new(name: 'ResourceNotFoundException')
33
46
  StreamName = Shapes::StringShape.new(name: 'StreamName')
34
47
  String = Shapes::StringShape.new(name: 'String')
35
48
  Timestamp = Shapes::TimestampShape.new(name: 'Timestamp')
36
49
  TimestampRange = Shapes::StructureShape.new(name: 'TimestampRange')
50
+ UnsupportedStreamMediaTypeException = Shapes::StructureShape.new(name: 'UnsupportedStreamMediaTypeException')
37
51
 
38
52
  Fragment.add_member(:fragment_number, Shapes::ShapeRef.new(shape: String, location_name: "FragmentNumber"))
39
53
  Fragment.add_member(:fragment_size_in_bytes, Shapes::ShapeRef.new(shape: Long, location_name: "FragmentSizeInBytes"))
@@ -50,6 +64,18 @@ module Aws::KinesisVideoArchivedMedia
50
64
  FragmentSelector.add_member(:timestamp_range, Shapes::ShapeRef.new(shape: TimestampRange, required: true, location_name: "TimestampRange"))
51
65
  FragmentSelector.struct_class = Types::FragmentSelector
52
66
 
67
+ GetHLSStreamingSessionURLInput.add_member(:stream_name, Shapes::ShapeRef.new(shape: StreamName, location_name: "StreamName"))
68
+ GetHLSStreamingSessionURLInput.add_member(:stream_arn, Shapes::ShapeRef.new(shape: ResourceARN, location_name: "StreamARN"))
69
+ GetHLSStreamingSessionURLInput.add_member(:playback_mode, Shapes::ShapeRef.new(shape: PlaybackMode, location_name: "PlaybackMode"))
70
+ GetHLSStreamingSessionURLInput.add_member(:hls_fragment_selector, Shapes::ShapeRef.new(shape: HLSFragmentSelector, location_name: "HLSFragmentSelector"))
71
+ GetHLSStreamingSessionURLInput.add_member(:discontinuity_mode, Shapes::ShapeRef.new(shape: DiscontinuityMode, location_name: "DiscontinuityMode"))
72
+ GetHLSStreamingSessionURLInput.add_member(:expires, Shapes::ShapeRef.new(shape: Expires, location_name: "Expires"))
73
+ GetHLSStreamingSessionURLInput.add_member(:max_media_playlist_fragment_results, Shapes::ShapeRef.new(shape: PageLimit, location_name: "MaxMediaPlaylistFragmentResults"))
74
+ GetHLSStreamingSessionURLInput.struct_class = Types::GetHLSStreamingSessionURLInput
75
+
76
+ GetHLSStreamingSessionURLOutput.add_member(:hls_streaming_session_url, Shapes::ShapeRef.new(shape: HLSStreamingSessionURL, location_name: "HLSStreamingSessionURL"))
77
+ GetHLSStreamingSessionURLOutput.struct_class = Types::GetHLSStreamingSessionURLOutput
78
+
53
79
  GetMediaForFragmentListInput.add_member(:stream_name, Shapes::ShapeRef.new(shape: StreamName, required: true, location_name: "StreamName"))
54
80
  GetMediaForFragmentListInput.add_member(:fragments, Shapes::ShapeRef.new(shape: FragmentNumberList, required: true, location_name: "Fragments"))
55
81
  GetMediaForFragmentListInput.struct_class = Types::GetMediaForFragmentListInput
@@ -60,6 +86,14 @@ module Aws::KinesisVideoArchivedMedia
60
86
  GetMediaForFragmentListOutput[:payload] = :payload
61
87
  GetMediaForFragmentListOutput[:payload_member] = GetMediaForFragmentListOutput.member(:payload)
62
88
 
89
+ HLSFragmentSelector.add_member(:fragment_selector_type, Shapes::ShapeRef.new(shape: HLSFragmentSelectorType, location_name: "FragmentSelectorType"))
90
+ HLSFragmentSelector.add_member(:timestamp_range, Shapes::ShapeRef.new(shape: HLSTimestampRange, location_name: "TimestampRange"))
91
+ HLSFragmentSelector.struct_class = Types::HLSFragmentSelector
92
+
93
+ HLSTimestampRange.add_member(:start_timestamp, Shapes::ShapeRef.new(shape: Timestamp, location_name: "StartTimestamp"))
94
+ HLSTimestampRange.add_member(:end_timestamp, Shapes::ShapeRef.new(shape: Timestamp, location_name: "EndTimestamp"))
95
+ HLSTimestampRange.struct_class = Types::HLSTimestampRange
96
+
63
97
  ListFragmentsInput.add_member(:stream_name, Shapes::ShapeRef.new(shape: StreamName, required: true, location_name: "StreamName"))
64
98
  ListFragmentsInput.add_member(:max_results, Shapes::ShapeRef.new(shape: PageLimit, location_name: "MaxResults"))
65
99
  ListFragmentsInput.add_member(:next_token, Shapes::ShapeRef.new(shape: String, location_name: "NextToken"))
@@ -87,6 +121,22 @@ module Aws::KinesisVideoArchivedMedia
87
121
  "signatureVersion" => "v4",
88
122
  }
89
123
 
124
+ api.add_operation(:get_hls_streaming_session_url, Seahorse::Model::Operation.new.tap do |o|
125
+ o.name = "GetHLSStreamingSessionURL"
126
+ o.http_method = "POST"
127
+ o.http_request_uri = "/getHLSStreamingSessionURL"
128
+ o.input = Shapes::ShapeRef.new(shape: GetHLSStreamingSessionURLInput)
129
+ o.output = Shapes::ShapeRef.new(shape: GetHLSStreamingSessionURLOutput)
130
+ o.errors << Shapes::ShapeRef.new(shape: ResourceNotFoundException)
131
+ o.errors << Shapes::ShapeRef.new(shape: InvalidArgumentException)
132
+ o.errors << Shapes::ShapeRef.new(shape: ClientLimitExceededException)
133
+ o.errors << Shapes::ShapeRef.new(shape: NotAuthorizedException)
134
+ o.errors << Shapes::ShapeRef.new(shape: UnsupportedStreamMediaTypeException)
135
+ o.errors << Shapes::ShapeRef.new(shape: NoDataRetentionException)
136
+ o.errors << Shapes::ShapeRef.new(shape: MissingCodecPrivateDataException)
137
+ o.errors << Shapes::ShapeRef.new(shape: InvalidCodecPrivateDataException)
138
+ end)
139
+
90
140
  api.add_operation(:get_media_for_fragment_list, Seahorse::Model::Operation.new.tap do |o|
91
141
  o.name = "GetMediaForFragmentList"
92
142
  o.http_method = "POST"
@@ -73,6 +73,177 @@ module Aws::KinesisVideoArchivedMedia
73
73
  include Aws::Structure
74
74
  end
75
75
 
76
+ # @note When making an API call, you may pass GetHLSStreamingSessionURLInput
77
+ # data as a hash:
78
+ #
79
+ # {
80
+ # stream_name: "StreamName",
81
+ # stream_arn: "ResourceARN",
82
+ # playback_mode: "LIVE", # accepts LIVE, ON_DEMAND
83
+ # hls_fragment_selector: {
84
+ # fragment_selector_type: "PRODUCER_TIMESTAMP", # accepts PRODUCER_TIMESTAMP, SERVER_TIMESTAMP
85
+ # timestamp_range: {
86
+ # start_timestamp: Time.now,
87
+ # end_timestamp: Time.now,
88
+ # },
89
+ # },
90
+ # discontinuity_mode: "ALWAYS", # accepts ALWAYS, NEVER
91
+ # expires: 1,
92
+ # max_media_playlist_fragment_results: 1,
93
+ # }
94
+ #
95
+ # @!attribute [rw] stream_name
96
+ # The name of the stream for which to retrieve the HLS master playlist
97
+ # URL.
98
+ #
99
+ # You must specify either the `StreamName` or the `StreamARN`.
100
+ # @return [String]
101
+ #
102
+ # @!attribute [rw] stream_arn
103
+ # The Amazon Resource Name (ARN) of the stream for which to retrieve
104
+ # the HLS master playlist URL.
105
+ #
106
+ # You must specify either the `StreamName` or the `StreamARN`.
107
+ # @return [String]
108
+ #
109
+ # @!attribute [rw] playback_mode
110
+ # Whether to retrieve live or archived, on-demand data.
111
+ #
112
+ # Features of the two types of session include the following:
113
+ #
114
+ # * <b> <code>LIVE</code> </b>\: For sessions of this type, the HLS
115
+ # media playlist is continually updated with the latest fragments as
116
+ # they become available. We recommend that the media player retrieve
117
+ # a new playlist on a one-second interval. When this type of session
118
+ # is played in a media player, the user interface typically displays
119
+ # a "live" notification, with no scrubber control for choosing the
120
+ # position in the playback window to display.
121
+ #
122
+ # <note markdown="1"> In `LIVE` mode, the newest available fragments are included in an
123
+ # HLS media playlist, even if there is a gap between fragments (that
124
+ # is, if a fragment is missing). A gap like this might cause a media
125
+ # player to halt or cause a jump in playback. In this mode,
126
+ # fragments are not added to the HLS media playlist if they are
127
+ # older than the newest fragment in the playlist. If the missing
128
+ # fragment becomes available after a subsequent fragment is added to
129
+ # the playlist, the older fragment is not added, and the gap is not
130
+ # filled.
131
+ #
132
+ # </note>
133
+ #
134
+ # * <b> <code>ON_DEMAND</code> </b>\: For sessions of this type, the
135
+ # HLS media playlist contains all the fragments for the session, up
136
+ # to the number that is specified in
137
+ # `MaxMediaPlaylistFragmentResults`. The playlist must be retrieved
138
+ # only once for each session. When this type of session is played in
139
+ # a media player, the user interface typically displays a scrubber
140
+ # control for choosing the position in the playback window to
141
+ # display.
142
+ #
143
+ # In both playback modes, if `FragmentSelectorType` is
144
+ # `PRODUCER_TIMESTAMP`, and if there are multiple fragments with the
145
+ # same start time stamp, the fragment that has the larger fragment
146
+ # number (that is, the newer fragment) is included in the HLS media
147
+ # playlist. The other fragments are not included. Fragments that have
148
+ # different time stamps but have overlapping durations are still
149
+ # included in the HLS media playlist. This can lead to unexpected
150
+ # behavior in the media player.
151
+ #
152
+ # The default is `LIVE`.
153
+ # @return [String]
154
+ #
155
+ # @!attribute [rw] hls_fragment_selector
156
+ # The time range of the requested fragment, and the source of the time
157
+ # stamps.
158
+ #
159
+ # This parameter is required if `PlaybackMode` is `ON_DEMAND`. This
160
+ # parameter is optional if `PlaybackMode` is `LIVE`. If `PlaybackMode`
161
+ # is `LIVE`, the `FragmentSelectorType` can be set, but the
162
+ # `TimestampRange` should not be set. If `PlaybackMode` is
163
+ # `ON_DEMAND`, both `FragmentSelectorType` and `TimestampRange` must
164
+ # be set.
165
+ # @return [Types::HLSFragmentSelector]
166
+ #
167
+ # @!attribute [rw] discontinuity_mode
168
+ # Specifies when flags marking discontinuities between fragments will
169
+ # be added to the media playlists. The default is `ALWAYS` when
170
+ # HLSFragmentSelector is `SERVER_TIMESTAMP`, and `NEVER` when it is
171
+ # `PRODUCER_TIMESTAMP`.
172
+ #
173
+ # Media players typically build a timeline of media content to play,
174
+ # based on the time stamps of each fragment. This means that if there
175
+ # is any overlap between fragments (as is typical if
176
+ # HLSFragmentSelector is `SERVER_TIMESTAMP`), the media player
177
+ # timeline has small gaps between fragments in some places, and
178
+ # overwrites frames in other places. When there are discontinuity
179
+ # flags between fragments, the media player is expected to reset the
180
+ # timeline, resulting in the fragment being played immediately after
181
+ # the previous fragment. We recommend that you always have
182
+ # discontinuity flags between fragments if the fragment time stamps
183
+ # are not accurate or if fragments might be missing. You should not
184
+ # place discontinuity flags between fragments for the player timeline
185
+ # to accurately map to the producer time stamps.
186
+ # @return [String]
187
+ #
188
+ # @!attribute [rw] expires
189
+ # The time in seconds until the requested session expires. This value
190
+ # can be between 300 (5 minutes) and 43200 (12 hours).
191
+ #
192
+ # When a session expires, no new calls to `GetHLSMasterPlaylist`,
193
+ # `GetHLSMediaPlaylist`, `GetMP4InitFragment`, or
194
+ # `GetMP4MediaFragment` can be made for that session.
195
+ #
196
+ # The default is 300 (5 minutes).
197
+ # @return [Integer]
198
+ #
199
+ # @!attribute [rw] max_media_playlist_fragment_results
200
+ # The maximum number of fragments that are returned in the HLS media
201
+ # playlists.
202
+ #
203
+ # When the `PlaybackMode` is `LIVE`, the most recent fragments are
204
+ # returned up to this value. When the `PlaybackMode` is `ON_DEMAND`,
205
+ # the oldest fragments are returned, up to this maximum number.
206
+ #
207
+ # When there are a higher number of fragments available in a live HLS
208
+ # media playlist, video players often buffer content before starting
209
+ # playback. Increasing the buffer size increases the playback latency,
210
+ # but it decreases the likelihood that rebuffering will occur during
211
+ # playback. We recommend that a live HLS media playlist have a minimum
212
+ # of 3 fragments and a maximum of 10 fragments.
213
+ #
214
+ # The default is 5 fragments if `PlaybackMode` is `LIVE`, and 1,000 if
215
+ # `PlaybackMode` is `ON_DEMAND`.
216
+ #
217
+ # The maximum value of 1,000 fragments corresponds to more than 16
218
+ # minutes of video on streams with 1-second fragments, and more than 2
219
+ # 1/2 hours of video on streams with 10-second fragments.
220
+ # @return [Integer]
221
+ #
222
+ # @see http://docs.aws.amazon.com/goto/WebAPI/kinesis-video-archived-media-2017-09-30/GetHLSStreamingSessionURLInput AWS API Documentation
223
+ #
224
+ class GetHLSStreamingSessionURLInput < Struct.new(
225
+ :stream_name,
226
+ :stream_arn,
227
+ :playback_mode,
228
+ :hls_fragment_selector,
229
+ :discontinuity_mode,
230
+ :expires,
231
+ :max_media_playlist_fragment_results)
232
+ include Aws::Structure
233
+ end
234
+
235
+ # @!attribute [rw] hls_streaming_session_url
236
+ # The URL (containing the session token) that a media player can use
237
+ # to retrieve the HLS master playlist.
238
+ # @return [String]
239
+ #
240
+ # @see http://docs.aws.amazon.com/goto/WebAPI/kinesis-video-archived-media-2017-09-30/GetHLSStreamingSessionURLOutput AWS API Documentation
241
+ #
242
+ class GetHLSStreamingSessionURLOutput < Struct.new(
243
+ :hls_streaming_session_url)
244
+ include Aws::Structure
245
+ end
246
+
76
247
  # @note When making an API call, you may pass GetMediaForFragmentListInput
77
248
  # data as a hash:
78
249
  #
@@ -105,11 +276,9 @@ module Aws::KinesisVideoArchivedMedia
105
276
  # @!attribute [rw] payload
106
277
  # The payload that Kinesis Video Streams returns is a sequence of
107
278
  # chunks from the specified stream. For information about the chunks,
108
- # see
109
- # [PutMedia](docs.aws.amazon.com/acuity/latest/dg/API_dataplane_PutMedia.html).
110
- # The chunks that Kinesis Video Streams returns in the
111
- # `GetMediaForFragmentList` call also include the following additional
112
- # Matroska (MKV) tags:
279
+ # see [PutMedia][1]. The chunks that Kinesis Video Streams returns in
280
+ # the `GetMediaForFragmentList` call also include the following
281
+ # additional Matroska (MKV) tags:
113
282
  #
114
283
  # * AWS\_KINESISVIDEO\_FRAGMENT\_NUMBER - Fragment number returned in
115
284
  # the chunk.
@@ -130,6 +299,10 @@ module Aws::KinesisVideoArchivedMedia
130
299
  #
131
300
  # * AWS\_KINESISVIDEO\_EXCEPTION\_MESSAGE - A text description of the
132
301
  # exception
302
+ #
303
+ #
304
+ #
305
+ # [1]: http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_PutMedia.html
133
306
  # @return [IO]
134
307
  #
135
308
  # @see http://docs.aws.amazon.com/goto/WebAPI/kinesis-video-archived-media-2017-09-30/GetMediaForFragmentListOutput AWS API Documentation
@@ -140,6 +313,126 @@ module Aws::KinesisVideoArchivedMedia
140
313
  include Aws::Structure
141
314
  end
142
315
 
316
+ # Contains the range of time stamps for the requested media, and the
317
+ # source of the time stamps.
318
+ #
319
+ # @note When making an API call, you may pass HLSFragmentSelector
320
+ # data as a hash:
321
+ #
322
+ # {
323
+ # fragment_selector_type: "PRODUCER_TIMESTAMP", # accepts PRODUCER_TIMESTAMP, SERVER_TIMESTAMP
324
+ # timestamp_range: {
325
+ # start_timestamp: Time.now,
326
+ # end_timestamp: Time.now,
327
+ # },
328
+ # }
329
+ #
330
+ # @!attribute [rw] fragment_selector_type
331
+ # The source of the time stamps for the requested media.
332
+ #
333
+ # When `FragmentSelectorType` is set to `PRODUCER_TIMESTAMP` and
334
+ # GetHLSStreamingSessionURLInput$PlaybackMode is `ON_DEMAND`, the
335
+ # first fragment ingested with a producer time stamp within the
336
+ # specified FragmentSelector$TimestampRange is included in the media
337
+ # playlist. In addition, the fragments with producer time stamps
338
+ # within the `TimestampRange` ingested immediately following the first
339
+ # fragment (up to the
340
+ # GetHLSStreamingSessionURLInput$MaxMediaPlaylistFragmentResults
341
+ # value) are included.
342
+ #
343
+ # Fragments that have duplicate producer time stamps are deduplicated.
344
+ # This means that if producers are producing a stream of fragments
345
+ # with producer time stamps that are approximately equal to the true
346
+ # clock time, the HLS media playlists will contain all of the
347
+ # fragments within the requested time stamp range. If some fragments
348
+ # are ingested within the same time range and very different points in
349
+ # time, only the oldest ingested collection of fragments are returned.
350
+ #
351
+ # When `FragmentSelectorType` is set to `PRODUCER_TIMESTAMP` and
352
+ # GetHLSStreamingSessionURLInput$PlaybackMode is `LIVE`, the producer
353
+ # time stamps are used in the MP4 fragments and for deduplication. But
354
+ # the most recently ingested fragments based on server time stamps are
355
+ # included in the HLS media playlist. This means that even if
356
+ # fragments ingested in the past have producer time stamps with values
357
+ # now, they are not included in the HLS media playlist.
358
+ #
359
+ # The default is `SERVER_TIMESTAMP`.
360
+ # @return [String]
361
+ #
362
+ # @!attribute [rw] timestamp_range
363
+ # The start and end of the time stamp range for the requested media.
364
+ #
365
+ # This value should not be present if `PlaybackType` is `LIVE`.
366
+ # @return [Types::HLSTimestampRange]
367
+ #
368
+ # @see http://docs.aws.amazon.com/goto/WebAPI/kinesis-video-archived-media-2017-09-30/HLSFragmentSelector AWS API Documentation
369
+ #
370
+ class HLSFragmentSelector < Struct.new(
371
+ :fragment_selector_type,
372
+ :timestamp_range)
373
+ include Aws::Structure
374
+ end
375
+
376
+ # The start and end of the time stamp range for the requested media.
377
+ #
378
+ # This value should not be present if `PlaybackType` is `LIVE`.
379
+ #
380
+ # <note markdown="1"> The values in the `HLSTimestampRange` are inclusive. Fragments that
381
+ # begin before the start time but continue past it, or fragments that
382
+ # begin before the end time but continue past it, are included in the
383
+ # session.
384
+ #
385
+ # </note>
386
+ #
387
+ # @note When making an API call, you may pass HLSTimestampRange
388
+ # data as a hash:
389
+ #
390
+ # {
391
+ # start_timestamp: Time.now,
392
+ # end_timestamp: Time.now,
393
+ # }
394
+ #
395
+ # @!attribute [rw] start_timestamp
396
+ # The start of the time stamp range for the requested media.
397
+ #
398
+ # If the `HLSTimestampRange` value is specified, the `StartTimestamp`
399
+ # value is required.
400
+ #
401
+ # <note markdown="1"> This value is inclusive. Fragments that start before the
402
+ # `StartTimestamp` and continue past it are included in the session.
403
+ # If `FragmentSelectorType` is `SERVER_TIMESTAMP`, the
404
+ # `StartTimestamp` must be later than the stream head.
405
+ #
406
+ # </note>
407
+ # @return [Time]
408
+ #
409
+ # @!attribute [rw] end_timestamp
410
+ # The end of the time stamp range for the requested media. This value
411
+ # must be within 3 hours of the specified `StartTimestamp`, and it
412
+ # must be later than the `StartTimestamp` value.
413
+ #
414
+ # If `FragmentSelectorType` for the request is `SERVER_TIMESTAMP`,
415
+ # this value must be in the past.
416
+ #
417
+ # If the `HLSTimestampRange` value is specified, the `EndTimestamp`
418
+ # value is required.
419
+ #
420
+ # <note markdown="1"> This value is inclusive. The `EndTimestamp` is compared to the
421
+ # (starting) time stamp of the fragment. Fragments that start before
422
+ # the `EndTimestamp` value and continue past it are included in the
423
+ # session.
424
+ #
425
+ # </note>
426
+ # @return [Time]
427
+ #
428
+ # @see http://docs.aws.amazon.com/goto/WebAPI/kinesis-video-archived-media-2017-09-30/HLSTimestampRange AWS API Documentation
429
+ #
430
+ class HLSTimestampRange < Struct.new(
431
+ :start_timestamp,
432
+ :end_timestamp)
433
+ include Aws::Structure
434
+ end
435
+
143
436
  # @note When making an API call, you may pass ListFragmentsInput
144
437
  # data as a hash:
145
438
  #
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-sdk-kinesisvideoarchivedmedia
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Amazon Web Services
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-26 00:00:00.000000000 Z
11
+ date: 2018-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-core