Example #1
0
        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);
        }
Example #2
0
        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));
        }
Example #3
0
 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);
 }
Example #4
0
 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);
 }
Example #5
0
        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());
        }
Example #6
0
        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());
        }
Example #7
0
        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));
        }
Example #9
0
        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());
        }
Example #10
0
        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());
        }
Example #11
0
        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());
        }
Example #12
0
        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));
        }