Ejemplo n.º 1
0
        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;
            }));
        }
Ejemplo n.º 2
0
        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);
        }