// ----------------------------------------------------------------------- // KEY SAMPLE CODE STARTS HERE // ----------------------------------------------------------------------- private async Task DetectMotion(string subscriptionKey, string originalFilePath) { _dataContext.IsWorking = true; _dataContext.SourceUri = null; _dataContext.ResultText = null; Helpers.Log(LogIdentifier, "Start motion detection"); VideoServiceClient client = new VideoServiceClient(subscriptionKey); client.Timeout = TimeSpan.FromMinutes(10); using (FileStream originalStream = new FileStream(originalFilePath, FileMode.Open, FileAccess.Read)) { // Creates a video operation of motion detection Helpers.Log(LogIdentifier, "Start uploading video"); MotionDetectionOperationSettings settings = new MotionDetectionOperationSettings { SensitivityLevel = MotionDetectionOperationSettings.SensitivityLevels.Medium, DetectLightChange = true, FrameSamplingValue = 1, MergeTimeThreshold = 0.0 }; Operation operation = await client.CreateOperationAsync(originalStream, settings); Helpers.Log(LogIdentifier, "Uploading video done"); // Starts querying service status OperationResult result = await client.GetOperationResultAsync(operation); while (result.Status != OperationStatus.Succeeded && result.Status != OperationStatus.Failed) { Helpers.Log(LogIdentifier, "Server status: {0}, wait {1} seconds...", result.Status, QueryWaitTime.TotalSeconds); await Task.Delay(QueryWaitTime); result = await client.GetOperationResultAsync(operation); } Helpers.Log(LogIdentifier, "Finish processing with server status: " + result.Status); // Processing finished, checks result if (result.Status == OperationStatus.Succeeded) { // Gets output JSON _dataContext.SourceUri = new Uri(originalFilePath); _dataContext.ResultText = Helpers.FormatJson <MotionDetectionResult>(result.ProcessingResult); _dataContext.FrameHighlights = GetHighlights(result.ProcessingResult).ToList(); } else { // Failed Helpers.Log(LogIdentifier, "Fail reason: " + result.Message); } _dataContext.IsWorking = false; } }
/// <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); }