Ejemplo n.º 1
0
        public static Job CreateJob([ActivityTrigger] DurableActivityContext context)
        {
            ValueTuple <MediaWorkflowManifest, string, Asset> jobInput = context.GetInput <(MediaWorkflowManifest, string, Asset)>();
            MediaWorkflowManifest workflowManifest = jobInput.Item1;
            string inputFileUrl = jobInput.Item2;
            Asset  inputAsset   = jobInput.Item3;

            Job         job         = null;
            string      insightId   = null;
            MediaClient mediaClient = new MediaClient(workflowManifest);

            bool videoIndexer = workflowManifest.TransformPresets.Contains <MediaTransformPreset>(MediaTransformPreset.VideoIndexer);
            bool audioIndexer = workflowManifest.TransformPresets.Contains <MediaTransformPreset>(MediaTransformPreset.AudioIndexer);

            if (mediaClient.IndexerEnabled() && (videoIndexer || audioIndexer))
            {
                insightId = mediaClient.IndexerUploadVideo(inputFileUrl, inputAsset, workflowManifest.JobPriority, videoIndexer, audioIndexer);
            }

            Transform transform = mediaClient.GetTransform(workflowManifest.TransformPresets);

            if (transform != null)
            {
                MediaJobOutputInsight outputInsight = new MediaJobOutputInsight()
                {
                    Id           = insightId,
                    VideoIndexer = videoIndexer,
                    AudioIndexer = audioIndexer
                };
                job = mediaClient.CreateJob(transform.Name, workflowManifest.JobName, null, workflowManifest.JobPriority, inputFileUrl, inputAsset, workflowManifest.OutputAssetStorage, workflowManifest.JobOutputPublish, outputInsight, false);
            }
            return(job);
        }
Ejemplo n.º 2
0
        public static Asset CreateAsset([ActivityTrigger] DurableActivityContext context)
        {
            ValueTuple <MediaWorkflowManifest, string> jobInput = context.GetInput <(MediaWorkflowManifest, string)>();
            MediaWorkflowManifest workflowManifest = jobInput.Item1;
            string fileName = jobInput.Item2;

            MediaClient    mediaClient = new MediaClient(workflowManifest);
            CloudBlockBlob blob        = _blobClient.GetBlockBlob(_containerName, null, fileName);

            return(mediaClient.CreateAsset(workflowManifest.OutputAssetStorage, workflowManifest.AssetName, blob));
        }
Ejemplo n.º 3
0
        public static async Task Orchestrator([OrchestrationTrigger] DurableOrchestrationContext context)
        {
            ValueTuple <EventGridEvent, MediaWorkflowManifest> contextInput = context.GetInput <(EventGridEvent, MediaWorkflowManifest)>();
            EventGridEvent        queueMessage     = contextInput.Item1;
            MediaWorkflowManifest workflowManifest = contextInput.Item2;

            string inputFileName = workflowManifest.InputFileName;

            if (string.IsNullOrEmpty(inputFileName))
            {
                inputFileName = Path.GetFileName(queueMessage.Subject);
            }

            if (inputFileName.Equals(Constant.Storage.Blob.WorkflowContainerFiles, _stringComparison))
            {
                List <Task> parallelTasks = new List <Task>();
                string[]    blobNames     = await context.CallActivityAsync <string[]>("MediaWorkflow-BlobList", null);

                foreach (string blobName in blobNames)
                {
                    ValueTuple <MediaWorkflowManifest, string> workflowInput = (workflowManifest, blobName);
                    if (workflowManifest.JobInputMode == MediaJobInputMode.Asset)
                    {
                        Task parallelTask = context.CallSubOrchestratorAsync("MediaWorkflow-InputModeAsset", workflowInput);
                        parallelTasks.Add(parallelTask);
                    }
                    else
                    {
                        Task parallelTask = context.CallSubOrchestratorAsync("MediaWorkflow-InputModeFile", workflowInput);
                        parallelTasks.Add(parallelTask);
                    }
                }
                await Task.WhenAll(parallelTasks);
            }
            else
            {
                ValueTuple <MediaWorkflowManifest, string> workflowInput = (workflowManifest, inputFileName);
                if (workflowManifest.JobInputMode == MediaJobInputMode.Asset)
                {
                    await context.CallSubOrchestratorAsync("MediaWorkflow-InputModeAsset", workflowInput);
                }
                else
                {
                    await context.CallSubOrchestratorAsync("MediaWorkflow-InputModeFile", workflowInput);
                }
            }
        }
Ejemplo n.º 4
0
        private static bool InputComplete(EventGridEvent queueMessage, Stream manifestInput, out MediaWorkflowManifest workflowManifest)
        {
            workflowManifest = null;
            bool inputComplete = false;

            if (manifestInput != null)
            {
                string workflowManifestJson;
                using (StreamReader manifestReader = new StreamReader(manifestInput))
                {
                    workflowManifestJson = manifestReader.ReadToEnd();
                }
                workflowManifest = JsonConvert.DeserializeObject <MediaWorkflowManifest>(workflowManifestJson);
                if (string.IsNullOrEmpty(workflowManifest.InputFileName))
                {
                    inputComplete = !queueMessage.Subject.EndsWith(Constant.Storage.Blob.WorkflowManifestFile, _stringComparison);
                }
                else if (workflowManifest.InputFileName.Equals(Constant.Storage.Blob.WorkflowContainerFiles))
                {
                    inputComplete = true;
                }
                else
                {
                    CloudBlockBlob blob = _blobClient.GetBlockBlob(_containerName, null, workflowManifest.InputFileName);
                    inputComplete = blob.Exists();
                }
            }
            return(inputComplete);
        }