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); }
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)); }
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); } } }
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); }