# frozen_string_literal: true
# WARNING ABOUT GENERATED CODE
#
# This file is generated. See the contributing guide for more information:
# https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
#
# WARNING ABOUT GENERATED CODE
module Aws::KinesisVideoArchivedMedia
module Types
# Kinesis Video Streams has throttled the request because you have
# exceeded a limit. Try making the call later. For information about
# limits, see [Kinesis Video Streams Limits][1].
#
#
#
# [1]: http://docs.aws.amazon.com/kinesisvideostreams/latest/dg/limits.html
#
# @!attribute [rw] message
# @return [String]
#
# @see http://docs.aws.amazon.com/goto/WebAPI/kinesis-video-archived-media-2017-09-30/ClientLimitExceededException AWS API Documentation
#
class ClientLimitExceededException < Struct.new(
:message)
SENSITIVE = []
include Aws::Structure
end
# Describes the timestamp range and timestamp origin of a range of
# fragments.
#
# Fragments that have duplicate producer timestamps are deduplicated.
# This means that if producers are producing a stream of fragments with
# producer timestamps that are approximately equal to the true clock
# time, the clip will contain all of the fragments within the requested
# timestamp range. If some fragments are ingested within the same time
# range and very different points in time, only the oldest ingested
# collection of fragments are returned.
#
# @note When making an API call, you may pass ClipFragmentSelector
# data as a hash:
#
# {
# fragment_selector_type: "PRODUCER_TIMESTAMP", # required, accepts PRODUCER_TIMESTAMP, SERVER_TIMESTAMP
# timestamp_range: { # required
# start_timestamp: Time.now, # required
# end_timestamp: Time.now, # required
# },
# }
#
# @!attribute [rw] fragment_selector_type
# The origin of the timestamps to use (Server or Producer).
# @return [String]
#
# @!attribute [rw] timestamp_range
# The range of timestamps to return.
# @return [Types::ClipTimestampRange]
#
# @see http://docs.aws.amazon.com/goto/WebAPI/kinesis-video-archived-media-2017-09-30/ClipFragmentSelector AWS API Documentation
#
class ClipFragmentSelector < Struct.new(
:fragment_selector_type,
:timestamp_range)
SENSITIVE = []
include Aws::Structure
end
# The range of timestamps for which to return fragments.
#
# @note When making an API call, you may pass ClipTimestampRange
# data as a hash:
#
# {
# start_timestamp: Time.now, # required
# end_timestamp: Time.now, # required
# }
#
# @!attribute [rw] start_timestamp
# The starting timestamp in the range of timestamps for which to
# return fragments.
#
# Only fragments that start exactly at or after `StartTimestamp` are
# included in the session. Fragments that start before
# `StartTimestamp` and continue past it aren't included in the
# session. If `FragmentSelectorType` is `SERVER_TIMESTAMP`, the
# `StartTimestamp` must be later than the stream head.
# @return [Time]
#
# @!attribute [rw] end_timestamp
# The end of the timestamp range for the requested media.
#
# This value must be within 24 hours of the specified
# `StartTimestamp`, and it must be later than the `StartTimestamp`
# value. If `FragmentSelectorType` for the request is
# `SERVER_TIMESTAMP`, this value must be in the past.
#
# This value is inclusive. The `EndTimestamp` is compared to the
# (starting) timestamp of the fragment. Fragments that start before
# the `EndTimestamp` value and continue past it are included in the
# session.
# @return [Time]
#
# @see http://docs.aws.amazon.com/goto/WebAPI/kinesis-video-archived-media-2017-09-30/ClipTimestampRange AWS API Documentation
#
class ClipTimestampRange < Struct.new(
:start_timestamp,
:end_timestamp)
SENSITIVE = []
include Aws::Structure
end
# Contains the range of timestamps for the requested media, and the
# source of the timestamps.
#
# @note When making an API call, you may pass DASHFragmentSelector
# data as a hash:
#
# {
# fragment_selector_type: "PRODUCER_TIMESTAMP", # accepts PRODUCER_TIMESTAMP, SERVER_TIMESTAMP
# timestamp_range: {
# start_timestamp: Time.now,
# end_timestamp: Time.now,
# },
# }
#
# @!attribute [rw] fragment_selector_type
# The source of the timestamps for the requested media.
#
# When `FragmentSelectorType` is set to `PRODUCER_TIMESTAMP` and
# GetDASHStreamingSessionURLInput$PlaybackMode is `ON_DEMAND` or
# `LIVE_REPLAY`, the first fragment ingested with a producer timestamp
# within the specified FragmentSelector$TimestampRange is included in
# the media playlist. In addition, the fragments with producer
# timestamps within the `TimestampRange` ingested immediately
# following the first fragment (up to the
# GetDASHStreamingSessionURLInput$MaxManifestFragmentResults value)
# are included.
#
# Fragments that have duplicate producer timestamps are deduplicated.
# This means that if producers are producing a stream of fragments
# with producer timestamps that are approximately equal to the true
# clock time, the MPEG-DASH manifest will contain all of the fragments
# within the requested timestamp range. If some fragments are ingested
# within the same time range and very different points in time, only
# the oldest ingested collection of fragments are returned.
#
# When `FragmentSelectorType` is set to `PRODUCER_TIMESTAMP` and
# GetDASHStreamingSessionURLInput$PlaybackMode is `LIVE`, the producer
# timestamps are used in the MP4 fragments and for deduplication. But
# the most recently ingested fragments based on server timestamps are
# included in the MPEG-DASH manifest. This means that even if
# fragments ingested in the past have producer timestamps with values
# now, they are not included in the HLS media playlist.
#
# The default is `SERVER_TIMESTAMP`.
# @return [String]
#
# @!attribute [rw] timestamp_range
# The start and end of the timestamp range for the requested media.
#
# This value should not be present if `PlaybackType` is `LIVE`.
# @return [Types::DASHTimestampRange]
#
# @see http://docs.aws.amazon.com/goto/WebAPI/kinesis-video-archived-media-2017-09-30/DASHFragmentSelector AWS API Documentation
#
class DASHFragmentSelector < Struct.new(
:fragment_selector_type,
:timestamp_range)
SENSITIVE = []
include Aws::Structure
end
# The start and end of the timestamp range for the requested media.
#
# This value should not be present if `PlaybackType` is `LIVE`.
#
# The values in `DASHimestampRange` are inclusive. Fragments that start
# exactly at or after the start time are included in the session.
# Fragments that start before the start time and continue past it are
# not included in the session.
#
# @note When making an API call, you may pass DASHTimestampRange
# data as a hash:
#
# {
# start_timestamp: Time.now,
# end_timestamp: Time.now,
# }
#
# @!attribute [rw] start_timestamp
# The start of the timestamp range for the requested media.
#
# If the `DASHTimestampRange` value is specified, the `StartTimestamp`
# value is required.
#
# Only fragments that start exactly at or after `StartTimestamp` are
# included in the session. Fragments that start before
# `StartTimestamp` and continue past it aren't included in the
# session. If `FragmentSelectorType` is `SERVER_TIMESTAMP`, the
# `StartTimestamp` must be later than the stream head.
# @return [Time]
#
# @!attribute [rw] end_timestamp
# The end of the timestamp range for the requested media. This value
# must be within 24 hours of the specified `StartTimestamp`, and it
# must be later than the `StartTimestamp` value.
#
# If `FragmentSelectorType` for the request is `SERVER_TIMESTAMP`,
# this value must be in the past.
#
# The `EndTimestamp` value is required for `ON_DEMAND` mode, but
# optional for `LIVE_REPLAY` mode. If the `EndTimestamp` is not set
# for `LIVE_REPLAY` mode then the session will continue to include
# newly ingested fragments until the session expires.
#
# LIVE
\: For sessions of this type, the
# MPEG-DASH manifest is continually updated with the latest
# fragments as they become available. We recommend that the media
# player retrieve a new manifest on a one-second interval. When this
# type of session is played in a media player, the user interface
# typically displays a "live" notification, with no scrubber
# control for choosing the position in the playback window to
# display.
#
# LIVE_REPLAY
\: For sessions of this type, the
# MPEG-DASH manifest is updated similarly to how it is updated for
# `LIVE` mode except that it starts by including fragments from a
# given start time. Instead of fragments being added as they are
# ingested, fragments are added as the duration of the next fragment
# elapses. For example, if the fragments in the session are two
# seconds long, then a new fragment is added to the manifest every
# two seconds. This mode is useful to be able to start playback from
# when an event is detected and continue live streaming media that
# has not yet been ingested as of the time of the session creation.
# This mode is also useful to stream previously archived media
# without being limited by the 1,000 fragment limit in the
# `ON_DEMAND` mode.
#
# * ON_DEMAND
\: For sessions of this type, the
# MPEG-DASH manifest contains all the fragments for the session, up
# to the number that is specified in `MaxManifestFragmentResults`.
# The manifest must be retrieved only once for each session. When
# this type of session is played in a media player, the user
# interface typically displays a scrubber control for choosing the
# position in the playback window to display.
#
# In all playback modes, if `FragmentSelectorType` is
# `PRODUCER_TIMESTAMP`, and if there are multiple fragments with the
# same start timestamp, the fragment that has the larger fragment
# number (that is, the newer fragment) is included in the MPEG-DASH
# manifest. The other fragments are not included. Fragments that have
# different timestamps but have overlapping durations are still
# included in the MPEG-DASH manifest. This can lead to unexpected
# behavior in the media player.
#
# The default is `LIVE`.
# @return [String]
#
# @!attribute [rw] display_fragment_timestamp
# Per the MPEG-DASH specification, the wall-clock time of fragments in
# the manifest file can be derived using attributes in the manifest
# itself. However, typically, MPEG-DASH compatible media players do
# not properly handle gaps in the media timeline. Kinesis Video
# Streams adjusts the media timeline in the manifest file to enable
# playback of media with discontinuities. Therefore, the wall-clock
# time derived from the manifest file may be inaccurate. If
# DisplayFragmentTimestamp is set to `ALWAYS`, the accurate fragment
# timestamp is added to each S element in the manifest file with the
# attribute name “kvs:ts”. A custom MPEG-DASH media player is
# necessary to leverage this custom attribute.
#
# The default value is `NEVER`. When DASHFragmentSelector is
# `SERVER_TIMESTAMP`, the timestamps will be the server start
# timestamps. Similarly, when DASHFragmentSelector is
# `PRODUCER_TIMESTAMP`, the timestamps will be the producer start
# timestamps.
# @return [String]
#
# @!attribute [rw] display_fragment_number
# Fragments are identified in the manifest file based on their
# sequence number in the session. If DisplayFragmentNumber is set to
# `ALWAYS`, the Kinesis Video Streams fragment number is added to each
# S element in the manifest file with the attribute name “kvs:fn”.
# These fragment numbers can be used for logging or for use with other
# APIs (e.g. `GetMedia` and `GetMediaForFragmentList`). A custom
# MPEG-DASH media player is necessary to leverage these this custom
# attribute.
#
# The default value is `NEVER`.
# @return [String]
#
# @!attribute [rw] dash_fragment_selector
# The time range of the requested fragment and the source of the
# timestamps.
#
# This parameter is required if `PlaybackMode` is `ON_DEMAND` or
# `LIVE_REPLAY`. This parameter is optional if PlaybackMode is` LIVE.
# If PlaybackMode is LIVE, the FragmentSelectorType can be set, but
# the TimestampRange should not be set. If PlaybackMode is ON_DEMAND
# or LIVE_REPLAY, both FragmentSelectorType and TimestampRange must be
# set.
LIVE
\: For sessions of this type, the HLS
# media playlist is continually updated with the latest fragments as
# they become available. We recommend that the media player retrieve
# a new playlist on a one-second interval. When this type of session
# is played in a media player, the user interface typically displays
# a "live" notification, with no scrubber control for choosing the
# position in the playback window to display.
#
# LIVE_REPLAY
\: For sessions of this type, the
# HLS media playlist is updated similarly to how it is updated for
# `LIVE` mode except that it starts by including fragments from a
# given start time. Instead of fragments being added as they are
# ingested, fragments are added as the duration of the next fragment
# elapses. For example, if the fragments in the session are two
# seconds long, then a new fragment is added to the media playlist
# every two seconds. This mode is useful to be able to start
# playback from when an event is detected and continue live
# streaming media that has not yet been ingested as of the time of
# the session creation. This mode is also useful to stream
# previously archived media without being limited by the 1,000
# fragment limit in the `ON_DEMAND` mode.
#
# * ON_DEMAND
\: For sessions of this type, the
# HLS media playlist contains all the fragments for the session, up
# to the number that is specified in
# `MaxMediaPlaylistFragmentResults`. The playlist must be retrieved
# only once for each session. When this type of session is played in
# a media player, the user interface typically displays a scrubber
# control for choosing the position in the playback window to
# display.
#
# In all playback modes, if `FragmentSelectorType` is
# `PRODUCER_TIMESTAMP`, and if there are multiple fragments with the
# same start timestamp, the fragment that has the largest fragment
# number (that is, the newest fragment) is included in the HLS media
# playlist. The other fragments are not included. Fragments that have
# different timestamps but have overlapping durations are still
# included in the HLS media playlist. This can lead to unexpected
# behavior in the media player.
#
# The default is `LIVE`.
# @return [String]
#
# @!attribute [rw] hls_fragment_selector
# The time range of the requested fragment and the source of the
# timestamps.
#
# This parameter is required if `PlaybackMode` is `ON_DEMAND` or
# `LIVE_REPLAY`. This parameter is optional if PlaybackMode is` LIVE.
# If PlaybackMode is LIVE, the FragmentSelectorType can be set, but
# the TimestampRange should not be set. If PlaybackMode is ON_DEMAND
# or LIVE_REPLAY, both FragmentSelectorType and TimestampRange must be
# set.
# `
# @return [Types::HLSFragmentSelector]
#
# @!attribute [rw] container_format
# Specifies which format should be used for packaging the media.
# Specifying the `FRAGMENTED_MP4` container format packages the media
# into MP4 fragments (fMP4 or CMAF). This is the recommended packaging
# because there is minimal packaging overhead. The other container
# format option is `MPEG_TS`. HLS has supported MPEG TS chunks since
# it was released and is sometimes the only supported packaging on
# older HLS players. MPEG TS typically has a 5-25 percent packaging
# overhead. This means MPEG TS typically requires 5-25 percent more
# bandwidth and cost than fMP4.
#
# The default is `FRAGMENTED_MP4`.
# @return [String]
#
# @!attribute [rw] discontinuity_mode
# Specifies when flags marking discontinuities between fragments are
# added to the media playlists.
#
# Media players typically build a timeline of media content to play,
# based on the timestamps of each fragment. This means that if there
# is any overlap or gap between fragments (as is typical if
# HLSFragmentSelector is set to `SERVER_TIMESTAMP`), the media player
# timeline will also have small gaps between fragments in some places,
# and will overwrite frames in other places. Gaps in the media player
# timeline can cause playback to stall and overlaps can cause playback
# to be jittery. When there are discontinuity flags between fragments,
# the media player is expected to reset the timeline, resulting in the
# next fragment being played immediately after the previous fragment.
#
# The following modes are supported:
#
# * `ALWAYS`\: a discontinuity marker is placed between every fragment
# in the HLS media playlist. It is recommended to use a value of
# `ALWAYS` if the fragment timestamps are not accurate.
#
# * `NEVER`\: no discontinuity markers are placed anywhere. It is
# recommended to use a value of `NEVER` to ensure the media player
# timeline most accurately maps to the producer timestamps.
#
# * `ON_DISCONTINUITY`\: a discontinuity marker is placed between
# fragments that have a gap or overlap of more than 50 milliseconds.
# For most playback scenarios, it is recommended to use a value of
# `ON_DISCONTINUITY` so that the media player timeline is only reset
# when there is a significant issue with the media timeline (e.g. a
# missing fragment).
#
# The default is `ALWAYS` when HLSFragmentSelector is set to
# `SERVER_TIMESTAMP`, and `NEVER` when it is set to
# `PRODUCER_TIMESTAMP`.
# @return [String]
#
# @!attribute [rw] display_fragment_timestamp
# Specifies when the fragment start timestamps should be included in
# the HLS media playlist. Typically, media players report the playhead
# position as a time relative to the start of the first fragment in
# the playback session. However, when the start timestamps are
# included in the HLS media playlist, some media players might report
# the current playhead as an absolute time based on the fragment
# timestamps. This can be useful for creating a playback experience
# that shows viewers the wall-clock time of the media.
#
# The default is `NEVER`. When HLSFragmentSelector is
# `SERVER_TIMESTAMP`, the timestamps will be the server start
# timestamps. Similarly, when HLSFragmentSelector is
# `PRODUCER_TIMESTAMP`, the timestamps will be the producer start
# timestamps.
# @return [String]
#
# @!attribute [rw] expires
# The time in seconds until the requested session expires. This value
# can be between 300 (5 minutes) and 43200 (12 hours).
#
# When a session expires, no new calls to `GetHLSMasterPlaylist`,
# `GetHLSMediaPlaylist`, `GetMP4InitFragment`, `GetMP4MediaFragment`,
# or `GetTSFragment` can be made for that session.
#
# The default is 300 (5 minutes).
# @return [Integer]
#
# @!attribute [rw] max_media_playlist_fragment_results
# The maximum number of fragments that are returned in the HLS media
# playlists.
#
# When the `PlaybackMode` is `LIVE`, the most recent fragments are
# returned up to this value. When the `PlaybackMode` is `ON_DEMAND`,
# the oldest fragments are returned, up to this maximum number.
#
# When there are a higher number of fragments available in a live HLS
# media playlist, video players often buffer content before starting
# playback. Increasing the buffer size increases the playback latency,
# but it decreases the likelihood that rebuffering will occur during
# playback. We recommend that a live HLS media playlist have a minimum
# of 3 fragments and a maximum of 10 fragments.
#
# The default is 5 fragments if `PlaybackMode` is `LIVE` or
# `LIVE_REPLAY`, and 1,000 if `PlaybackMode` is `ON_DEMAND`.
#
# The maximum value of 5,000 fragments corresponds to more than 80
# minutes of video on streams with 1-second fragments, and more than
# 13 hours of video on streams with 10-second fragments.
# @return [Integer]
#
# @see http://docs.aws.amazon.com/goto/WebAPI/kinesis-video-archived-media-2017-09-30/GetHLSStreamingSessionURLInput AWS API Documentation
#
class GetHLSStreamingSessionURLInput < Struct.new(
:stream_name,
:stream_arn,
:playback_mode,
:hls_fragment_selector,
:container_format,
:discontinuity_mode,
:display_fragment_timestamp,
:expires,
:max_media_playlist_fragment_results)
SENSITIVE = []
include Aws::Structure
end
# @!attribute [rw] hls_streaming_session_url
# The URL (containing the session token) that a media player can use
# to retrieve the HLS master playlist.
# @return [String]
#
# @see http://docs.aws.amazon.com/goto/WebAPI/kinesis-video-archived-media-2017-09-30/GetHLSStreamingSessionURLOutput AWS API Documentation
#
class GetHLSStreamingSessionURLOutput < Struct.new(
:hls_streaming_session_url)
SENSITIVE = []
include Aws::Structure
end
# @note When making an API call, you may pass GetMediaForFragmentListInput
# data as a hash:
#
# {
# stream_name: "StreamName",
# stream_arn: "ResourceARN",
# fragments: ["FragmentNumberString"], # required
# }
#
# @!attribute [rw] stream_name
# The name of the stream from which to retrieve fragment media.
# Specify either this parameter or the `StreamARN` parameter.
# @return [String]
#
# @!attribute [rw] stream_arn
# The Amazon Resource Name (ARN) of the stream from which to retrieve
# fragment media. Specify either this parameter or the `StreamName`
# parameter.
# @return [String]
#
# @!attribute [rw] fragments
# A list of the numbers of fragments for which to retrieve media. You
# retrieve these values with ListFragments.
# @return [Array