示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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
                });
            }
        }