Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
MediaConvert exemples d'utilisation du SDK pour Kotlin
Les exemples de code suivants vous montrent comment effectuer des actions et implémenter des scénarios courants en utilisant le AWS SDK pour Kotlin avec. MediaConvert
Les actions sont des extraits de code de programmes plus larges et doivent être exécutées dans leur contexte. Alors que les actions vous indiquent comment appeler des fonctions de service individuelles, vous pouvez les voir en contexte dans leurs scénarios associés.
Chaque exemple inclut un lien vers le code source complet, où vous trouverez des instructions sur la façon de configurer et d'exécuter le code en contexte.
Rubriques
Actions
L'exemple de code suivant montre comment utiliserCreateJob
.
- SDK pour Kotlin
-
Note
Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le référentiel d’exemples de code AWS
. suspend fun createMediaJob( mcClient: MediaConvertClient, mcRoleARN: String, fileInputVal: String, ): String? { val s3path = fileInputVal.substring(0, fileInputVal.lastIndexOf('/') + 1) + "javasdk/out/" val fileOutput = s3path + "index" val thumbsOutput = s3path + "thumbs/" val mp4Output = s3path + "mp4/" try { val describeEndpoints = DescribeEndpointsRequest { maxResults = 20 } val res = mcClient.describeEndpoints(describeEndpoints) if (res.endpoints?.size!! <= 0) { println("Cannot find MediaConvert service endpoint URL!") exitProcess(0) } val endpointURL = res.endpoints!!.get(0).url!! val mediaConvert = MediaConvertClient.fromEnvironment { region = "us-west-2" endpointProvider = MediaConvertEndpointProvider { Endpoint(endpointURL) } } // output group Preset HLS low profile val hlsLow = createOutput("_low", "_\$dt$", 750000, 7, 1920, 1080, 640) // output group Preset HLS medium profile val hlsMedium = createOutput("_medium", "_\$dt$", 1200000, 7, 1920, 1080, 1280) // output group Preset HLS high profole val hlsHigh = createOutput("_high", "_\$dt$", 3500000, 8, 1920, 1080, 1920) val outputSettings = OutputGroupSettings { type = OutputGroupType.HlsGroupSettings } val outputObsList: MutableList<Output> = mutableListOf() if (hlsLow != null) { outputObsList.add(hlsLow) } if (hlsMedium != null) { outputObsList.add(hlsMedium) } if (hlsHigh != null) { outputObsList.add(hlsHigh) } // Create an OutputGroup object. val appleHLS = OutputGroup { name = "Apple HLS" customName = "Example" outputGroupSettings = OutputGroupSettings { type = OutputGroupType.HlsGroupSettings this.hlsGroupSettings = HlsGroupSettings { directoryStructure = HlsDirectoryStructure.SingleDirectory manifestDurationFormat = HlsManifestDurationFormat.Integer streamInfResolution = HlsStreamInfResolution.Include clientCache = HlsClientCache.Enabled captionLanguageSetting = HlsCaptionLanguageSetting.Omit manifestCompression = HlsManifestCompression.None codecSpecification = HlsCodecSpecification.Rfc4281 outputSelection = HlsOutputSelection.ManifestsAndSegments programDateTime = HlsProgramDateTime.Exclude programDateTimePeriod = 600 timedMetadataId3Frame = HlsTimedMetadataId3Frame.Priv timedMetadataId3Period = 10 destination = fileOutput segmentControl = HlsSegmentControl.SegmentedFiles minFinalSegmentLength = 0.toDouble() segmentLength = 4 minSegmentLength = 1 } } outputs = outputObsList } val theOutput = Output { extension = "mp4" containerSettings = ContainerSettings { container = ContainerType.fromValue("MP4") } videoDescription = VideoDescription { width = 1280 height = 720 scalingBehavior = ScalingBehavior.Default sharpness = 50 antiAlias = AntiAlias.Enabled timecodeInsertion = VideoTimecodeInsertion.Disabled colorMetadata = ColorMetadata.Insert respondToAfd = RespondToAfd.None afdSignaling = AfdSignaling.None dropFrameTimecode = DropFrameTimecode.Enabled codecSettings = VideoCodecSettings { codec = VideoCodec.H264 h264Settings = H264Settings { rateControlMode = H264RateControlMode.Qvbr parControl = H264ParControl.InitializeFromSource qualityTuningLevel = H264QualityTuningLevel.SinglePass qvbrSettings = H264QvbrSettings { qvbrQualityLevel = 8 } codecLevel = H264CodecLevel.Auto codecProfile = H264CodecProfile.Main maxBitrate = 2400000 framerateControl = H264FramerateControl.InitializeFromSource gopSize = 2.0 gopSizeUnits = H264GopSizeUnits.Seconds numberBFramesBetweenReferenceFrames = 2 gopClosedCadence = 1 gopBReference = H264GopBReference.Disabled slowPal = H264SlowPal.Disabled syntax = H264Syntax.Default numberReferenceFrames = 3 dynamicSubGop = H264DynamicSubGop.Static fieldEncoding = H264FieldEncoding.Paff sceneChangeDetect = H264SceneChangeDetect.Enabled minIInterval = 0 telecine = H264Telecine.None framerateConversionAlgorithm = H264FramerateConversionAlgorithm.DuplicateDrop entropyEncoding = H264EntropyEncoding.Cabac slices = 1 unregisteredSeiTimecode = H264UnregisteredSeiTimecode.Disabled repeatPps = H264RepeatPps.Disabled adaptiveQuantization = H264AdaptiveQuantization.High spatialAdaptiveQuantization = H264SpatialAdaptiveQuantization.Enabled temporalAdaptiveQuantization = H264TemporalAdaptiveQuantization.Enabled flickerAdaptiveQuantization = H264FlickerAdaptiveQuantization.Disabled softness = 0 interlaceMode = H264InterlaceMode.Progressive } } } audioDescriptions = listOf( AudioDescription { audioTypeControl = AudioTypeControl.FollowInput languageCodeControl = AudioLanguageCodeControl.FollowInput codecSettings = AudioCodecSettings { codec = AudioCodec.Aac aacSettings = AacSettings { codecProfile = AacCodecProfile.Lc rateControlMode = AacRateControlMode.Cbr codingMode = AacCodingMode.CodingMode2_0 sampleRate = 44100 bitrate = 160000 rawFormat = AacRawFormat.None specification = AacSpecification.Mpeg4 audioDescriptionBroadcasterMix = AacAudioDescriptionBroadcasterMix.Normal } } }, ) } // Create an OutputGroup val fileMp4 = OutputGroup { name = "File Group" customName = "mp4" outputGroupSettings = OutputGroupSettings { type = OutputGroupType.FileGroupSettings fileGroupSettings = FileGroupSettings { destination = mp4Output } } outputs = listOf(theOutput) } val containerSettings1 = ContainerSettings { container = ContainerType.Raw } val thumbs = OutputGroup { name = "File Group" customName = "thumbs" outputGroupSettings = OutputGroupSettings { type = OutputGroupType.FileGroupSettings fileGroupSettings = FileGroupSettings { destination = thumbsOutput } } outputs = listOf( Output { extension = "jpg" this.containerSettings = containerSettings1 videoDescription = VideoDescription { scalingBehavior = ScalingBehavior.Default sharpness = 50 antiAlias = AntiAlias.Enabled timecodeInsertion = VideoTimecodeInsertion.Disabled colorMetadata = ColorMetadata.Insert dropFrameTimecode = DropFrameTimecode.Enabled codecSettings = VideoCodecSettings { codec = VideoCodec.FrameCapture frameCaptureSettings = FrameCaptureSettings { framerateNumerator = 1 framerateDenominator = 1 maxCaptures = 10000000 quality = 80 } } } }, ) } val audioSelectors1: MutableMap<String, AudioSelector> = HashMap() audioSelectors1["Audio Selector 1"] = AudioSelector { defaultSelection = AudioDefaultSelection.Default offset = 0 } val jobSettings = JobSettings { inputs = listOf( Input { audioSelectors = audioSelectors1 videoSelector = VideoSelector { colorSpace = ColorSpace.Follow rotate = InputRotate.Degree0 } filterEnable = InputFilterEnable.Auto filterStrength = 0 deblockFilter = InputDeblockFilter.Disabled denoiseFilter = InputDenoiseFilter.Disabled psiControl = InputPsiControl.UsePsi timecodeSource = InputTimecodeSource.Embedded fileInput = fileInputVal outputGroups = listOf(appleHLS, thumbs, fileMp4) }, ) } val createJobRequest = CreateJobRequest { role = mcRoleARN settings = jobSettings } val createJobResponse = mediaConvert.createJob(createJobRequest) return createJobResponse.job?.id } catch (ex: MediaConvertException) { println(ex.message) mcClient.close() exitProcess(0) } } fun createOutput( nameModifierVal: String, segmentModifierVal: String, qvbrMaxBitrate: Int, qvbrQualityLevelVal: Int, originWidth: Int, originHeight: Int, targetWidth: Int, ): Output? { val targetHeight = ( (originHeight * targetWidth / originWidth).toFloat().roundToInt() - (originHeight * targetWidth / originWidth).toFloat().roundToInt() % 4 ) var output: Output? try { val audio1 = AudioDescription { audioTypeControl = AudioTypeControl.FollowInput languageCodeControl = AudioLanguageCodeControl.FollowInput codecSettings = AudioCodecSettings { codec = AudioCodec.Aac aacSettings = AacSettings { codecProfile = AacCodecProfile.Lc rateControlMode = AacRateControlMode.Cbr codingMode = AacCodingMode.CodingMode2_0 sampleRate = 44100 bitrate = 96000 rawFormat = AacRawFormat.None specification = AacSpecification.Mpeg4 audioDescriptionBroadcasterMix = AacAudioDescriptionBroadcasterMix.Normal } } } output = Output { nameModifier = nameModifierVal outputSettings = OutputSettings { hlsSettings = HlsSettings { segmentModifier = segmentModifierVal audioGroupId = "program_audio" iFrameOnlyManifest = HlsIFrameOnlyManifest.Exclude } } containerSettings = ContainerSettings { container = ContainerType.M3U8 this.m3u8Settings = M3u8Settings { audioFramesPerPes = 4 pcrControl = M3u8PcrControl.PcrEveryPesPacket pmtPid = 480 privateMetadataPid = 503 programNumber = 1 patInterval = 0 pmtInterval = 0 scte35Source = M3u8Scte35Source.None scte35Pid = 500 nielsenId3 = M3u8NielsenId3.None timedMetadata = TimedMetadata.None timedMetadataPid = 502 videoPid = 481 audioPids = listOf(482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492) } videoDescription = VideoDescription { width = targetWidth height = targetHeight scalingBehavior = ScalingBehavior.Default sharpness = 50 antiAlias = AntiAlias.Enabled timecodeInsertion = VideoTimecodeInsertion.Disabled colorMetadata = ColorMetadata.Insert respondToAfd = RespondToAfd.None afdSignaling = AfdSignaling.None dropFrameTimecode = DropFrameTimecode.Enabled codecSettings = VideoCodecSettings { codec = VideoCodec.H264 h264Settings = H264Settings { rateControlMode = H264RateControlMode.Qvbr parControl = H264ParControl.InitializeFromSource qualityTuningLevel = H264QualityTuningLevel.SinglePass qvbrSettings = H264QvbrSettings { qvbrQualityLevel = qvbrQualityLevelVal } codecLevel = H264CodecLevel.Auto codecProfile = if (targetHeight > 720 && targetWidth > 1280 ) { H264CodecProfile.High } else { H264CodecProfile.Main } maxBitrate = qvbrMaxBitrate framerateControl = H264FramerateControl.InitializeFromSource gopSize = 2.0 gopSizeUnits = H264GopSizeUnits.Seconds numberBFramesBetweenReferenceFrames = 2 gopClosedCadence = 1 gopBReference = H264GopBReference.Disabled slowPal = H264SlowPal.Disabled syntax = H264Syntax.Default numberReferenceFrames = 3 dynamicSubGop = H264DynamicSubGop.Static fieldEncoding = H264FieldEncoding.Paff sceneChangeDetect = H264SceneChangeDetect.Enabled minIInterval = 0 telecine = H264Telecine.None framerateConversionAlgorithm = H264FramerateConversionAlgorithm.DuplicateDrop entropyEncoding = H264EntropyEncoding.Cabac slices = 1 unregisteredSeiTimecode = H264UnregisteredSeiTimecode.Disabled repeatPps = H264RepeatPps.Disabled adaptiveQuantization = H264AdaptiveQuantization.High spatialAdaptiveQuantization = H264SpatialAdaptiveQuantization.Enabled temporalAdaptiveQuantization = H264TemporalAdaptiveQuantization.Enabled flickerAdaptiveQuantization = H264FlickerAdaptiveQuantization.Disabled softness = 0 interlaceMode = H264InterlaceMode.Progressive } } audioDescriptions = listOf(audio1) } } } } catch (ex: MediaConvertException) { println(ex.toString()) exitProcess(0) } return output }
-
Pour plus de détails sur l'API, reportez-vous CreateJob
à la section AWS SDK pour la référence de l'API Kotlin.
-
L'exemple de code suivant montre comment utiliserGetJob
.
- SDK pour Kotlin
-
Note
Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le référentiel d’exemples de code AWS
. suspend fun getSpecificJob( mcClient: MediaConvertClient, jobId: String?, ) { val describeEndpoints = DescribeEndpointsRequest { maxResults = 20 } val res = mcClient.describeEndpoints(describeEndpoints) if (res.endpoints?.size!! <= 0) { println("Cannot find MediaConvert service endpoint URL!") exitProcess(0) } val endpointURL = res.endpoints!!.get(0).url!! val mediaConvert = MediaConvertClient.fromEnvironment { region = "us-west-2" endpointProvider = MediaConvertEndpointProvider { Endpoint(endpointURL) } } val jobRequest = GetJobRequest { id = jobId } val response: GetJobResponse = mediaConvert.getJob(jobRequest) println("The ARN of the job is ${response.job?.arn}.") }
-
Pour plus de détails sur l'API, reportez-vous GetJob
à la section AWS SDK pour la référence de l'API Kotlin.
-
L'exemple de code suivant montre comment utiliserListJobs
.
- SDK pour Kotlin
-
Note
Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le référentiel d’exemples de code AWS
. suspend fun listCompleteJobs(mcClient: MediaConvertClient) { val describeEndpoints = DescribeEndpointsRequest { maxResults = 20 } val res = mcClient.describeEndpoints(describeEndpoints) if (res.endpoints?.size!! <= 0) { println("Cannot find MediaConvert service endpoint URL!") exitProcess(0) } val endpointURL = res.endpoints!![0].url!! val mediaConvert = MediaConvertClient.fromEnvironment { region = "us-west-2" endpointProvider = MediaConvertEndpointProvider { Endpoint(endpointURL) } } val jobsRequest = ListJobsRequest { maxResults = 10 status = JobStatus.fromValue("COMPLETE") } val jobsResponse = mediaConvert.listJobs(jobsRequest) val jobs = jobsResponse.jobs if (jobs != null) { for (job in jobs) { println("The JOB ARN is ${job.arn}") } } }
-
Pour plus de détails sur l'API, reportez-vous ListJobs
à la section AWS SDK pour la référence de l'API Kotlin.
-