Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        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}");
        }
Ejemplo n.º 3
0
        /// <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);
        }