/*
* Copyright 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.
*/
/*
* Do not modify this file. This file is generated from the mediaconvert-2017-08-29.normal.json service model.
*/
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.MediaConvert.Model
{
///
/// Settings related to your CMAF output package. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/outputs-file-ABR.html.
///
public partial class CmafGroupSettings
{
private List _additionalManifests = new List();
private string _baseUrl;
private CmafClientCache _clientCache;
private CmafCodecSpecification _codecSpecification;
private DashManifestStyle _dashManifestStyle;
private string _destination;
private DestinationSettings _destinationSettings;
private CmafEncryptionSettings _encryption;
private int? _fragmentLength;
private CmafImageBasedTrickPlay _imageBasedTrickPlay;
private CmafImageBasedTrickPlaySettings _imageBasedTrickPlaySettings;
private CmafManifestCompression _manifestCompression;
private CmafManifestDurationFormat _manifestDurationFormat;
private int? _minBufferTime;
private double? _minFinalSegmentLength;
private CmafMpdManifestBandwidthType _mpdManifestBandwidthType;
private CmafMpdProfile _mpdProfile;
private CmafPtsOffsetHandlingForBFrames _ptsOffsetHandlingForBFrames;
private CmafSegmentControl _segmentControl;
private int? _segmentLength;
private CmafSegmentLengthControl _segmentLengthControl;
private CmafStreamInfResolution _streamInfResolution;
private CmafTargetDurationCompatibilityMode _targetDurationCompatibilityMode;
private CmafVideoCompositionOffsets _videoCompositionOffsets;
private CmafWriteDASHManifest _writeDashManifest;
private CmafWriteHLSManifest _writeHlsManifest;
private CmafWriteSegmentTimelineInRepresentation _writeSegmentTimelineInRepresentation;
///
/// Gets and sets the property AdditionalManifests. By default, the service creates one
/// top-level .m3u8 HLS manifest and one top -level .mpd DASH manifest for each CMAF output
/// group in your job. These default manifests reference every output in the output group.
/// To create additional top-level manifests that reference a subset of the outputs in
/// the output group, specify a list of them here. For each additional manifest that you
/// specify, the service creates one HLS manifest and one DASH manifest.
///
public List AdditionalManifests
{
get { return this._additionalManifests; }
set { this._additionalManifests = value; }
}
// Check to see if AdditionalManifests property is set
internal bool IsSetAdditionalManifests()
{
return this._additionalManifests != null && this._additionalManifests.Count > 0;
}
///
/// Gets and sets the property BaseUrl. A partial URI prefix that will be put in the manifest
/// file at the top level BaseURL element. Can be used if streams are delivered from a
/// different URL than the manifest file.
///
public string BaseUrl
{
get { return this._baseUrl; }
set { this._baseUrl = value; }
}
// Check to see if BaseUrl property is set
internal bool IsSetBaseUrl()
{
return this._baseUrl != null;
}
///
/// Gets and sets the property ClientCache. Disable this setting only when your workflow
/// requires the #EXT-X-ALLOW-CACHE:no tag. Otherwise, keep the default value Enabled
/// and control caching in your video distribution set up. For example, use the Cache-Control
/// http header.
///
public CmafClientCache ClientCache
{
get { return this._clientCache; }
set { this._clientCache = value; }
}
// Check to see if ClientCache property is set
internal bool IsSetClientCache()
{
return this._clientCache != null;
}
///
/// Gets and sets the property CodecSpecification. Specification to use (RFC-6381 or the
/// default RFC-4281) during m3u8 playlist generation.
///
public CmafCodecSpecification CodecSpecification
{
get { return this._codecSpecification; }
set { this._codecSpecification = value; }
}
// Check to see if CodecSpecification property is set
internal bool IsSetCodecSpecification()
{
return this._codecSpecification != null;
}
///
/// Gets and sets the property DashManifestStyle. Specify how MediaConvert writes SegmentTimeline
/// in your output DASH manifest. To write a SegmentTimeline in each video Representation:
/// Keep the default value, Basic. To write a common SegmentTimeline in the video AdaptationSet:
/// Choose Compact. Note that MediaConvert will still write a SegmentTimeline in any Representation
/// that does not share a common timeline. To write a video AdaptationSet for each different
/// output framerate, and a common SegmentTimeline in each AdaptationSet: Choose Distinct.
///
public DashManifestStyle DashManifestStyle
{
get { return this._dashManifestStyle; }
set { this._dashManifestStyle = value; }
}
// Check to see if DashManifestStyle property is set
internal bool IsSetDashManifestStyle()
{
return this._dashManifestStyle != null;
}
///
/// Gets and sets the property Destination. Use Destination to specify the S3 output location
/// and the output filename base. Destination accepts format identifiers. If you do not
/// specify the base filename in the URI, the service will use the filename of the input
/// file. If your job has multiple inputs, the service uses the filename of the first
/// input file.
///
public string Destination
{
get { return this._destination; }
set { this._destination = value; }
}
// Check to see if Destination property is set
internal bool IsSetDestination()
{
return this._destination != null;
}
///
/// Gets and sets the property DestinationSettings. Settings associated with the destination.
/// Will vary based on the type of destination
///
public DestinationSettings DestinationSettings
{
get { return this._destinationSettings; }
set { this._destinationSettings = value; }
}
// Check to see if DestinationSettings property is set
internal bool IsSetDestinationSettings()
{
return this._destinationSettings != null;
}
///
/// Gets and sets the property Encryption. DRM settings.
///
public CmafEncryptionSettings Encryption
{
get { return this._encryption; }
set { this._encryption = value; }
}
// Check to see if Encryption property is set
internal bool IsSetEncryption()
{
return this._encryption != null;
}
///
/// Gets and sets the property FragmentLength. Specify the length, in whole seconds, of
/// the mp4 fragments. When you don't specify a value, MediaConvert defaults to 2. Related
/// setting: Use Fragment length control to specify whether the encoder enforces this
/// value strictly.
///
[AWSProperty(Min=1, Max=2147483647)]
public int FragmentLength
{
get { return this._fragmentLength.GetValueOrDefault(); }
set { this._fragmentLength = value; }
}
// Check to see if FragmentLength property is set
internal bool IsSetFragmentLength()
{
return this._fragmentLength.HasValue;
}
///
/// Gets and sets the property ImageBasedTrickPlay. Specify whether MediaConvert generates
/// images for trick play. Keep the default value, None, to not generate any images. Choose
/// Thumbnail to generate tiled thumbnails. Choose Thumbnail and full frame to generate
/// tiled thumbnails and full-resolution images of single frames. When you enable Write
/// HLS manifest, MediaConvert creates a child manifest for each set of images that you
/// generate and adds corresponding entries to the parent manifest. When you enable Write
/// DASH manifest, MediaConvert adds an entry in the .mpd manifest for each set of images
/// that you generate. A common application for these images is Roku trick mode. The thumbnails
/// and full-frame images that MediaConvert creates with this feature are compatible with
/// this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md
///
public CmafImageBasedTrickPlay ImageBasedTrickPlay
{
get { return this._imageBasedTrickPlay; }
set { this._imageBasedTrickPlay = value; }
}
// Check to see if ImageBasedTrickPlay property is set
internal bool IsSetImageBasedTrickPlay()
{
return this._imageBasedTrickPlay != null;
}
///
/// Gets and sets the property ImageBasedTrickPlaySettings. Tile and thumbnail settings
/// applicable when imageBasedTrickPlay is ADVANCED
///
public CmafImageBasedTrickPlaySettings ImageBasedTrickPlaySettings
{
get { return this._imageBasedTrickPlaySettings; }
set { this._imageBasedTrickPlaySettings = value; }
}
// Check to see if ImageBasedTrickPlaySettings property is set
internal bool IsSetImageBasedTrickPlaySettings()
{
return this._imageBasedTrickPlaySettings != null;
}
///
/// Gets and sets the property ManifestCompression. When set to GZIP, compresses HLS playlist.
///
public CmafManifestCompression ManifestCompression
{
get { return this._manifestCompression; }
set { this._manifestCompression = value; }
}
// Check to see if ManifestCompression property is set
internal bool IsSetManifestCompression()
{
return this._manifestCompression != null;
}
///
/// Gets and sets the property ManifestDurationFormat. Indicates whether the output manifest
/// should use floating point values for segment duration.
///
public CmafManifestDurationFormat ManifestDurationFormat
{
get { return this._manifestDurationFormat; }
set { this._manifestDurationFormat = value; }
}
// Check to see if ManifestDurationFormat property is set
internal bool IsSetManifestDurationFormat()
{
return this._manifestDurationFormat != null;
}
///
/// Gets and sets the property MinBufferTime. Minimum time of initially buffered media
/// that is needed to ensure smooth playout.
///
[AWSProperty(Min=0, Max=2147483647)]
public int MinBufferTime
{
get { return this._minBufferTime.GetValueOrDefault(); }
set { this._minBufferTime = value; }
}
// Check to see if MinBufferTime property is set
internal bool IsSetMinBufferTime()
{
return this._minBufferTime.HasValue;
}
///
/// Gets and sets the property MinFinalSegmentLength. Keep this setting at the default
/// value of 0, unless you are troubleshooting a problem with how devices play back the
/// end of your video asset. If you know that player devices are hanging on the final
/// segment of your video because the length of your final segment is too short, use this
/// setting to specify a minimum final segment length, in seconds. Choose a value that
/// is greater than or equal to 1 and less than your segment length. When you specify
/// a value for this setting, the encoder will combine any final segment that is shorter
/// than the length that you specify with the previous segment. For example, your segment
/// length is 3 seconds and your final segment is .5 seconds without a minimum final segment
/// length; when you set the minimum final segment length to 1, your final segment is
/// 3.5 seconds.
///
public double MinFinalSegmentLength
{
get { return this._minFinalSegmentLength.GetValueOrDefault(); }
set { this._minFinalSegmentLength = value; }
}
// Check to see if MinFinalSegmentLength property is set
internal bool IsSetMinFinalSegmentLength()
{
return this._minFinalSegmentLength.HasValue;
}
///
/// Gets and sets the property MpdManifestBandwidthType. Specify how the value for bandwidth
/// is determined for each video Representation in your output MPD manifest. We recommend
/// that you choose a MPD manifest bandwidth type that is compatible with your downstream
/// player configuration. Max: Use the same value that you specify for Max bitrate in
/// the video output, in bits per second. Average: Use the calculated average bitrate
/// of the encoded video output, in bits per second.
///
public CmafMpdManifestBandwidthType MpdManifestBandwidthType
{
get { return this._mpdManifestBandwidthType; }
set { this._mpdManifestBandwidthType = value; }
}
// Check to see if MpdManifestBandwidthType property is set
internal bool IsSetMpdManifestBandwidthType()
{
return this._mpdManifestBandwidthType != null;
}
///
/// Gets and sets the property MpdProfile. Specify whether your DASH profile is on-demand
/// or main. When you choose Main profile, the service signals urn:mpeg:dash:profile:isoff-main:2011
/// in your .mpd DASH manifest. When you choose On-demand, the service signals urn:mpeg:dash:profile:isoff-on-demand:2011
/// in your .mpd. When you choose On-demand, you must also set the output group setting
/// Segment control to Single file.
///
public CmafMpdProfile MpdProfile
{
get { return this._mpdProfile; }
set { this._mpdProfile = value; }
}
// Check to see if MpdProfile property is set
internal bool IsSetMpdProfile()
{
return this._mpdProfile != null;
}
///
/// Gets and sets the property PtsOffsetHandlingForBFrames. Use this setting only when
/// your output video stream has B-frames, which causes the initial presentation time
/// stamp (PTS) to be offset from the initial decode time stamp (DTS). Specify how MediaConvert
/// handles PTS when writing time stamps in output DASH manifests. Choose Match initial
/// PTS when you want MediaConvert to use the initial PTS as the first time stamp in the
/// manifest. Choose Zero-based to have MediaConvert ignore the initial PTS in the video
/// stream and instead write the initial time stamp as zero in the manifest. For outputs
/// that don't have B-frames, the time stamps in your DASH manifests start at zero regardless
/// of your choice here.
///
public CmafPtsOffsetHandlingForBFrames PtsOffsetHandlingForBFrames
{
get { return this._ptsOffsetHandlingForBFrames; }
set { this._ptsOffsetHandlingForBFrames = value; }
}
// Check to see if PtsOffsetHandlingForBFrames property is set
internal bool IsSetPtsOffsetHandlingForBFrames()
{
return this._ptsOffsetHandlingForBFrames != null;
}
///
/// Gets and sets the property SegmentControl. When set to SINGLE_FILE, a single output
/// file is generated, which is internally segmented using the Fragment Length and Segment
/// Length. When set to SEGMENTED_FILES, separate segment files will be created.
///
public CmafSegmentControl SegmentControl
{
get { return this._segmentControl; }
set { this._segmentControl = value; }
}
// Check to see if SegmentControl property is set
internal bool IsSetSegmentControl()
{
return this._segmentControl != null;
}
///
/// Gets and sets the property SegmentLength. Specify the length, in whole seconds, of
/// each segment. When you don't specify a value, MediaConvert defaults to 10. Related
/// settings: Use Segment length control to specify whether the encoder enforces this
/// value strictly. Use Segment control to specify whether MediaConvert creates separate
/// segment files or one content file that has metadata to mark the segment boundaries.
///
[AWSProperty(Min=1, Max=2147483647)]
public int SegmentLength
{
get { return this._segmentLength.GetValueOrDefault(); }
set { this._segmentLength = value; }
}
// Check to see if SegmentLength property is set
internal bool IsSetSegmentLength()
{
return this._segmentLength.HasValue;
}
///
/// Gets and sets the property SegmentLengthControl. Specify how you want MediaConvert
/// to determine the segment length. Choose Exact to have the encoder use the exact length
/// that you specify with the setting Segment length. This might result in extra I-frames.
/// Choose Multiple of GOP to have the encoder round up the segment lengths to match the
/// next GOP boundary.
///
public CmafSegmentLengthControl SegmentLengthControl
{
get { return this._segmentLengthControl; }
set { this._segmentLengthControl = value; }
}
// Check to see if SegmentLengthControl property is set
internal bool IsSetSegmentLengthControl()
{
return this._segmentLengthControl != null;
}
///
/// Gets and sets the property StreamInfResolution. Include or exclude RESOLUTION attribute
/// for video in EXT-X-STREAM-INF tag of variant manifest.
///
public CmafStreamInfResolution StreamInfResolution
{
get { return this._streamInfResolution; }
set { this._streamInfResolution = value; }
}
// Check to see if StreamInfResolution property is set
internal bool IsSetStreamInfResolution()
{
return this._streamInfResolution != null;
}
///
/// Gets and sets the property TargetDurationCompatibilityMode. When set to LEGACY, the
/// segment target duration is always rounded up to the nearest integer value above its
/// current value in seconds. When set to SPEC\\_COMPLIANT, the segment target duration
/// is rounded up to the nearest integer value if fraction seconds are greater than or
/// equal to 0.5 (>= 0.5) and rounded down if less than 0.5 (< 0.5). You may need to use
/// LEGACY if your client needs to ensure that the target duration is always longer than
/// the actual duration of the segment. Some older players may experience interrupted
/// playback when the actual duration of a track in a segment is longer than the target
/// duration.
///
public CmafTargetDurationCompatibilityMode TargetDurationCompatibilityMode
{
get { return this._targetDurationCompatibilityMode; }
set { this._targetDurationCompatibilityMode = value; }
}
// Check to see if TargetDurationCompatibilityMode property is set
internal bool IsSetTargetDurationCompatibilityMode()
{
return this._targetDurationCompatibilityMode != null;
}
///
/// Gets and sets the property VideoCompositionOffsets. Specify the video sample composition
/// time offset mode in the output fMP4 TRUN box. For wider player compatibility, set
/// Video composition offsets to Unsigned or leave blank. The earliest presentation time
/// may be greater than zero, and sample composition time offsets will increment using
/// unsigned integers. For strict fMP4 video and audio timing, set Video composition offsets
/// to Signed. The earliest presentation time will be equal to zero, and sample composition
/// time offsets will increment using signed integers.
///
public CmafVideoCompositionOffsets VideoCompositionOffsets
{
get { return this._videoCompositionOffsets; }
set { this._videoCompositionOffsets = value; }
}
// Check to see if VideoCompositionOffsets property is set
internal bool IsSetVideoCompositionOffsets()
{
return this._videoCompositionOffsets != null;
}
///
/// Gets and sets the property WriteDashManifest. When set to ENABLED, a DASH MPD manifest
/// will be generated for this output.
///
public CmafWriteDASHManifest WriteDashManifest
{
get { return this._writeDashManifest; }
set { this._writeDashManifest = value; }
}
// Check to see if WriteDashManifest property is set
internal bool IsSetWriteDashManifest()
{
return this._writeDashManifest != null;
}
///
/// Gets and sets the property WriteHlsManifest. When set to ENABLED, an Apple HLS manifest
/// will be generated for this output.
///
public CmafWriteHLSManifest WriteHlsManifest
{
get { return this._writeHlsManifest; }
set { this._writeHlsManifest = value; }
}
// Check to see if WriteHlsManifest property is set
internal bool IsSetWriteHlsManifest()
{
return this._writeHlsManifest != null;
}
///
/// Gets and sets the property WriteSegmentTimelineInRepresentation. When you enable Precise
/// segment duration in DASH manifests, your DASH manifest shows precise segment durations.
/// The segment duration information appears inside the SegmentTimeline element, inside
/// SegmentTemplate at the Representation level. When this feature isn't enabled, the
/// segment durations in your DASH manifest are approximate. The segment duration information
/// appears in the duration attribute of the SegmentTemplate element.
///
public CmafWriteSegmentTimelineInRepresentation WriteSegmentTimelineInRepresentation
{
get { return this._writeSegmentTimelineInRepresentation; }
set { this._writeSegmentTimelineInRepresentation = value; }
}
// Check to see if WriteSegmentTimelineInRepresentation property is set
internal bool IsSetWriteSegmentTimelineInRepresentation()
{
return this._writeSegmentTimelineInRepresentation != null;
}
}
}