public async Task <Job> CreateEncodeJobAsync(IZeroBlob original, string encodedFileName, int contentId, CancellationToken cancellationToken) { var extension = Path.GetExtension(original.GetName()); if (extension == null || !_settings.SupportedVideoTypes.Contains(extension.ToLower())) { throw new NotSupportedException("Video type not supported"); } string uniqueness = $"{contentId}-{Guid.NewGuid().ToString("N").Substring(0, 10)}"; string jobName = $"job-{uniqueness}"; string outputAssetName = $"output-{uniqueness}"; var output = new Asset(description: $"{contentId}-{encodedFileName}"); var outPutAsset = await _client.Assets.CreateOrUpdateAsync(_settings.ResourceGroup, _settings.AccountName, outputAssetName, output, cancellationToken); JobOutput[] jobOutputs = { new JobOutputAsset(outPutAsset.Name) }; var jobInput = new JobInputHttp { Files = new[] { original.GetReadSharedAccessUrl("*") } }; IDictionary <string, string> correlationData = null; // Add custom data sent with the job. Can then be used when processing it. var job = await _client.Jobs.CreateAsync( _settings.ResourceGroup, _settings.AccountName, _settings.MediaServicesTransform, jobName, new Job { Input = jobInput, Outputs = jobOutputs, CorrelationData = correlationData } , cancellationToken); return(job); }