/// <summary> /// Starts media recording asynchronously /// </summary> /// <param name="encodingProfile"> /// Encoding profile used for the recording session /// </param> public async Task StartRecordingAsync(MediaEncodingProfile encodingProfile) { try { // We cannot start recording twice. if (mediaSink != null && recordingStarted) { throw new InvalidOperationException("Recording already started."); } // Release sink if there is one already. CleanupSink(); // Create new sink mediaSink = new StspMediaSinkProxy(); mediaSink.IncomingConnectionEvent += mediaSink_IncomingConnectionEvent; var mfExtension = await mediaSink.InitializeAsync(encodingProfile.Audio, encodingProfile.Video); await mediaCapture.StartRecordToCustomSinkAsync(encodingProfile, mfExtension); recordingStarted = true; } catch (Exception e) { CleanupSink(); throw e; } }
public async Task StartRecordToSinkAsync(MediaEncodingProfile encodingProfile) { lock (this) { isInitialized.CheckIfFulfills("Camera", "initialized", true); isRecording.CheckIfFulfills("Camera", "recording", false); isRecording = true; } CleanupSink(); mediaSink = new StspMediaSinkProxy(); mediaSink.IncomingConnectionEvent += MediaSink_IncomingConnectionEvent; try { IMediaExtension mfExtension = await mediaSink.InitializeAsync(encodingProfile.Audio, encodingProfile.Video); await mediaCapture.StartRecordToCustomSinkAsync(encodingProfile, mfExtension); } catch (Exception ex) { CleanupSink(); throw new Exception($"Camera could not start record to sink: { ex.Message }. { Logger.GetExceptionLocalization(this) }"); } }