using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Core; namespace Tango.FSE.Common.RemoteDesktop { public class VideoRecordingHandler : ExtendedObject { private IRemoteDesktopProvider _provider; private Mp4VideoEncoder _encoder; public event EventHandler> Progress; private TangoProgress _saveProgress; public TangoProgress SaveProgress { get { return _saveProgress; } set { _saveProgress = value; RaisePropertyChangedAuto(); } } public VideoRecordingHandler(IRemoteDesktopProvider provider) { _provider = provider; provider.FrameReceived += Provider_FrameReceived; _encoder = new Mp4VideoEncoder(); _encoder.Progress += _encoder_Progress; _encoder.Start(); } private void Provider_FrameReceived(object sender, DesktopFrameReceivedEventArgs e) { _encoder.PushFrame(e.Source); } public void Stop() { _encoder.Stop(); } public void Cancel() { _encoder.Cancel(); } public Task Save(String outputFile) { return _encoder.Save(new VideoConfiguration() { Quality = VideoQuality.Good, FrameWidth = _provider.FrameWidth, FrameHeight = _provider.FrameHeight, FrameRate = _provider.FrameRate }, outputFile); } private void _encoder_Progress(object sender, TangoProgressChangedEventArgs e) { SaveProgress = e.Progress; Progress?.Invoke(this, e); } } }