private async Task PlayLiveVideo() { var allGroups = await MediaFrameSourceGroup.FindAllAsync(); var eligibleGroups = allGroups.Select(g => new { Group = g, // For each source kind, find the source which offers that kind of media frame, // or null if there is no such source. SourceInfos = new MediaFrameSourceInfo[] { g.SourceInfos.FirstOrDefault(info => info.DeviceInformation?.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Front && info.SourceKind == MediaFrameSourceKind.Color), g.SourceInfos.FirstOrDefault(info => info.DeviceInformation?.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Back && info.SourceKind == MediaFrameSourceKind.Color) } }).Where(g => g.SourceInfos.Any(info => info != null)).ToList(); if (eligibleGroups.Count == 0) { System.Diagnostics.Debug.WriteLine("No source group with front and back-facing camera found."); return; } var selectedGroupIndex = 0; // Select the first eligible group MediaFrameSourceGroup selectedGroup = eligibleGroups[selectedGroupIndex].Group; MediaFrameSourceInfo frontSourceInfo = selectedGroup.SourceInfos[0]; MediaCapture mediaCapture = new MediaCapture(); MediaCaptureInitializationSettings settings = new MediaCaptureInitializationSettings() { SourceGroup = selectedGroup, SharingMode = MediaCaptureSharingMode.ExclusiveControl, MemoryPreference = MediaCaptureMemoryPreference.Cpu, StreamingCaptureMode = StreamingCaptureMode.Video, }; try { await mediaCapture.InitializeAsync(settings); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("MediaCapture initialization failed: " + ex.Message); return; } var frameMediaSource1 = MediaSource.CreateFromMediaFrameSource(mediaCapture.FrameSources[frontSourceInfo.Id]); VideoStreamer.SetPlaybackSource(frameMediaSource1); VideoStreamer.Play(); }
private void SetupVideoStream(VideoStreamSettings settings) { logger.Debug("SetupVideoStream(...)"); try { videoStreamer = new VideoStreamer(videoSource); videoStreamer.Setup(settings.EncodingParams, settings.NetworkParams); } catch (Exception ex) { logger.Error(ex); if (videoStreamer != null) { videoStreamer.Close(); videoStreamer = null; } throw; } }
private void StartStreaming() { logger.Debug("ScreenStreamer::StartStreaming()"); var videoSettings = Session.VideoSettings; if (videoSettings.Enabled) { var captureDevice = (VideoCaptureDevice)videoSettings.CaptureDevice.Clone(); if (captureDevice.CaptureMode == CaptureMode.Screen) { var screenDevice = (ScreenCaptureDevice)captureDevice; if (screenDevice.CaptureRegion.Width > Config.MaxVideoEncoderWidth) { screenDevice.CaptureRegion.Width = Config.MaxVideoEncoderWidth; } if (screenDevice.CaptureRegion.Height > Config.MaxVideoEncoderHeight) { screenDevice.CaptureRegion.Height = Config.MaxVideoEncoderHeight; } screenDevice.Resolution = MediaToolkit.Utils.GraphicTools.DecreaseToEven(screenDevice.CaptureRegion.Size); } var videoEncoderSettings = (VideoEncoderSettings)videoSettings.EncoderSettings.Clone(); if (videoSettings.UseEncoderResoulutionFromSource) { videoEncoderSettings.Width = captureDevice.Resolution.Width; videoEncoderSettings.Height = captureDevice.Resolution.Height; } else { captureDevice.Resolution = videoEncoderSettings.Resolution; } if (captureDevice.CaptureMode == CaptureMode.UvcDevice) { videoSource = new VideoCaptureSource(); } else if (captureDevice.CaptureMode == CaptureMode.Screen) { videoSource = new ScreenSource(); } videoSource.Setup(captureDevice); videoSource.CaptureStarted += VideoSource_CaptureStarted; videoSource.CaptureStopped += VideoSource_CaptureStopped; if (Session.TransportMode == TransportMode.Tcp || Session.IsMulticast) { videoStreamer = new VideoStreamer(videoSource); videoStreamer.Setup(videoEncoderSettings, videoSettings.NetworkSettings); //videoStreamer.Setup(videoSettings.EncoderSettings, videoSettings.NetworkSettings); } else { // currently not supported... } } var audioSettings = Session.AudioSettings; if (audioSettings.Enabled) { audioSource = new AudioSource(); var captureDevice = audioSettings.CaptureDevice; var deviceId = captureDevice.DeviceId; var captureProps = captureDevice.Properties; audioSource.Setup(deviceId, captureProps); if (Session.TransportMode == TransportMode.Tcp || Session.IsMulticast) { audioStreamer = new AudioStreamer(audioSource); audioStreamer.Setup(audioSettings.EncoderSettings, audioSettings.NetworkSettings); audioStreamer.StateChanged += AudioStreamer_StateChanged; } else { // currently not supported... } } communicationService = new CommunicationService(this); communicationService.Open(); if (videoSettings.Enabled) { videoSource.Start(); videoStreamer.Start(); } if (audioSettings.Enabled) { audioSource.Start(); audioStreamer.Start(); } }