/* * Copyright 2018-2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with * the License. A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions * and limitations under the License. */ package com.amazonaws.services.kinesisvideo; import org.w3c.dom.*; import java.net.*; import java.util.*; import javax.annotation.Generated; import org.apache.commons.logging.*; import com.amazonaws.*; import com.amazonaws.annotation.SdkInternalApi; import com.amazonaws.auth.*; import com.amazonaws.handlers.*; import com.amazonaws.http.*; import com.amazonaws.internal.*; import com.amazonaws.internal.auth.*; import com.amazonaws.metrics.*; import com.amazonaws.regions.*; import com.amazonaws.transform.*; import com.amazonaws.util.*; import com.amazonaws.protocol.json.*; import com.amazonaws.util.AWSRequestMetrics.Field; import com.amazonaws.annotation.ThreadSafe; import com.amazonaws.client.AwsSyncClientParams; import com.amazonaws.client.builder.AdvancedConfig; import com.amazonaws.services.kinesisvideo.AmazonKinesisVideoArchivedMediaClientBuilder; import com.amazonaws.util.ServiceClientHolderInputStream; import com.amazonaws.AmazonServiceException; import com.amazonaws.services.kinesisvideo.model.*; import com.amazonaws.services.kinesisvideo.model.transform.*; /** * Client for accessing Kinesis Video Archived Media. All service calls made using this client are blocking, and will * not return until the service call completes. *
*
*/ @ThreadSafe @Generated("com.amazonaws:aws-java-sdk-code-generator") public class AmazonKinesisVideoArchivedMediaClient extends AmazonWebServiceClient implements AmazonKinesisVideoArchivedMedia { /** Provider for AWS credentials. */ private final AWSCredentialsProvider awsCredentialsProvider; private static final Log log = LogFactory.getLog(AmazonKinesisVideoArchivedMedia.class); /** Default signing name for the service. */ private static final String DEFAULT_SIGNING_NAME = "kinesisvideo"; /** Client configuration factory providing ClientConfigurations tailored to this client */ protected static final ClientConfigurationFactory configFactory = new ClientConfigurationFactory(); private final AdvancedConfig advancedConfig; private static final com.amazonaws.protocol.json.SdkJsonProtocolFactory protocolFactory = new com.amazonaws.protocol.json.SdkJsonProtocolFactory( new JsonClientMetadata() .withProtocolVersion("1.1") .withSupportsCbor(false) .withSupportsIon(false) .withContentTypeOverride("application/json") .addErrorMetadata( new JsonErrorShapeMetadata().withErrorCode("NotAuthorizedException").withExceptionUnmarshaller( com.amazonaws.services.kinesisvideo.model.transform.NotAuthorizedExceptionUnmarshaller.getInstance())) .addErrorMetadata( new JsonErrorShapeMetadata().withErrorCode("InvalidCodecPrivateDataException").withExceptionUnmarshaller( com.amazonaws.services.kinesisvideo.model.transform.InvalidCodecPrivateDataExceptionUnmarshaller.getInstance())) .addErrorMetadata( new JsonErrorShapeMetadata().withErrorCode("InvalidArgumentException").withExceptionUnmarshaller( com.amazonaws.services.kinesisvideo.model.transform.InvalidArgumentExceptionUnmarshaller.getInstance())) .addErrorMetadata( new JsonErrorShapeMetadata().withErrorCode("ClientLimitExceededException").withExceptionUnmarshaller( com.amazonaws.services.kinesisvideo.model.transform.ClientLimitExceededExceptionUnmarshaller.getInstance())) .addErrorMetadata( new JsonErrorShapeMetadata().withErrorCode("NoDataRetentionException").withExceptionUnmarshaller( com.amazonaws.services.kinesisvideo.model.transform.NoDataRetentionExceptionUnmarshaller.getInstance())) .addErrorMetadata( new JsonErrorShapeMetadata().withErrorCode("ResourceNotFoundException").withExceptionUnmarshaller( com.amazonaws.services.kinesisvideo.model.transform.ResourceNotFoundExceptionUnmarshaller.getInstance())) .addErrorMetadata( new JsonErrorShapeMetadata().withErrorCode("UnsupportedStreamMediaTypeException").withExceptionUnmarshaller( com.amazonaws.services.kinesisvideo.model.transform.UnsupportedStreamMediaTypeExceptionUnmarshaller.getInstance())) .addErrorMetadata( new JsonErrorShapeMetadata().withErrorCode("InvalidMediaFrameException").withExceptionUnmarshaller( com.amazonaws.services.kinesisvideo.model.transform.InvalidMediaFrameExceptionUnmarshaller.getInstance())) .addErrorMetadata( new JsonErrorShapeMetadata().withErrorCode("MissingCodecPrivateDataException").withExceptionUnmarshaller( com.amazonaws.services.kinesisvideo.model.transform.MissingCodecPrivateDataExceptionUnmarshaller.getInstance())) .withBaseServiceExceptionClass(com.amazonaws.services.kinesisvideo.model.AmazonKinesisVideoException.class)); public static AmazonKinesisVideoArchivedMediaClientBuilder builder() { return AmazonKinesisVideoArchivedMediaClientBuilder.standard(); } /** * Constructs a new client to invoke service methods on Kinesis Video Archived Media using the specified parameters. * ** All service calls made using this new client object are blocking, and will not return until the service call * completes. * * @param clientParams * Object providing client parameters. */ AmazonKinesisVideoArchivedMediaClient(AwsSyncClientParams clientParams) { this(clientParams, false); } /** * Constructs a new client to invoke service methods on Kinesis Video Archived Media using the specified parameters. * *
* All service calls made using this new client object are blocking, and will not return until the service call * completes. * * @param clientParams * Object providing client parameters. */ AmazonKinesisVideoArchivedMediaClient(AwsSyncClientParams clientParams, boolean endpointDiscoveryEnabled) { super(clientParams); this.awsCredentialsProvider = clientParams.getCredentialsProvider(); this.advancedConfig = clientParams.getAdvancedConfig(); init(); } private void init() { setServiceNameIntern(DEFAULT_SIGNING_NAME); setEndpointPrefix(ENDPOINT_PREFIX); // calling this.setEndPoint(...) will also modify the signer accordingly setEndpoint("kinesisvideo.us-east-1.amazonaws.com"); HandlerChainFactory chainFactory = new HandlerChainFactory(); requestHandler2s.addAll(chainFactory.newRequestHandlerChain("/com/amazonaws/services/kinesisvideo/request.handlers")); requestHandler2s.addAll(chainFactory.newRequestHandler2Chain("/com/amazonaws/services/kinesisvideo/request.handler2s")); requestHandler2s.addAll(chainFactory.getGlobalHandlers()); } /** *
* Downloads an MP4 file (clip) containing the archived, on-demand media from the specified video stream over the * specified time range. *
** Both the StreamName and the StreamARN parameters are optional, but you must specify either the StreamName or the * StreamARN when invoking this API operation. *
*
* As a prerequisite to using GetCLip API, you must obtain an endpoint using GetDataEndpoint
,
* specifying GET_CLIP for the
APIName
parameter.
*
* An Amazon Kinesis video stream has the following requirements for providing data through MP4: *
*
* The media must contain h.264 or h.265 encoded video and, optionally, AAC or G.711 encoded audio. Specifically,
* the codec ID of track 1 should be V_MPEG/ISO/AVC
(for h.264) or V_MPEGH/ISO/HEVC (for H.265).
* Optionally, the codec ID of track 2 should be A_AAC
(for AAC) or A_MS/ACM (for G.711).
*
* Data retention must be greater than 0. *
** The video track of each fragment must contain codec private data in the Advanced Video Coding (AVC) for H.264 * format and HEVC for H.265 format. For more information, see MPEG-4 specification ISO/IEC 14496-15. For information about * adapting stream data to a given format, see NAL Adaptation * Flags. *
** The audio track (if present) of each fragment must contain codec private data in the AAC format (AAC specification ISO/IEC 13818-7) or the MS Wave format. *
*
* You can monitor the amount of outgoing data by monitoring the GetClip.OutgoingBytes
Amazon
* CloudWatch metric. For information about using CloudWatch to monitor Kinesis Video Streams, see Monitoring Kinesis Video
* Streams. For pricing information, see Amazon
* Kinesis Video Streams Pricing and AWS Pricing. Charges for
* outgoing AWS data apply.
*
GetMedia
throws this error when Kinesis Video Streams can't find the stream that you
* specified.
*
*
* Retrieves an MPEG Dynamic Adaptive Streaming over HTTP (DASH) URL for the stream. You can then open the URL in a
* media player to view the stream contents.
*
* Both the
* An Amazon Kinesis video stream has the following requirements for providing data through MPEG-DASH:
*
* The media must contain h.264 or h.265 encoded video and, optionally, AAC or G.711 encoded audio. Specifically,
* the codec ID of track 1 should be
* Data retention must be greater than 0.
*
* The video track of each fragment must contain codec private data in the Advanced Video Coding (AVC) for H.264
* format and HEVC for H.265 format. For more information, see MPEG-4 specification ISO/IEC 14496-15. For information about
* adapting stream data to a given format, see NAL Adaptation
* Flags.
*
* The audio track (if present) of each fragment must contain codec private data in the AAC format (AAC specification ISO/IEC 13818-7) or the MS Wave format.
*
* The following procedure shows how to use MPEG-DASH with Kinesis Video Streams:
*
* Get an endpoint using GetDataEndpoint,
* specifying
* Retrieve the MPEG-DASH URL using
* Don't share or store this token where an unauthorized entity can access it. The token provides access to the
* content of the stream. Safeguard the token with the same measures that you use with your AWS credentials.
*
* The media that is made available through the manifest consists only of the requested stream, time range, and
* format. No other media data (such as frames outside the requested window or alternate bitrates) is made
* available.
*
* Provide the URL (containing the encrypted session token) for the MPEG-DASH manifest to a media player that
* supports the MPEG-DASH protocol. Kinesis Video Streams makes the initialization fragment and media fragments
* available through the manifest URL. The initialization fragment contains the codec private data for the stream,
* and other data needed to set up the video or audio decoder and renderer. The media fragments contain encoded
* video frames or encoded audio samples.
*
* The media player receives the authenticated URL and requests stream metadata and media data normally. When the
* media player requests data, it calls the following actions:
*
* GetDASHManifest: Retrieves an MPEG DASH manifest, which contains the metadata for the media that you want
* to playback.
*
* GetMP4InitFragment: Retrieves the MP4 initialization fragment. The media player typically loads the
* initialization fragment before loading any media fragments. This fragment contains the "
* The initialization fragment does not correspond to a fragment in a Kinesis video stream. It contains only the
* codec private data for the stream and respective track, which the media player needs to decode the media frames.
*
* GetMP4MediaFragment: Retrieves MP4 media fragments. These fragments contain the "
* After the first media fragment is made available in a streaming session, any fragments that don't contain the
* same codec private data cause an error to be returned when those different media fragments are loaded. Therefore,
* the codec private data should not change between fragments in a session. This also means that the session fails
* if the fragments in a stream change from having only video to having both audio and video.
*
* Data retrieved with this action is billable. See Pricing for details.
*
* For restrictions that apply to MPEG-DASH sessions, see Kinesis Video Streams Limits.
*
* You can monitor the amount of data that the media player consumes by monitoring the
*
* For more information about HLS, see HTTP Live Streaming on
* the Apple Developer site.
*
* If an error is thrown after invoking a Kinesis Video Streams archived media API, in addition to the HTTP status
* code and the response body, it includes the following pieces of information:
*
*
*
* Both the HTTP status code and the ErrorType header can be utilized to make programmatic decisions about whether
* errors are retry-able and under what conditions, as well as provide information on what actions the client
* programmer might need to take in order to successfully try again.
*
* For more information, see the Errors section at the bottom of this topic, as well as Common Errors.
* GetHLSStreamingSessionURL
and GetDASHStreamingSessionURL
throw this error if a
* session with a PlaybackMode
of ON_DEMAND
or LIVE_REPLAY
is
* requested for a stream that has no fragments within the requested time range, or if a session with a
* PlaybackMode
of LIVE
is requested for a stream that has no fragments within the
* last 30 seconds.
* @throws InvalidArgumentException
* A specified parameter exceeds its restrictions, is not supported, or can't be used.
* @throws ClientLimitExceededException
* 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.
* @throws NotAuthorizedException
* Status Code: 403, The caller is not authorized to perform an operation on the given stream, or the token
* has expired.
* @throws UnsupportedStreamMediaTypeException
* The type of the media (for example, h.264 or h.265 video or ACC or G.711 audio) could not be determined
* from the codec IDs of the tracks in the first fragment for a playback session. The codec ID for track 1
* should be V_MPEG/ISO/AVC
and, optionally, the codec ID for track 2 should be
* A_AAC
.
* @throws MissingCodecPrivateDataException
* No codec private data was found in at least one of tracks of the video stream.
* @throws InvalidCodecPrivateDataException
* The codec private data in at least one of the tracks of the video stream is not valid for this operation.
* @throws InvalidMediaFrameException
* One or more frames in the requested clip could not be parsed based on the specified codec.
* @throws NoDataRetentionException
* A streaming session was requested for a stream that does not retain data (that is, has a
* DataRetentionInHours
of 0).
* @sample AmazonKinesisVideoArchivedMedia.GetClip
* @see AWS API Documentation
*/
@Override
public GetClipResult getClip(GetClipRequest request) {
request = beforeClientExecution(request);
return executeGetClip(request);
}
@SdkInternalApi
final GetClipResult executeGetClip(GetClipRequest getClipRequest) {
ExecutionContext executionContext = createExecutionContext(getClipRequest);
AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics();
awsRequestMetrics.startEvent(Field.ClientExecuteTime);
RequestStreamName
and the StreamARN
parameters are optional, but you must specify
* either the StreamName
or the StreamARN
when invoking this API operation.
*
*
* V_MPEG/ISO/AVC
(for h.264) or V_MPEGH/ISO/HEVC (for H.265).
* Optionally, the codec ID of track 2 should be A_AAC
(for AAC) or A_MS/ACM (for G.711).
*
*
* GET_DASH_STREAMING_SESSION_URL
for the APIName
parameter.
* GetDASHStreamingSessionURL
. Kinesis Video Streams creates an
* MPEG-DASH streaming session to be used for accessing content in a stream using the MPEG-DASH protocol.
* GetDASHStreamingSessionURL
returns an authenticated URL (that includes an encrypted session token)
* for the session's MPEG-DASH manifest (the root resource needed for streaming with MPEG-DASH).
*
*
* fytp
" and "
* moov
" MP4 atoms, and the child atoms that are needed to initialize the media player decoder.
* moof
" and "
* mdat
" MP4 atoms and their child atoms, containing the encoded fragment's media frames and their
* timestamps.
* GetMP4MediaFragment.OutgoingBytes
Amazon CloudWatch metric. For information about using CloudWatch
* to monitor Kinesis Video Streams, see Monitoring Kinesis Video
* Streams. For pricing information, see Amazon
* Kinesis Video Streams Pricing and AWS Pricing. Charges for both
* HLS sessions and outgoing AWS data apply.
*
*
* x-amz-ErrorType
HTTP header – contains a more specific error type in addition to what the HTTP
* status code provides.
* x-amz-RequestId
HTTP header – if you want to report an issue to AWS, the support team can better
* diagnose the problem if given the Request Id.
* GetMedia
throws this error when Kinesis Video Streams can't find the stream that you
* specified.
*
* Retrieves an HTTP Live Streaming (HLS) URL for the stream. You can then open the URL in a browser or media player
* to view the stream contents.
*
* Both the
* An Amazon Kinesis video stream has the following requirements for providing data through HLS:
*
* The media must contain h.264 or h.265 encoded video and, optionally, AAC encoded audio. Specifically, the codec
* ID of track 1 should be
* Data retention must be greater than 0.
*
* The video track of each fragment must contain codec private data in the Advanced Video Coding (AVC) for H.264
* format or HEVC for H.265 format (MPEG-4 specification ISO/IEC
* 14496-15). For information about adapting stream data to a given format, see NAL Adaptation
* Flags.
*
* The audio track (if present) of each fragment must contain codec private data in the AAC format (AAC specification ISO/IEC 13818-7).
*
* Kinesis Video Streams HLS sessions contain fragments in the fragmented MPEG-4 form (also called fMP4 or CMAF) or
* the MPEG-2 form (also called TS chunks, which the HLS specification also supports). For more information about
* HLS fragment types, see the HLS
* specification.
*
* The following procedure shows how to use HLS with Kinesis Video Streams:
*
* Get an endpoint using GetDataEndpoint,
* specifying
* Retrieve the HLS URL using
* Don't share or store this token where an unauthorized entity could access it. The token provides access to the
* content of the stream. Safeguard the token with the same measures that you would use with your AWS credentials.
*
* The media that is made available through the playlist consists only of the requested stream, time range, and
* format. No other media data (such as frames outside the requested window or alternate bitrates) is made
* available.
*
* Provide the URL (containing the encrypted session token) for the HLS master playlist to a media player that
* supports the HLS protocol. Kinesis Video Streams makes the HLS media playlist, initialization fragment, and media
* fragments available through the master playlist URL. The initialization fragment contains the codec private data
* for the stream, and other data needed to set up the video or audio decoder and renderer. The media fragments
* contain H.264-encoded video frames or AAC-encoded audio samples.
*
* The media player receives the authenticated URL and requests stream metadata and media data normally. When the
* media player requests data, it calls the following actions:
*
* GetHLSMasterPlaylist: Retrieves an HLS master playlist, which contains a URL for the
*
* GetHLSMediaPlaylist: Retrieves an HLS media playlist, which contains a URL to access the MP4
* initialization fragment with the
* GetMP4InitFragment: Retrieves the MP4 initialization fragment. The media player typically loads the
* initialization fragment before loading any media fragments. This fragment contains the "
* The initialization fragment does not correspond to a fragment in a Kinesis video stream. It contains only the
* codec private data for the stream and respective track, which the media player needs to decode the media frames.
*
* GetMP4MediaFragment: Retrieves MP4 media fragments. These fragments contain the "
* After the first media fragment is made available in a streaming session, any fragments that don't contain the
* same codec private data cause an error to be returned when those different media fragments are loaded. Therefore,
* the codec private data should not change between fragments in a session. This also means that the session fails
* if the fragments in a stream change from having only video to having both audio and video.
*
* Data retrieved with this action is billable. See Pricing for details.
*
* GetTSFragment: Retrieves MPEG TS fragments containing both initialization and media data for all tracks in
* the stream.
*
* If the
* Data retrieved with this action is billable. For more information, see Kinesis Video Streams pricing.
*
* A streaming session URL must not be shared between players. The service might throttle a session if multiple
* media players are sharing it. For connection limits, see Kinesis Video Streams Limits.
*
* You can monitor the amount of data that the media player consumes by monitoring the
*
* For more information about HLS, see HTTP Live Streaming on
* the Apple Developer site.
*
* If an error is thrown after invoking a Kinesis Video Streams archived media API, in addition to the HTTP status
* code and the response body, it includes the following pieces of information:
*
*
*
* Both the HTTP status code and the ErrorType header can be utilized to make programmatic decisions about whether
* errors are retry-able and under what conditions, as well as provide information on what actions the client
* programmer might need to take in order to successfully try again.
*
* For more information, see the Errors section at the bottom of this topic, as well as Common Errors.
* GetHLSStreamingSessionURL
and GetDASHStreamingSessionURL
throw this error if a
* session with a PlaybackMode
of ON_DEMAND
or LIVE_REPLAY
is
* requested for a stream that has no fragments within the requested time range, or if a session with a
* PlaybackMode
of LIVE
is requested for a stream that has no fragments within the
* last 30 seconds.
* @throws InvalidArgumentException
* A specified parameter exceeds its restrictions, is not supported, or can't be used.
* @throws ClientLimitExceededException
* 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.
* @throws NotAuthorizedException
* Status Code: 403, The caller is not authorized to perform an operation on the given stream, or the token
* has expired.
* @throws UnsupportedStreamMediaTypeException
* The type of the media (for example, h.264 or h.265 video or ACC or G.711 audio) could not be determined
* from the codec IDs of the tracks in the first fragment for a playback session. The codec ID for track 1
* should be V_MPEG/ISO/AVC
and, optionally, the codec ID for track 2 should be
* A_AAC
.
* @throws NoDataRetentionException
* A streaming session was requested for a stream that does not retain data (that is, has a
* DataRetentionInHours
of 0).
* @throws MissingCodecPrivateDataException
* No codec private data was found in at least one of tracks of the video stream.
* @throws InvalidCodecPrivateDataException
* The codec private data in at least one of the tracks of the video stream is not valid for this operation.
* @sample AmazonKinesisVideoArchivedMedia.GetDASHStreamingSessionURL
* @see AWS API Documentation
*/
@Override
public GetDASHStreamingSessionURLResult getDASHStreamingSessionURL(GetDASHStreamingSessionURLRequest request) {
request = beforeClientExecution(request);
return executeGetDASHStreamingSessionURL(request);
}
@SdkInternalApi
final GetDASHStreamingSessionURLResult executeGetDASHStreamingSessionURL(GetDASHStreamingSessionURLRequest getDASHStreamingSessionURLRequest) {
ExecutionContext executionContext = createExecutionContext(getDASHStreamingSessionURLRequest);
AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics();
awsRequestMetrics.startEvent(Field.ClientExecuteTime);
RequestStreamName
and the StreamARN
parameters are optional, but you must specify
* either the StreamName
or the StreamARN
when invoking this API operation.
*
*
* V_MPEG/ISO/AVC
(for h.264) or V_MPEG/ISO/HEVC
(for h.265).
* Optionally, the codec ID of track 2 should be A_AAC
.
*
*
* GET_HLS_STREAMING_SESSION_URL
for the APIName
parameter.
* GetHLSStreamingSessionURL
. Kinesis Video Streams creates an HLS streaming
* session to be used for accessing content in a stream using the HLS protocol.
* GetHLSStreamingSessionURL
returns an authenticated URL (that includes an encrypted session token)
* for the session's HLS master playlist (the root resource needed for streaming with HLS).
*
*
* GetHLSMediaPlaylist
action for each track, and additional metadata for the media player, including
* estimated bitrate and resolution.
* GetMP4InitFragment
action, and URLs to access the MP4 media
* fragments with the GetMP4MediaFragment
actions. The HLS media playlist also contains metadata about
* the stream that the player needs to play it, such as whether the PlaybackMode
is LIVE
* or ON_DEMAND
. The HLS media playlist is typically static for sessions with a
* PlaybackType
of ON_DEMAND
. The HLS media playlist is continually updated with new
* fragments for sessions with a PlaybackType
of LIVE
. There is a distinct HLS media
* playlist for the video track and the audio track (if applicable) that contains MP4 media URLs for the specific
* track.
* fytp
" and "
* moov
" MP4 atoms, and the child atoms that are needed to initialize the media player decoder.
* moof
" and "
* mdat
" MP4 atoms and their child atoms, containing the encoded fragment's media frames and their
* timestamps.
* ContainerFormat
is MPEG_TS
, this API is used instead of
* GetMP4InitFragment
and GetMP4MediaFragment
to retrieve stream media.
* GetMP4MediaFragment.OutgoingBytes
Amazon CloudWatch metric. For information about using CloudWatch
* to monitor Kinesis Video Streams, see Monitoring Kinesis Video
* Streams. For pricing information, see Amazon
* Kinesis Video Streams Pricing and AWS Pricing. Charges for both
* HLS sessions and outgoing AWS data apply.
*
*
* x-amz-ErrorType
HTTP header – contains a more specific error type in addition to what the HTTP
* status code provides.
* x-amz-RequestId
HTTP header – if you want to report an issue to AWS, the support team can better
* diagnose the problem if given the Request Id.
* GetMedia
throws this error when Kinesis Video Streams can't find the stream that you
* specified.
*
* Retrieves a list of Images corresponding to each timestamp for a given time range, sampling interval, and image
* format configuration.
* GetHLSStreamingSessionURL
and GetDASHStreamingSessionURL
throw this error if a
* session with a PlaybackMode
of ON_DEMAND
or LIVE_REPLAY
is
* requested for a stream that has no fragments within the requested time range, or if a session with a
* PlaybackMode
of LIVE
is requested for a stream that has no fragments within the
* last 30 seconds.
* @throws InvalidArgumentException
* A specified parameter exceeds its restrictions, is not supported, or can't be used.
* @throws ClientLimitExceededException
* 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.
* @throws NotAuthorizedException
* Status Code: 403, The caller is not authorized to perform an operation on the given stream, or the token
* has expired.
* @throws UnsupportedStreamMediaTypeException
* The type of the media (for example, h.264 or h.265 video or ACC or G.711 audio) could not be determined
* from the codec IDs of the tracks in the first fragment for a playback session. The codec ID for track 1
* should be V_MPEG/ISO/AVC
and, optionally, the codec ID for track 2 should be
* A_AAC
.
* @throws NoDataRetentionException
* A streaming session was requested for a stream that does not retain data (that is, has a
* DataRetentionInHours
of 0).
* @throws MissingCodecPrivateDataException
* No codec private data was found in at least one of tracks of the video stream.
* @throws InvalidCodecPrivateDataException
* The codec private data in at least one of the tracks of the video stream is not valid for this operation.
* @sample AmazonKinesisVideoArchivedMedia.GetHLSStreamingSessionURL
* @see AWS API Documentation
*/
@Override
public GetHLSStreamingSessionURLResult getHLSStreamingSessionURL(GetHLSStreamingSessionURLRequest request) {
request = beforeClientExecution(request);
return executeGetHLSStreamingSessionURL(request);
}
@SdkInternalApi
final GetHLSStreamingSessionURLResult executeGetHLSStreamingSessionURL(GetHLSStreamingSessionURLRequest getHLSStreamingSessionURLRequest) {
ExecutionContext executionContext = createExecutionContext(getHLSStreamingSessionURLRequest);
AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics();
awsRequestMetrics.startEvent(Field.ClientExecuteTime);
RequestGetMedia
throws this error when Kinesis Video Streams can't find the stream that you
* specified.
*
* Gets media for a list of fragments (specified by fragment number) from the archived data in an Amazon Kinesis
* video stream.
*
* You must first call the
* For limits, see Kinesis Video
* Streams Limits.
*
* If an error is thrown after invoking a Kinesis Video Streams archived media API, in addition to the HTTP status
* code and the response body, it includes the following pieces of information:
*
*
*
* Both the HTTP status code and the ErrorType header can be utilized to make programmatic decisions about whether
* errors are retry-able and under what conditions, as well as provide information on what actions the client
* programmer might need to take in order to successfully try again.
*
* For more information, see the Errors section at the bottom of this topic, as well as Common Errors.
* GetHLSStreamingSessionURL
and GetDASHStreamingSessionURL
throw this error if a
* session with a PlaybackMode
of ON_DEMAND
or LIVE_REPLAY
is
* requested for a stream that has no fragments within the requested time range, or if a session with a
* PlaybackMode
of LIVE
is requested for a stream that has no fragments within the
* last 30 seconds.
* @throws InvalidArgumentException
* A specified parameter exceeds its restrictions, is not supported, or can't be used.
* @throws ClientLimitExceededException
* 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.
* @throws NotAuthorizedException
* Status Code: 403, The caller is not authorized to perform an operation on the given stream, or the token
* has expired.
* @sample AmazonKinesisVideoArchivedMedia.GetImages
* @see AWS API Documentation
*/
@Override
public GetImagesResult getImages(GetImagesRequest request) {
request = beforeClientExecution(request);
return executeGetImages(request);
}
@SdkInternalApi
final GetImagesResult executeGetImages(GetImagesRequest getImagesRequest) {
ExecutionContext executionContext = createExecutionContext(getImagesRequest);
AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics();
awsRequestMetrics.startEvent(Field.ClientExecuteTime);
RequestGetDataEndpoint
API to get an endpoint. Then send the
* GetMediaForFragmentList
requests to this endpoint using the --endpoint-url parameter.
*
*
* x-amz-ErrorType
HTTP header – contains a more specific error type in addition to what the HTTP
* status code provides.
* x-amz-RequestId
HTTP header – if you want to report an issue to AWS, the support team can better
* diagnose the problem if given the Request Id.
* GetMedia
throws this error when Kinesis Video Streams can't find the stream that you
* specified.
*
* Returns a list of Fragment objects from the specified stream and timestamp range within the archived data.
*
* Listing fragments is eventually consistent. This means that even if the producer receives an acknowledgment that
* a fragment is persisted, the result might not be returned immediately from a request to
*
* You must first call the
* If an error is thrown after invoking a Kinesis Video Streams archived media API, in addition to the HTTP status
* code and the response body, it includes the following pieces of information:
*
*
*
* Both the HTTP status code and the ErrorType header can be utilized to make programmatic decisions about whether
* errors are retry-able and under what conditions, as well as provide information on what actions the client
* programmer might need to take in order to successfully try again.
*
* For more information, see the Errors section at the bottom of this topic, as well as Common Errors.
* GetHLSStreamingSessionURL
and GetDASHStreamingSessionURL
throw this error if a
* session with a PlaybackMode
of ON_DEMAND
or LIVE_REPLAY
is
* requested for a stream that has no fragments within the requested time range, or if a session with a
* PlaybackMode
of LIVE
is requested for a stream that has no fragments within the
* last 30 seconds.
* @throws InvalidArgumentException
* A specified parameter exceeds its restrictions, is not supported, or can't be used.
* @throws ClientLimitExceededException
* 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.
* @throws NotAuthorizedException
* Status Code: 403, The caller is not authorized to perform an operation on the given stream, or the token
* has expired.
* @sample AmazonKinesisVideoArchivedMedia.GetMediaForFragmentList
* @see AWS API Documentation
*/
@Override
public GetMediaForFragmentListResult getMediaForFragmentList(GetMediaForFragmentListRequest request) {
request = beforeClientExecution(request);
return executeGetMediaForFragmentList(request);
}
@SdkInternalApi
final GetMediaForFragmentListResult executeGetMediaForFragmentList(GetMediaForFragmentListRequest getMediaForFragmentListRequest) {
ExecutionContext executionContext = createExecutionContext(getMediaForFragmentListRequest);
AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics();
awsRequestMetrics.startEvent(Field.ClientExecuteTime);
RequestListFragments
. However, results are typically available in less than one second.
* GetDataEndpoint
API to get an endpoint. Then send the
* ListFragments
requests to this endpoint using the --endpoint-url parameter.
*
*
* x-amz-ErrorType
HTTP header – contains a more specific error type in addition to what the HTTP
* status code provides.
* x-amz-RequestId
HTTP header – if you want to report an issue to AWS, the support team can better
* diagnose the problem if given the Request Id.
* GetMedia
throws this error when Kinesis Video Streams can't find the stream that you
* specified.
*
* Response metadata is only cached for a limited period of time, so if you need to access this extra diagnostic
* information for an executed request, you should use this method to retrieve it as soon as possible after
* executing the request.
*
* @param request
* The originally executed request
*
* @return The response metadata for the specified request, or null if none is available.
*/
public ResponseMetadata getCachedResponseMetadata(AmazonWebServiceRequest request) {
return client.getResponseMetadataForRequest(request);
}
/**
* Normal invoke with authentication. Credentials are required and may be overriden at the request level.
**/
private GetHLSStreamingSessionURL
and GetDASHStreamingSessionURL
throw this error if a
* session with a PlaybackMode
of ON_DEMAND
or LIVE_REPLAY
is
* requested for a stream that has no fragments within the requested time range, or if a session with a
* PlaybackMode
of LIVE
is requested for a stream that has no fragments within the
* last 30 seconds.
* @throws InvalidArgumentException
* A specified parameter exceeds its restrictions, is not supported, or can't be used.
* @throws ClientLimitExceededException
* 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.
* @throws NotAuthorizedException
* Status Code: 403, The caller is not authorized to perform an operation on the given stream, or the token
* has expired.
* @sample AmazonKinesisVideoArchivedMedia.ListFragments
* @see AWS API Documentation
*/
@Override
public ListFragmentsResult listFragments(ListFragmentsRequest request) {
request = beforeClientExecution(request);
return executeListFragments(request);
}
@SdkInternalApi
final ListFragmentsResult executeListFragments(ListFragmentsRequest listFragmentsRequest) {
ExecutionContext executionContext = createExecutionContext(listFragmentsRequest);
AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics();
awsRequestMetrics.startEvent(Field.ClientExecuteTime);
Request