/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/
#pragma once
#include
#include
#include
#include
#include
#include
namespace Aws
{
namespace KinesisVideoMedia
{
/**
*
*/
class AWS_KINESISVIDEOMEDIA_API KinesisVideoMediaClient : public Aws::Client::AWSJsonClient, public Aws::Client::ClientWithAsyncTemplateMethods
{
public:
typedef Aws::Client::AWSJsonClient BASECLASS;
static const char* SERVICE_NAME;
static const char* ALLOCATION_TAG;
typedef KinesisVideoMediaClientConfiguration ClientConfigurationType;
typedef KinesisVideoMediaEndpointProvider EndpointProviderType;
/**
* Initializes client to use DefaultCredentialProviderChain, with default http client factory, and optional client config. If client config
* is not specified, it will be initialized to default values.
*/
KinesisVideoMediaClient(const Aws::KinesisVideoMedia::KinesisVideoMediaClientConfiguration& clientConfiguration = Aws::KinesisVideoMedia::KinesisVideoMediaClientConfiguration(),
std::shared_ptr endpointProvider = Aws::MakeShared(ALLOCATION_TAG));
/**
* Initializes client to use SimpleAWSCredentialsProvider, with default http client factory, and optional client config. If client config
* is not specified, it will be initialized to default values.
*/
KinesisVideoMediaClient(const Aws::Auth::AWSCredentials& credentials,
std::shared_ptr endpointProvider = Aws::MakeShared(ALLOCATION_TAG),
const Aws::KinesisVideoMedia::KinesisVideoMediaClientConfiguration& clientConfiguration = Aws::KinesisVideoMedia::KinesisVideoMediaClientConfiguration());
/**
* Initializes client to use specified credentials provider with specified client config. If http client factory is not supplied,
* the default http client factory will be used
*/
KinesisVideoMediaClient(const std::shared_ptr& credentialsProvider,
std::shared_ptr endpointProvider = Aws::MakeShared(ALLOCATION_TAG),
const Aws::KinesisVideoMedia::KinesisVideoMediaClientConfiguration& clientConfiguration = Aws::KinesisVideoMedia::KinesisVideoMediaClientConfiguration());
/* Legacy constructors due deprecation */
/**
* Initializes client to use DefaultCredentialProviderChain, with default http client factory, and optional client config. If client config
* is not specified, it will be initialized to default values.
*/
KinesisVideoMediaClient(const Aws::Client::ClientConfiguration& clientConfiguration);
/**
* Initializes client to use SimpleAWSCredentialsProvider, with default http client factory, and optional client config. If client config
* is not specified, it will be initialized to default values.
*/
KinesisVideoMediaClient(const Aws::Auth::AWSCredentials& credentials,
const Aws::Client::ClientConfiguration& clientConfiguration);
/**
* Initializes client to use specified credentials provider with specified client config. If http client factory is not supplied,
* the default http client factory will be used
*/
KinesisVideoMediaClient(const std::shared_ptr& credentialsProvider,
const Aws::Client::ClientConfiguration& clientConfiguration);
/* End of legacy constructors due deprecation */
virtual ~KinesisVideoMediaClient();
/**
* Use this API to retrieve media content from a Kinesis video stream. In the
* request, you identify the stream name or stream Amazon Resource Name (ARN), and
* the starting chunk. Kinesis Video Streams then returns a stream of chunks in
* order by fragment number.
You must first call the
* GetDataEndpoint
API to get an endpoint. Then send the
* GetMedia
requests to this endpoint using the --endpoint-url
* parameter.
When you put media data (fragments) on a stream,
* Kinesis Video Streams stores each incoming fragment and related metadata in what
* is called a "chunk." For more information, see PutMedia.
* The GetMedia
API returns a stream of these chunks starting from the
* chunk that you specify in the request.
The following limits apply when
* using the GetMedia
API:
-
A client can call
* GetMedia
up to five times per second per stream.
-
*
Kinesis Video Streams sends media data at a rate of up to 25 megabytes per
* second (or 200 megabits per second) during a GetMedia
session.
*
If an error is thrown after invoking a Kinesis Video
* Streams media API, in addition to the HTTP status code and the response body, it
* includes the following pieces of information:
-
* 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.
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.
See Also:
AWS
* API Reference
*/
virtual Model::GetMediaOutcome GetMedia(const Model::GetMediaRequest& request) const;
/**
* A Callable wrapper for GetMedia that returns a future to the operation so that it can be executed in parallel to other requests.
*/
template
Model::GetMediaOutcomeCallable GetMediaCallable(const GetMediaRequestT& request) const
{
return SubmitCallable(&KinesisVideoMediaClient::GetMedia, request);
}
/**
* An Async wrapper for GetMedia that queues the request into a thread executor and triggers associated callback when operation has finished.
*/
template
void GetMediaAsync(const GetMediaRequestT& request, const GetMediaResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const
{
return SubmitAsync(&KinesisVideoMediaClient::GetMedia, request, handler, context);
}
void OverrideEndpoint(const Aws::String& endpoint);
std::shared_ptr& accessEndpointProvider();
private:
friend class Aws::Client::ClientWithAsyncTemplateMethods;
void init(const KinesisVideoMediaClientConfiguration& clientConfiguration);
KinesisVideoMediaClientConfiguration m_clientConfiguration;
std::shared_ptr m_executor;
std::shared_ptr m_endpointProvider;
};
} // namespace KinesisVideoMedia
} // namespace Aws