private async Task <Operation> CreateOperationAsyncInternal(object video, VideoOperationSettings videoOperationSettings)
        {
            var url = string.Format("{0}/{1}", ServiceHost, videoOperationSettings.MethodName);

            var arguments = videoOperationSettings.GetQueryParameters().ToArray();

            if (arguments.Length != 0)
            {
                var queryToAppend = string.Join("&",
                                                arguments.Select(p => WebUtility.UrlEncode(p.Key) + "=" + WebUtility.UrlEncode(p.Value)));

                var uriBuilder = new UriBuilder(url);
                if (uriBuilder.Query != null && uriBuilder.Query.Length > 1)
                {
                    uriBuilder.Query = uriBuilder.Query.Substring(1) + "&" + queryToAppend;
                }
                else
                {
                    uriBuilder.Query = queryToAppend;
                }
                url = uriBuilder.ToString();
            }

            var response = await SendRequestAsync(HttpMethod.Post, url, video);

            Operation operation = new Operation(response.Headers.GetValues(OperationLocation).First());

            return(operation);
        }
Beispiel #2
0
 /// <summary>
 /// Create video operation.
 /// </summary>
 /// <param name="videoUrl">Video url.</param>
 /// <param name="videoOperationSettings">Settings of operation.</param>
 /// <returns>Video operation created.</returns>
 public async Task <Operation> CreateOperationAsync(string videoUrl, VideoOperationSettings videoOperationSettings)
 {
     return(await CreateOperationAsyncInternal(new VideoUrlRequest()
     {
         Url = videoUrl
     }, videoOperationSettings));
 }
        public virtual Operation CreateOperation(string videoUrl, VideoOperationSettings operationSettings)
        {
            try
            {
                var result = Task.Run(async() => await VideoRepository.CreateOperationAsync(videoUrl, operationSettings)).Result;

                return(result);
            }
            catch (Exception ex)
            {
                Logger.Error("VideoService.CreateOperation failed", this, ex);
            }

            return(null);
        }
Beispiel #4
0
        /// <summary>
        /// Command function to execute a specified video operation
        /// </summary>
        /// <param name="obj"></param>
        private async void ExecuteVideoOperation(object obj)
        {
            VideoOperationSettings operationSettings = _videoOperations.CreateVideoOperationSettings(SelectedVideoOperation);

            using (FileStream originalVideo = new FileStream(_filePath, FileMode.Open, FileAccess.Read))
            {
                if (operationSettings == null)
                {
                    await _videoOperations.ExecuteVideoEmotionAnalysis(originalVideo);
                }
                else
                {
                    await _videoOperations.ExecuteVideoOperation(originalVideo, operationSettings);
                }
            }

            VideoSource = new Uri(_filePath);
        }
        /// <summary>
        /// Function to create video operation settings. Emotion operations should not have any settings
        /// </summary>
        /// <param name="operation">The currently selected API operation</param>
        /// <returns>Returns default <see cref="VideoOperationSettings"/> for the currently selected operation</returns>
        public VideoOperationSettings CreateVideoOperationSettings(AvailableOperations operation)
        {
            VideoOperationSettings videoOperationSettings = null;

            switch (operation)
            {
            case AvailableOperations.Emotion:
                videoOperationSettings = null;
                break;

            case AvailableOperations.FaceDetection:
                videoOperationSettings = new FaceDetectionOperationSettings();
                break;

            case AvailableOperations.Stabilization:
                videoOperationSettings = new VideoStabilizationOperationSettings();
                break;

            case AvailableOperations.MotionDetection:
                videoOperationSettings = new MotionDetectionOperationSettings()
                {
                    DetectLightChange  = true,
                    FrameSamplingValue = 10,
                    MergeTimeThreshold = 10,
                    SensitivityLevel   = MotionDetectionOperationSettings.SensitivityLevels.Medium
                };
                break;

            case AvailableOperations.Thumbnail:
                videoOperationSettings = new VideoThumbnailOperationSettings()
                {
                    FadeInFadeOut = true,
                    MaxMotionThumbnailDurationInSecs = 10,
                    OutputAudio = true,
                    OutputType  = VideoThumbnailOperationSettings.OutputTypes.Video
                };
                break;

            default:
                break;
            }

            return(videoOperationSettings);
        }
        /// <summary>
        /// Execute the selected video operation, when a video is in a given URL
        /// Starts a new task to get the operation results
        /// </summary>
        /// <param name="videoUrl">String containing the video URL</param>
        /// <param name="videoOperationSettings"><see cref="VideoOperationSettings"/> for the currently selected operation</param>
        /// <returns>No return value</returns>
        public async Task ExecuteVideoOperation(string videoUrl, VideoOperationSettings videoOperationSettings)
        {
            try
            {
                Operation operation = await _videoServiceClient.CreateOperationAsync(videoUrl, videoOperationSettings);

                if (operation == null)
                {
                    RaiseVideoOperationStatus(new VideoOperationStatusEventArgs("Failed", "Failed to create video operation"));
                    return;
                }

                await Task.Run(() => GetVideoOperationResultAsync(operation));
            }
            catch (Exception ex)
            {
                RaiseVideoOperationStatus(new VideoOperationStatusEventArgs("Failed", $"Failed to execute video operation: {ex.Message}"));
            }
        }
 /// <summary>
 /// Create video operation.
 /// </summary>
 /// <param name="videoUrl">Video url.</param>
 /// <param name="videoOperationSettings">Settings of operation.</param>
 /// <returns>Video operation created.</returns>
 public async Task <Operation> CreateOperationAsync(string videoUrl, VideoOperationSettings videoOperationSettings)
 {
     return(await CreateOperationAsyncInternal(videoUrl, videoOperationSettings));
 }
 /// <summary>
 /// Create video operation.
 /// </summary>
 /// <param name="video">Video byte array.</param>
 /// <param name="videoOperationSettings">Settings of operation.</param>
 /// <returns>Video operation created.</returns>
 public async Task <Operation> CreateOperationAsync(byte[] video, VideoOperationSettings videoOperationSettings)
 {
     return(await CreateOperationAsyncInternal(video, videoOperationSettings));
 }