2023-04-07 15:15:39 -04:00
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
/**
* Before running this C++ code example, set up your development environment, including your credentials.
*
* For more information, see the following documentation topic:
*
* https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/getting-started.html
*
* For information on the structure of the code examples and how to build and run the examples, see
* https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/getting-started-code-examples.html.
*
**/
# include <aws/core/Aws.h>
# include <aws/core/utils/json/JsonSerializer.h>
# include <aws/mediaconvert/MediaConvertClient.h>
2023-05-05 12:21:22 -04:00
# include <aws/mediaconvert/model/CreateJobRequest.h>
2023-04-07 15:15:39 -04:00
# include "mediaconvert_samples.h"
# include <fstream>
/* ----------------------------------------------
* Permissions that an IAM user needs to run this example.
* ----------------------------------------------
*
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"mediaconvert:DescribeEndpoints",
"mediaconvert:CreateJob"
],
"Resource": "*"
}
]
}
*/
namespace AwsDoc {
namespace MediaConvert {
const char INPUT_FILE_PLACEHOLDER [ ] = " <INPUT_FILE_PLACEHOLDER> " ;
const char OUTPUT_FILE_PLACEHOLDER [ ] = " <OUTPUT_FILE_PLACEHOLDER> " ;
const char AUDIO_SOURCE_NAME [ ] = " Audio Select 1 " ;
}
}
// snippet-start:[cpp.example_code.mediaconvert.CreateJob]
//! Create an AWS Elemental MediaConvert job.
/*!
\param mediaConvertRole: An Amazon Resource Name (ARN) for the AWS Identity and
Access Management (IAM) role for the job.
\param fileInput: A URI to an input file that is stored in Amazon Simple Storage Service
(Amazon S3) or on an HTTP(S) server.
\param fileOutput: A URI for an Amazon S3 output location and the output file name base.
\param jobSettingsFile: An optional JSON settings file.
\param clientConfiguration: AWS client configuration.
\return bool: Function succeeded.
*/
bool AwsDoc : : MediaConvert : : createJob ( const Aws : : String & mediaConvertRole ,
const Aws : : String & fileInput ,
const Aws : : String & fileOutput ,
const Aws : : String & jobSettingsFile ,
const Aws : : Client : : ClientConfiguration & clientConfiguration ) {
Aws : : MediaConvert : : Model : : CreateJobRequest createJobRequest ;
createJobRequest . SetRole ( mediaConvertRole ) ;
Aws : : Http : : HeaderValueCollection hvc ;
hvc . emplace ( " Customer " , " Amazon " ) ;
createJobRequest . SetUserMetadata ( hvc ) ;
if ( ! jobSettingsFile . empty ( ) ) // Use a JSON file for the job settings.
{
std : : ifstream jobSettingsStream ( jobSettingsFile , std : : ios : : ate ) ;
if ( ! jobSettingsStream ) {
std : : cerr < < " Unable to open the job template file. " < < std : : endl ;
return false ;
}
std : : vector < char > buffer ( jobSettingsStream . tellg ( ) ) ;
jobSettingsStream . seekg ( 0 ) ;
jobSettingsStream . read ( buffer . data ( ) , buffer . size ( ) ) ;
std : : string jobSettingsJSON ( buffer . data ( ) , buffer . size ( ) ) ;
size_t pos = jobSettingsJSON . find ( INPUT_FILE_PLACEHOLDER ) ;
if ( pos ! = std : : string : : npos ) {
jobSettingsJSON . replace ( pos , strlen ( INPUT_FILE_PLACEHOLDER ) , fileInput ) ;
}
pos = jobSettingsJSON . find ( OUTPUT_FILE_PLACEHOLDER ) ;
if ( pos ! = std : : string : : npos ) {
jobSettingsJSON . replace ( pos , strlen ( OUTPUT_FILE_PLACEHOLDER ) , fileOutput ) ;
}
Aws : : Utils : : Json : : JsonValue jsonValue ( jobSettingsJSON ) ;
Aws : : MediaConvert : : Model : : JobSettings jobSettings ( jsonValue ) ;
createJobRequest . SetSettings ( jobSettings ) ;
}
else { // Configure the job settings programmatically.
Aws : : MediaConvert : : Model : : JobSettings jobSettings ;
jobSettings . SetAdAvailOffset ( 0 ) ;
Aws : : MediaConvert : : Model : : TimecodeConfig timecodeConfig ;
timecodeConfig . SetSource ( Aws : : MediaConvert : : Model : : TimecodeSource : : EMBEDDED ) ;
jobSettings . SetTimecodeConfig ( timecodeConfig ) ;
// Configure the output group.
Aws : : MediaConvert : : Model : : OutputGroup outputGroup ;
outputGroup . SetName ( " File Group " ) ;
Aws : : MediaConvert : : Model : : OutputGroupSettings outputGroupSettings ;
outputGroupSettings . SetType (
Aws : : MediaConvert : : Model : : OutputGroupType : : FILE_GROUP_SETTINGS ) ;
Aws : : MediaConvert : : Model : : FileGroupSettings fileGroupSettings ;
fileGroupSettings . SetDestination ( fileOutput ) ;
outputGroupSettings . SetFileGroupSettings ( fileGroupSettings ) ;
outputGroup . SetOutputGroupSettings ( outputGroupSettings ) ;
Aws : : MediaConvert : : Model : : Output output ;
output . SetNameModifier ( " _1 " ) ;
Aws : : MediaConvert : : Model : : VideoDescription videoDescription ;
videoDescription . SetScalingBehavior (
Aws : : MediaConvert : : Model : : ScalingBehavior : : DEFAULT ) ;
videoDescription . SetTimecodeInsertion (
Aws : : MediaConvert : : Model : : VideoTimecodeInsertion : : DISABLED ) ;
videoDescription . SetAntiAlias ( Aws : : MediaConvert : : Model : : AntiAlias : : ENABLED ) ;
videoDescription . SetSharpness ( 50 ) ;
videoDescription . SetAfdSignaling ( Aws : : MediaConvert : : Model : : AfdSignaling : : NONE ) ;
videoDescription . SetDropFrameTimecode (
Aws : : MediaConvert : : Model : : DropFrameTimecode : : ENABLED ) ;
videoDescription . SetRespondToAfd ( Aws : : MediaConvert : : Model : : RespondToAfd : : NONE ) ;
videoDescription . SetColorMetadata (
Aws : : MediaConvert : : Model : : ColorMetadata : : INSERT ) ;
Aws : : MediaConvert : : Model : : VideoCodecSettings videoCodecSettings ;
videoCodecSettings . SetCodec ( Aws : : MediaConvert : : Model : : VideoCodec : : H_264 ) ;
Aws : : MediaConvert : : Model : : H264Settings h264Settings ;
h264Settings . SetNumberReferenceFrames ( 3 ) ;
h264Settings . SetSyntax ( Aws : : MediaConvert : : Model : : H264Syntax : : DEFAULT ) ;
h264Settings . SetSoftness ( 0 ) ;
h264Settings . SetGopClosedCadence ( 1 ) ;
h264Settings . SetGopSize ( 90 ) ;
h264Settings . SetSlices ( 1 ) ;
h264Settings . SetGopBReference (
Aws : : MediaConvert : : Model : : H264GopBReference : : DISABLED ) ;
h264Settings . SetSlowPal ( Aws : : MediaConvert : : Model : : H264SlowPal : : DISABLED ) ;
h264Settings . SetSpatialAdaptiveQuantization (
Aws : : MediaConvert : : Model : : H264SpatialAdaptiveQuantization : : ENABLED ) ;
h264Settings . SetTemporalAdaptiveQuantization (
Aws : : MediaConvert : : Model : : H264TemporalAdaptiveQuantization : : ENABLED ) ;
h264Settings . SetFlickerAdaptiveQuantization (
Aws : : MediaConvert : : Model : : H264FlickerAdaptiveQuantization : : DISABLED ) ;
h264Settings . SetEntropyEncoding (
Aws : : MediaConvert : : Model : : H264EntropyEncoding : : CABAC ) ;
h264Settings . SetBitrate ( 5000000 ) ;
h264Settings . SetFramerateControl (
Aws : : MediaConvert : : Model : : H264FramerateControl : : SPECIFIED ) ;
h264Settings . SetRateControlMode (
Aws : : MediaConvert : : Model : : H264RateControlMode : : CBR ) ;
h264Settings . SetCodecProfile ( Aws : : MediaConvert : : Model : : H264CodecProfile : : MAIN ) ;
h264Settings . SetTelecine ( Aws : : MediaConvert : : Model : : H264Telecine : : NONE ) ;
h264Settings . SetMinIInterval ( 0 ) ;
h264Settings . SetAdaptiveQuantization (
Aws : : MediaConvert : : Model : : H264AdaptiveQuantization : : HIGH ) ;
h264Settings . SetCodecLevel ( Aws : : MediaConvert : : Model : : H264CodecLevel : : AUTO ) ;
h264Settings . SetFieldEncoding (
Aws : : MediaConvert : : Model : : H264FieldEncoding : : PAFF ) ;
h264Settings . SetSceneChangeDetect (
Aws : : MediaConvert : : Model : : H264SceneChangeDetect : : ENABLED ) ;
h264Settings . SetQualityTuningLevel (
Aws : : MediaConvert : : Model : : H264QualityTuningLevel : : SINGLE_PASS ) ;
h264Settings . SetFramerateConversionAlgorithm (
Aws : : MediaConvert : : Model : : H264FramerateConversionAlgorithm : : DUPLICATE_DROP ) ;
h264Settings . SetUnregisteredSeiTimecode (
Aws : : MediaConvert : : Model : : H264UnregisteredSeiTimecode : : DISABLED ) ;
h264Settings . SetGopSizeUnits (
Aws : : MediaConvert : : Model : : H264GopSizeUnits : : FRAMES ) ;
h264Settings . SetParControl ( Aws : : MediaConvert : : Model : : H264ParControl : : SPECIFIED ) ;
h264Settings . SetNumberBFramesBetweenReferenceFrames ( 2 ) ;
h264Settings . SetRepeatPps ( Aws : : MediaConvert : : Model : : H264RepeatPps : : DISABLED ) ;
h264Settings . SetFramerateNumerator ( 30 ) ;
h264Settings . SetFramerateDenominator ( 1 ) ;
h264Settings . SetParNumerator ( 1 ) ;
h264Settings . SetParDenominator ( 1 ) ;
videoCodecSettings . SetH264Settings ( h264Settings ) ;
videoDescription . SetCodecSettings ( videoCodecSettings ) ;
output . SetVideoDescription ( videoDescription ) ;
Aws : : MediaConvert : : Model : : AudioDescription audioDescription ;
audioDescription . SetLanguageCodeControl (
Aws : : MediaConvert : : Model : : AudioLanguageCodeControl : : FOLLOW_INPUT ) ;
audioDescription . SetAudioSourceName ( AUDIO_SOURCE_NAME ) ;
Aws : : MediaConvert : : Model : : AudioCodecSettings audioCodecSettings ;
audioCodecSettings . SetCodec ( Aws : : MediaConvert : : Model : : AudioCodec : : AAC ) ;
Aws : : MediaConvert : : Model : : AacSettings aacSettings ;
aacSettings . SetAudioDescriptionBroadcasterMix (
Aws : : MediaConvert : : Model : : AacAudioDescriptionBroadcasterMix : : NORMAL ) ;
aacSettings . SetRateControlMode (
Aws : : MediaConvert : : Model : : AacRateControlMode : : CBR ) ;
aacSettings . SetCodecProfile ( Aws : : MediaConvert : : Model : : AacCodecProfile : : LC ) ;
aacSettings . SetCodingMode (
Aws : : MediaConvert : : Model : : AacCodingMode : : CODING_MODE_2_0 ) ;
aacSettings . SetRawFormat ( Aws : : MediaConvert : : Model : : AacRawFormat : : NONE ) ;
aacSettings . SetSampleRate ( 48000 ) ;
aacSettings . SetSpecification ( Aws : : MediaConvert : : Model : : AacSpecification : : MPEG4 ) ;
aacSettings . SetBitrate ( 64000 ) ;
audioCodecSettings . SetAacSettings ( aacSettings ) ;
audioDescription . SetCodecSettings ( audioCodecSettings ) ;
Aws : : Vector < Aws : : MediaConvert : : Model : : AudioDescription > audioDescriptions ;
audioDescriptions . emplace_back ( audioDescription ) ;
output . SetAudioDescriptions ( audioDescriptions ) ;
Aws : : MediaConvert : : Model : : ContainerSettings mp4container ;
mp4container . SetContainer ( Aws : : MediaConvert : : Model : : ContainerType : : MP4 ) ;
Aws : : MediaConvert : : Model : : Mp4Settings mp4Settings ;
mp4Settings . SetCslgAtom ( Aws : : MediaConvert : : Model : : Mp4CslgAtom : : INCLUDE ) ;
mp4Settings . SetFreeSpaceBox ( Aws : : MediaConvert : : Model : : Mp4FreeSpaceBox : : EXCLUDE ) ;
mp4Settings . SetMoovPlacement (
Aws : : MediaConvert : : Model : : Mp4MoovPlacement : : PROGRESSIVE_DOWNLOAD ) ;
mp4container . SetMp4Settings ( mp4Settings ) ;
output . SetContainerSettings ( mp4container ) ;
outputGroup . AddOutputs ( output ) ;
jobSettings . AddOutputGroups ( outputGroup ) ;
// Configure inputs.
Aws : : MediaConvert : : Model : : Input input ;
input . SetFilterEnable ( Aws : : MediaConvert : : Model : : InputFilterEnable : : AUTO ) ;
input . SetPsiControl ( Aws : : MediaConvert : : Model : : InputPsiControl : : USE_PSI ) ;
input . SetFilterStrength ( 0 ) ;
input . SetDeblockFilter ( Aws : : MediaConvert : : Model : : InputDeblockFilter : : DISABLED ) ;
input . SetDenoiseFilter ( Aws : : MediaConvert : : Model : : InputDenoiseFilter : : DISABLED ) ;
input . SetTimecodeSource (
Aws : : MediaConvert : : Model : : InputTimecodeSource : : EMBEDDED ) ;
input . SetFileInput ( fileInput ) ;
Aws : : MediaConvert : : Model : : AudioSelector audioSelector ;
audioSelector . SetOffset ( 0 ) ;
audioSelector . SetDefaultSelection (
Aws : : MediaConvert : : Model : : AudioDefaultSelection : : NOT_DEFAULT ) ;
audioSelector . SetProgramSelection ( 1 ) ;
audioSelector . SetSelectorType (
Aws : : MediaConvert : : Model : : AudioSelectorType : : TRACK ) ;
audioSelector . AddTracks ( 1 ) ;
input . AddAudioSelectors ( AUDIO_SOURCE_NAME , audioSelector ) ;
Aws : : MediaConvert : : Model : : VideoSelector videoSelector ;
videoSelector . SetColorSpace ( Aws : : MediaConvert : : Model : : ColorSpace : : FOLLOW ) ;
input . SetVideoSelector ( videoSelector ) ;
jobSettings . AddInputs ( input ) ;
createJobRequest . SetSettings ( jobSettings ) ;
}
2024-02-06 13:07:34 -05:00
Aws : : MediaConvert : : MediaConvertClient client ( clientConfiguration ) ;
2023-04-07 15:15:39 -04:00
Aws : : MediaConvert : : Model : : CreateJobOutcome outcome = client . CreateJob (
createJobRequest ) ;
if ( outcome . IsSuccess ( ) ) {
std : : cout < < " Job successfully created with ID - "
< < outcome . GetResult ( ) . GetJob ( ) . GetId ( ) < < std : : endl ;
}
else {
std : : cerr < < " Error CreateJob - " < < outcome . GetError ( ) . GetMessage ( )
< < std : : endl ;
}
return outcome . IsSuccess ( ) ;
}
// snippet-end:[cpp.example_code.mediaconvert.CreateJob]
/*
*
* main function
*
* Usage: 'run_create_job <media_convert_role> <file_input> <file_output> [media_convert_endpoint]'
*
* Prerequisites:
* 1. IAM role for MediaConvert.
* 2. Input media file in an S3 bucket.
*
*/
# ifndef TESTING_BUILD
int main ( int argc , char * * argv ) {
if ( argc < 4 ) {
std : : cout < < R " (
Usage :
run_create_job < media_convert_role > < file_input > < file_output > [ job_settings_file ]
Where :
media_convert_role - IAM role for MediaConvert .
file_input - Amazon S3 input location .
file_output - Amazon S3 output location and the output file name base .
job_settings_file - Optional JSON job settings .
) " ;
return 1 ;
}
// Initialize the AWS SDK for C++.
Aws : : SDKOptions options ;
Aws : : InitAPI ( options ) ;
{
std : : string mediaConvertRole = argv [ 1 ] ;
std : : string fileInput = argv [ 2 ] ;
std : : string fileOutput = argv [ 3 ] ;
std : : string jobSettingsFile ;
if ( argc > 4 ) {
jobSettingsFile = argv [ 4 ] ;
}
Aws : : Client : : ClientConfiguration clientConfig ;
// Optional: Set to the AWS Region (overrides config file).
// clientConfig.region = "us-east-1";
AwsDoc : : MediaConvert : : createJob ( mediaConvertRole , fileInput , fileOutput ,
jobSettingsFile , clientConfig ) ;
}
Aws : : ShutdownAPI ( options ) ;
return 0 ;
}
# endif // TESTING_BUILD