public async Task <bool> CopyBlobAsync(IZeroBlob original) { var azureBlobOriginal = original as AzureBlob; var originalExists = await original.ExistsAsync(); if (azureBlobOriginal == null || !originalExists) { return(false); } await Blob.StartCopyAsync(azureBlobOriginal.Blob); while (Blob.CopyState.Status == CopyStatus.Pending) { await Task.Delay(100); } if (Blob.CopyState.Status != CopyStatus.Success) { return(false); } var type = await azureBlobOriginal.GetContentTypeAsync(); await SetContentTypeAsync(type); return(true); }
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); }
public async Task <MediaEncodeProgressDto> GetEncodeProgressAsync(string jobName, IZeroBlob resultingFile) { var job = await _client.Jobs.GetAsync(_settings.ResourceGroup, _settings.AccountName, _settings.MediaServicesTransform, jobName); if (job == null) { return(new MediaEncodeProgressDto { Status = EncodeStatus.NotFound, ProgressPercentage = 0, Errors = "Not found" }); } var status = ConvertToEncodeStatus(job.State); var firstOutput = job.Outputs.FirstOrDefault() as JobOutputAsset; switch (status) { case EncodeStatus.Processing: return(new MediaEncodeProgressDto { Status = status, ProgressPercentage = firstOutput.Progress }); case EncodeStatus.Finished: var exists = await resultingFile.ExistsAsync(); var size = await resultingFile.GetSizeAsync(); if (exists && size < 1) { status = EncodeStatus.Copying; } return(new MediaEncodeProgressDto { Status = status }); case EncodeStatus.Error: return(new MediaEncodeProgressDto { Status = status, ProgressPercentage = firstOutput?.Progress ?? 0, Errors = firstOutput == null ? string.Empty : string.Concat(firstOutput.Error.Details.Select(ed => ed.Message)) }); default: return(new MediaEncodeProgressDto { Status = status }); } }