/// <summary> /// /// </summary> /// <param name="uploadVideoRequest"></param> /// <param name="uploadResult"></param> /// <returns></returns> /// public bool CreateAzureMediaServicesJobToModerateVideo(UploadVideoStreamRequest uploadVideoRequest, UploadAssetResult uploadResult) { asset = CreateAsset(uploadVideoRequest); uploadResult.VideoName = uploadVideoRequest.VideoName; // Encoding the asset , Moderating the asset, Generating transcript in parallel IAsset encodedAsset = null; //Creates the job for the tasks. IJob job = this._mediaContext.Jobs.Create("AMS Review Job"); //Adding encoding task to job. ConfigureEncodeAssetTask(uploadVideoRequest.EncodingRequest, job); ConfigureContentModerationTask(job); //adding transcript task to job. if (uploadResult.GenerateVTT) { ConfigureTranscriptTask(job); } var watch = System.Diagnostics.Stopwatch.StartNew(); //submit and execute job. job.Submit(); job.GetExecutionProgressTask(new CancellationTokenSource().Token).Wait(); watch.Stop(); Logger.Log($"AMS Job Elapsed Time: {watch.Elapsed}"); if (job.State == JobState.Error) { throw new Exception("Video moderation has failed due to AMS Job error."); } UploadAssetResult result = uploadResult; encodedAsset = job.OutputMediaAssets[0]; result.ModeratedJson = GetCmDetail(job.OutputMediaAssets[1]); // Check for valid Moderated JSON var jsonModerateObject = JsonConvert.DeserializeObject <VideoModerationResult>(result.ModeratedJson); if (jsonModerateObject == null) { return(false); } if (uploadResult.GenerateVTT) { GenerateTranscript(job.OutputMediaAssets.Last()); } uploadResult.StreamingUrlDetails = PublishAsset(encodedAsset); string downloadUrl = GenerateDownloadUrl(asset, uploadVideoRequest.VideoName); uploadResult.StreamingUrlDetails.DownloadUri = downloadUrl; uploadResult.VideoName = uploadVideoRequest.VideoName; uploadResult.VideoFilePath = uploadVideoRequest.VideoFilePath; return(true); }
private static async Task ProcessVideo(string videoPath) { var watch = System.Diagnostics.Stopwatch.StartNew(); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("\nVideo compression process started..."); var compressedVideoPath = amsComponent.CompressVideo(videoPath); if (string.IsNullOrWhiteSpace(compressedVideoPath)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Video Compression failed."); } Console.WriteLine("\nVideo compression process completed..."); UploadVideoStreamRequest uploadVideoStreamRequest = CreateVideoStreamingRequest(compressedVideoPath); UploadAssetResult uploadResult = new UploadAssetResult(); if (generateVtt) { uploadResult.GenerateVTT = generateVtt; } Console.WriteLine("\nVideo moderation process started..."); if (!videoModerator.CreateAzureMediaServicesJobToModerateVideo(uploadVideoStreamRequest, uploadResult)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\nVideo moderation process failed."); } Console.WriteLine("\nVideo moderation process completed..."); Console.WriteLine("\nVideo review process started..."); string reviewId = await videoReviewApi.CreateVideoReviewInContentModerator(uploadResult); watch.Stop(); Console.WriteLine("\nVideo review successfully completed..."); Console.WriteLine("\nTotal Elapsed Time: {0}", watch.Elapsed); Logger.Log("Video File Name: " + Path.GetFileName(videoPath)); Logger.Log($"ReviewId: {reviewId}"); Logger.Log($"Total Elapsed Time: {watch.Elapsed}"); }
/// <summary> /// Creates an Asset /// </summary> /// <param name="uploadVideoRequest">uploadVideoRequest</param> /// <returns>Returns a asset</returns> public IAsset CreateAsset(UploadVideoStreamRequest uploadVideoRequest) { _processedAssetName = uploadVideoRequest.VideoName; var assetName = Path.GetFileNameWithoutExtension(_processedAssetName); asset = _mediaContext.Assets.Create(assetName, AssetCreationOptions.None); var assetFile = asset.AssetFiles.Create(_processedAssetName); using (Stream stream = new MemoryStream(uploadVideoRequest.VideoStream)) { var policy = _mediaContext.AccessPolicies.Create( assetName, TimeSpan.FromDays(this._amsConfigurations.StreamingUrlActiveDays), AccessPermissions.List | AccessPermissions.Read); var locator = _mediaContext.Locators.CreateLocator(LocatorType.OnDemandOrigin, asset, policy); assetFile.Upload(stream); locator.Delete(); policy.Delete(); } return(asset); }