private static JObject GetProcessorConfig(MediaJobTask jobTask) { JObject processorConfig; string collectionId = Constant.Database.Collection.ProcessorConfig; string documentId = jobTask.ProcessorConfigId; if (string.IsNullOrEmpty(documentId)) { documentId = string.Concat(jobTask.MediaProcessor.ToString(), Constant.Database.Document.DefaultIdSuffix); } using (DocumentClient documentClient = new DocumentClient()) { processorConfig = documentClient.GetDocument(collectionId, documentId); } if (processorConfig != null) { processorConfig.Remove("PresetName"); processorConfig.Remove("MediaProcessor"); processorConfig.Remove("id"); if (jobTask.ThumbnailGeneration != null) { processorConfig = UpdateThumbnailGeneration(processorConfig, jobTask.ThumbnailGeneration); } } return(processorConfig); }
private static MediaJobTask[] GetEncoderTasks(MediaClient mediaClient, MediaJobTask jobTask, MediaJobInput[] jobInputs) { if (jobTask.MediaProcessor == MediaProcessor.EncoderPremium) { Array.Sort(jobInputs, OrderByWorkflow); } JObject processorConfig = GetProcessorConfig(jobTask); jobTask.ProcessorConfig = processorConfig == null ? jobTask.ProcessorConfigId : processorConfig.ToString(); bool multipleInputTask = jobTask.MediaProcessor != MediaProcessor.EncoderStandard; return(GetJobTasks(mediaClient, jobTask, jobInputs, multipleInputTask)); }
private static MediaJobTask GetJobTask(MediaClient mediaClient, MediaJobTask jobTask, string assetName) { jobTask.Name = Processor.GetProcessorName(jobTask.MediaProcessor); if (string.IsNullOrEmpty(jobTask.OutputAssetName)) { string outputAssetName = Path.GetFileNameWithoutExtension(assetName); jobTask.OutputAssetName = string.Concat(outputAssetName, " (", jobTask.Name, ")"); } jobTask.OutputAssetEncryption = AssetCreationOptions.None; if (jobTask.ContentProtection != null) { jobTask.OutputAssetEncryption = AssetCreationOptions.StorageEncrypted; } return(jobTask); }
private static MediaJobTask MapJobTask(MediaClient mediaClient, MediaJobTask jobTask, string assetName) { jobTask.Name = Processors.GetMediaProcessorName(jobTask.MediaProcessor); if (jobTask.ProcessorConfig.Contains(Constants.Media.ProcessorConfig.EncoderStandardThumbnailsFormat)) { jobTask.Name = string.Concat(jobTask.Name, " ", Constants.Media.ProcessorConfig.EncoderStandardThumbnailsPreset); } jobTask.Name = string.Concat(jobTask.Name, " (", assetName, ")"); if (string.IsNullOrEmpty(jobTask.OutputAssetName) && !string.IsNullOrEmpty(assetName)) { jobTask.OutputAssetName = assetName; } jobTask.OutputAssetEncryption = (jobTask.ContentProtection != null) ? AssetCreationOptions.StorageEncrypted : AssetCreationOptions.None; return(jobTask); }
private static MediaJobTask[] GetFaceDetectionTasks(MediaClient mediaClient, MediaJobTask jobTask, MediaAssetInput[] inputAssets) { List <MediaJobTask> jobTasks = new List <MediaJobTask>(); jobTask.MediaProcessor = MediaProcessor.FaceDetection; string settingKey = Constants.AppSettingKey.MediaProcessorFaceDetectionDocumentId; string documentId = AppSetting.GetValue(settingKey); JObject processorConfig = GetProcessorConfig(documentId); JToken processorOptions = processorConfig["options"]; processorOptions["mode"] = jobTask.FaceDetectionMode; jobTask.ProcessorConfig = processorConfig.ToString(); MediaJobTask[] mappedJobTasks = MapJobTasks(mediaClient, jobTask, inputAssets, false); jobTasks.AddRange(mappedJobTasks); return(jobTasks.ToArray()); }
private static MediaJobTask[] GetJobTasks(MediaClient mediaClient, MediaJobTask jobTask, MediaJobInput[] jobInputs, bool multipleInputTask) { List <MediaJobTask> jobTasks = new List <MediaJobTask>(); if (multipleInputTask) { jobTask = GetJobTask(mediaClient, jobTask, jobInputs[0].AssetName); jobTask.InputAssetIds = GetAssetIds(jobInputs); jobTasks.Add(jobTask); } else { foreach (MediaJobInput jobInput in jobInputs) { jobTask = GetJobTask(mediaClient, jobTask, jobInput.AssetName); jobTask.InputAssetIds = new string[] { jobInput.AssetId }; jobTasks.Add(jobTask); } } return(jobTasks.ToArray()); }
private static MediaJobTask[] MapJobTasks(MediaClient mediaClient, MediaJobTask jobTask, MediaAssetInput[] inputAssets, bool multipleInputTask) { List <MediaJobTask> jobTasks = new List <MediaJobTask>(); if (multipleInputTask) { jobTask = MapJobTask(mediaClient, jobTask, inputAssets[0].AssetName); jobTask.InputAssetIds = GetAssetIds(inputAssets); jobTasks.Add(jobTask); } else { foreach (MediaAssetInput inputAsset in inputAssets) { MediaJobTask newJobTask = jobTask.CreateCopy(); newJobTask = MapJobTask(mediaClient, newJobTask, inputAsset.AssetName); newJobTask.InputAssetIds = new string[] { inputAsset.AssetId }; jobTasks.Add(newJobTask); } } return(jobTasks.ToArray()); }
private static MediaJobTask[] GetFaceDetectionTasks(MediaClient mediaClient, MediaJobTask jobTask, MediaJobInput[] jobInputs) { jobTask.MediaProcessor = MediaProcessor.FaceDetection; JObject processorConfig = GetProcessorConfig(jobTask); JToken processorOptions = processorConfig["Options"]; processorOptions["Mode"] = jobTask.ProcessorConfigString[MediaProcessorConfig.FaceDetectionMode.ToString()]; if (jobTask.ProcessorConfigString.ContainsKey(MediaProcessorConfig.FaceRedactionBlurMode.ToString())) { processorOptions["BlurType"] = jobTask.ProcessorConfigString[MediaProcessorConfig.FaceRedactionBlurMode.ToString()]; } if (jobTask.ProcessorConfigInteger.ContainsKey(MediaProcessorConfig.FaceEmotionAggregateWindow.ToString())) { processorOptions["AggregateEmotionWindowMs"] = jobTask.ProcessorConfigInteger[MediaProcessorConfig.FaceEmotionAggregateWindow.ToString()]; } if (jobTask.ProcessorConfigInteger.ContainsKey(MediaProcessorConfig.FaceEmotionAggregateInterval.ToString())) { processorOptions["AggregateEmotionIntervalMs"] = jobTask.ProcessorConfigInteger[MediaProcessorConfig.FaceEmotionAggregateInterval.ToString()]; } jobTask.ProcessorConfig = processorConfig.ToString(); return(GetJobTasks(mediaClient, jobTask, jobInputs, false)); }
private static MediaJobTask[] GetEncoderTasks(MediaClient mediaClient, MediaJobTask jobTask, MediaAssetInput[] inputAssets) { List <MediaJobTask> jobTasks = new List <MediaJobTask>(); if (jobTask.MediaProcessor != MediaProcessor.EncoderStandard) { List <MediaAssetInput> assets = new List <MediaAssetInput>(inputAssets); assets.Sort(OrderByWorkflow); inputAssets = assets.ToArray(); } else { if (string.Equals(jobTask.ProcessorConfig, Constants.Media.ProcessorConfig.EncoderStandardThumbnailsPreset, StringComparison.InvariantCultureIgnoreCase)) { string settingKey = Constants.AppSettingKey.MediaProcessorThumbnailGenerationDocumentId; string documentId = AppSetting.GetValue(settingKey); using (DatabaseClient databaseClient = new DatabaseClient(false)) { JObject processorConfig = databaseClient.GetDocument(documentId); jobTask.ProcessorConfig = processorConfig.ToString(); } } bool inputSubclipped = false; foreach (MediaAssetInput inputAsset in inputAssets) { if (!string.IsNullOrEmpty(inputAsset.MarkIn)) { inputSubclipped = true; } } if (inputSubclipped && !jobTask.ProcessorConfig.StartsWith("{")) { using (DatabaseClient databaseClient = new DatabaseClient(true)) { string collectionId = Constants.Database.DocumentCollection.Encoding; string procedureId = "getEncoderConfig"; JObject encoderConfig = databaseClient.ExecuteProcedure(collectionId, procedureId, "name", jobTask.ProcessorConfig); jobTask.ProcessorConfig = encoderConfig.ToString(); } } } JArray inputSources = new JArray(); foreach (MediaAssetInput inputAsset in inputAssets) { if (!string.IsNullOrEmpty(inputAsset.MarkIn)) { JObject inputSource = new JObject(); inputSource.Add("StartTime", inputAsset.MarkIn); inputSource.Add("Duration", inputAsset.ClipDuration); inputSources.Add(inputSource); } } if (inputSources.Count > 0) { JObject oldConfig = JObject.Parse(jobTask.ProcessorConfig); oldConfig.Remove("Sources"); JObject newConfig = new JObject(); newConfig.Add(oldConfig.First); newConfig.Add("Sources", inputSources); oldConfig.First.Remove(); JEnumerable <JToken> children = oldConfig.Children(); foreach (JToken child in children) { newConfig.Add(child); } jobTask.ProcessorConfig = newConfig.ToString(); } bool multipleInputTask = jobTask.MediaProcessor != MediaProcessor.EncoderStandard; MediaJobTask[] mappedJobTasks = MapJobTasks(mediaClient, jobTask, inputAssets, multipleInputTask); jobTasks.AddRange(mappedJobTasks); return(jobTasks.ToArray()); }
private static MediaJobTask[] GetMotionStabilizationTasks(MediaClient mediaClient, MediaJobTask jobTask, MediaAssetInput[] inputAssets) { List <MediaJobTask> jobTasks = new List <MediaJobTask>(); jobTask.MediaProcessor = MediaProcessor.MotionStabilization; string settingKey = Constants.AppSettingKey.MediaProcessorMotionStabilizationDocumentId; string documentId = AppSetting.GetValue(settingKey); JObject processorConfig = GetProcessorConfig(documentId); jobTask.ProcessorConfig = processorConfig.ToString(); MediaJobTask[] mappedJobTasks = MapJobTasks(mediaClient, jobTask, inputAssets, false); jobTasks.AddRange(mappedJobTasks); return(jobTasks.ToArray()); }
private static MediaJobTask[] GetMotionHyperlapseTasks(MediaClient mediaClient, MediaJobTask jobTask, MediaAssetInput[] inputAssets) { List <MediaJobTask> jobTasks = new List <MediaJobTask>(); jobTask.MediaProcessor = MediaProcessor.MotionHyperlapse; string settingKey = Constants.AppSettingKey.MediaProcessorMotionHyperlapseDocumentId; string documentId = AppSetting.GetValue(settingKey); JObject processorConfig = GetProcessorConfig(documentId); JToken processorSources = processorConfig["Sources"][0]; processorSources["StartFrame"] = jobTask.HyperlapseStartFrame; processorSources["NumFrames"] = jobTask.HyperlapseFrameCount; JToken processorOptions = processorConfig["Options"]; processorOptions["Speed"] = jobTask.HyperlapseSpeed; jobTask.ProcessorConfig = processorConfig.ToString(); MediaJobTask[] mappedJobTasks = MapJobTasks(mediaClient, jobTask, inputAssets, false); jobTasks.AddRange(mappedJobTasks); return(jobTasks.ToArray()); }
private static MediaJobTask[] GetVideoSummarizationTasks(MediaClient mediaClient, MediaJobTask jobTask, MediaAssetInput[] inputAssets) { List <MediaJobTask> jobTasks = new List <MediaJobTask>(); jobTask.MediaProcessor = MediaProcessor.VideoSummarization; string settingKey = Constants.AppSettingKey.MediaProcessorVideoSummarizationDocumentId; string documentId = AppSetting.GetValue(settingKey); JObject processorConfig = GetProcessorConfig(documentId); JToken processorOptions = processorConfig["options"]; processorOptions["maxMotionThumbnailDurationInSecs"] = jobTask.SummaryDurationSeconds; jobTask.ProcessorConfig = processorConfig.ToString(); MediaJobTask[] mappedJobTasks = MapJobTasks(mediaClient, jobTask, inputAssets, false); jobTasks.AddRange(mappedJobTasks); return(jobTasks.ToArray()); }
private static MediaJobTask[] GetCharacterRecognitionTasks(MediaClient mediaClient, MediaJobTask jobTask, MediaJobInput[] jobInputs) { jobTask.MediaProcessor = MediaProcessor.CharacterRecognition; JObject processorConfig = GetProcessorConfig(jobTask); jobTask.ProcessorConfig = processorConfig.ToString(); return(GetJobTasks(mediaClient, jobTask, jobInputs, false)); }
private static MediaJobTask[] GetSpeechAnalyzerTasks(MediaClient mediaClient, MediaJobTask jobTask, MediaJobInput[] jobInputs) { jobTask.MediaProcessor = MediaProcessor.SpeechAnalyzer; JObject processorConfig = GetProcessorConfig(jobTask); JToken processorOptions = processorConfig["Features"][0]["Options"]; JArray timedTextFormats = new JArray(); if (jobTask.ProcessorConfigBoolean[MediaProcessorConfig.SpeechAnalyzerTimedTextFormatWebVtt.ToString()]) { timedTextFormats.Add("WebVTT"); } if (jobTask.ProcessorConfigBoolean[MediaProcessorConfig.SpeechAnalyzerTimedTextFormatTtml.ToString()]) { timedTextFormats.Add("TTML"); } processorOptions["Formats"] = timedTextFormats; processorOptions["Language"] = jobTask.ProcessorConfigString[MediaProcessorConfig.SpeechAnalyzerLanguageId.ToString()]; jobTask.ProcessorConfig = processorConfig.ToString(); return(GetJobTasks(mediaClient, jobTask, jobInputs, false)); }
private static MediaJobTask[] GetVideoSummarizationTasks(MediaClient mediaClient, MediaJobTask jobTask, MediaJobInput[] jobInputs) { jobTask.MediaProcessor = MediaProcessor.VideoSummarization; JObject processorConfig = GetProcessorConfig(jobTask); JToken processorOptions = processorConfig["Options"]; processorOptions["MaxMotionThumbnailDurationInSecs"] = jobTask.ProcessorConfigInteger[MediaProcessorConfig.SummarizationDurationSeconds.ToString()]; processorOptions["FadeInFadeOut"] = jobTask.ProcessorConfigBoolean[MediaProcessorConfig.SummarizationFadeTransitions.ToString()]; processorOptions["OutputAudio"] = jobTask.ProcessorConfigBoolean[MediaProcessorConfig.SummarizationIncludeAudio.ToString()]; jobTask.ProcessorConfig = processorConfig.ToString(); return(GetJobTasks(mediaClient, jobTask, jobInputs, false)); }