public static MediaAsset CreateInstance(VideoUploadRequest videoUploadRequest) { var uniqueId = Guid.NewGuid(); var uniqueIdString = uniqueId.ToString("D"); var assetName = $"{uniqueIdString}-{videoUploadRequest.File.FileName}"; return(new MediaAsset { UniqueId = Guid.NewGuid(), FormFile = videoUploadRequest.File, AssetName = assetName, InputAssetName = $"Input-{uniqueIdString}-{videoUploadRequest.File.FileName}", OutputAssetName = $"Output-{uniqueIdString}-{videoUploadRequest.File.FileName}", JobName = $"job-{assetName}", LocatorName = $"locator-{assetName}", AssetMetaData = new AssetMetaData { FirstName = videoUploadRequest.FirstName, LastName = videoUploadRequest.LastName, PhoneNumber = videoUploadRequest.PhoneNumber, Street = videoUploadRequest.Street, ZipCode = videoUploadRequest.ZipCode, City = videoUploadRequest.City, State = videoUploadRequest.State, Date = videoUploadRequest.Date, Time = videoUploadRequest.Time } }); }
public async Task <IActionResult> Video([FromForm] VideoUploadRequest videoUploadRequest) { _logger.LogInformation("Starting upload..."); try { var result = await _azureStreamingService.UploadFileAsync(videoUploadRequest); return(new VideoResponse( VideoUploadResponse.CreateInstanceFromAsset(result), StatusCodes.Status200OK)); } catch (Exception exception) { _logger.LogError("Error uploading", exception); var error = VideoResultError.CreateInstance( "An error has occured attempting to upload the video.", HttpContext, ErrorType.InternalServer); return(new VideoResponse(error, StatusCodes.Status422UnprocessableEntity)); } }
public async Task <AssetEntity> UploadFileAsync(VideoUploadRequest videoRequest) { _logger.LogInformation("Starting Upload..."); var mediaAsset = MediaAsset.CreateInstance(videoRequest); var asset = await _assetContext.GetAssetsByName(mediaAsset.AssetName); if (asset != null) { return(asset); } _logger.LogInformation("Creating input asset..."); var inputAsset = await _azureMediaMethods.CreateInputAssetAsync(mediaAsset); _logger.LogInformation("Creating output asset..."); var outputAsset = await _azureMediaMethods.CreateOutputAssetAsync(mediaAsset.InputAssetName, mediaAsset.OutputAssetName); if (inputAsset.Name == outputAsset.Name) { _logger.LogWarning("Input and output can't be the same."); return(null); } _logger.LogInformation("Creating Transform..."); var transform = await _azureMediaMethods.GetOrCreateTransformAsync(); _logger.LogInformation("Starting job..."); var job = await _azureMediaMethods.SubmitJobAsync(transform.Name, mediaAsset.JobName, inputAsset.Name, outputAsset.Name); var waitForJob = await _azureMediaMethods.WaitForJobToFinishAsync(transform.Name, job.Name); if (waitForJob.State != JobState.Finished) { _logger.LogError("The job failed to complete..."); return(null); } //TODO: Clean up output Input Artifact _logger.LogInformation("Creating streaming Locator..."); var locator = await _azureMediaMethods.CreateStreamingLocatorAsync(outputAsset.Name, mediaAsset.LocatorName); _logger.LogInformation("Obtaining streaming urls..."); var urls = await _azureMediaMethods.GetStreamingUrlsAsync(locator.Name); var streamingUrls = urls.Select(url => new StreamingUrl { Url = url, AssetEntityId = mediaAsset.UniqueId }).ToHashSet(); mediaAsset.StreamingUrls = streamingUrls; _logger.LogInformation("Storing Results in database..."); var assetEntity = await _assetContext.CreateUpdateAssetEntity(mediaAsset); return(assetEntity); }