public Task <IList <MediaStreamTrack> > GetUserMedia(RTCMediaStreamConstraints mediaStreamConstraints) { return(Task.Run(() => { var constraints = Helper.MakeConstraints(mediaStreamConstraints.audioEnabled, null, MediaDeviceKind.AudioInput, _audioCaptureDevice); constraints = Helper.MakeConstraints(mediaStreamConstraints.videoEnabled, constraints, MediaDeviceKind.VideoInput, _videoDevice); if (constraints.Video != null && constraints.Video.Advanced.Count > 0) { MediaTrackConstraintSet constraintSet = constraints.Video.Advanced.First(); constraintSet.Width = new ConstrainLong { Value = _preferredFrameWidth }; constraintSet.Height = new ConstrainLong { Value = _preferredFrameHeight }; constraintSet.FrameRate = new ConstrainDouble { Value = _preferredFPS }; } Task <IList <MediaStreamTrack> > task = MediaDevices.GetUserMedia(constraints).AsTask(); return task.Result; })); }
public static MediaStreamConstraints MakeConstraints( bool shouldDoThis, MediaStreamConstraints existingConstraints, MediaDeviceKind kind, MediaDevice device ) { if (!shouldDoThis) { return(existingConstraints); } if (null == device) { return(existingConstraints); } if (null == existingConstraints) { existingConstraints = new MediaStreamConstraints(); } IMediaTrackConstraints trackConstraints = null; switch (kind) { case MediaDeviceKind.AudioInput: trackConstraints = existingConstraints.Audio; break; case MediaDeviceKind.AudioOutput: trackConstraints = existingConstraints.Audio; break; case MediaDeviceKind.VideoInput: trackConstraints = existingConstraints.Video; break; } if (null == trackConstraints) { trackConstraints = new MediaTrackConstraints(); } var newAdvancedList = new List <MediaTrackConstraintSet>(); if (null == trackConstraints.Advanced) { trackConstraints.Advanced = newAdvancedList; } var constraintSet = new MediaTrackConstraintSet { DeviceId = new ConstrainString { Parameters = new ConstrainStringParameters { Exact = new StringOrStringList { Value = device.Id } }, Value = new StringOrStringList { Value = device.Id } } }; newAdvancedList.Add(constraintSet); trackConstraints.Advanced = newAdvancedList; switch (kind) { case MediaDeviceKind.AudioInput: existingConstraints.Audio = trackConstraints; break; case MediaDeviceKind.AudioOutput: existingConstraints.Audio = trackConstraints; break; case MediaDeviceKind.VideoInput: existingConstraints.Video = trackConstraints; break; } return(existingConstraints); }