public async Task RefreshVideoCaptureFormatsAsync(VideoCaptureDeviceInfo item) { var formats = new CollectionViewModel <VideoCaptureFormatViewModel>(); if (item != null) { IReadOnlyList <VideoCaptureFormat> formatsList; string profileId = VideoProfiles.SelectedItem?.uniqueId; if (string.IsNullOrEmpty(profileId)) { // Device doesn't support video profiles; fall back on flat list of capture formats. formatsList = await DeviceVideoTrackSource.GetCaptureFormatsAsync(item.Id); } else { // Enumerate formats for the specified profile only formatsList = await DeviceVideoTrackSource.GetCaptureFormatsAsync(item.Id, profileId); } foreach (var format in formatsList) { formats.Add(new VideoCaptureFormatViewModel { Format = format, FormatEncodingDisplayName = FourCCToString(format.fourcc) }); } } VideoCaptureFormats = formats; // Select first item for convenience VideoCaptureFormats.SelectFirstItemIfAny(); }
public void RefreshVideoProfiles(VideoCaptureDeviceInfo item, VideoProfileKind kind) { var videoProfiles = new CollectionViewModel <MediaCaptureVideoProfile>(); if (item != null) { IReadOnlyList <MediaCaptureVideoProfile> profiles; if (kind == VideoProfileKind.Unspecified) { profiles = MediaCapture.FindAllVideoProfiles(item.Id); } else { int index = (int)kind; profiles = MediaCapture.FindKnownVideoProfiles(item.Id, (KnownVideoProfile)index); } foreach (var profile in profiles) { videoProfiles.Add(profile); } } VideoProfiles = videoProfiles; // Select first item for convenience VideoProfiles.SelectFirstItemIfAny(); }
public void RefreshVideoProfiles(VideoCaptureDeviceInfo item, VideoProfileKind kind) { var videoProfiles = new CollectionViewModel <MediaCaptureVideoProfile>(); if (item != null) { IReadOnlyList <MediaCaptureVideoProfile> profiles; if (kind == VideoProfileKind.Unspecified) { profiles = MediaCapture.FindAllVideoProfiles(item.Id); } else { // VideoProfileKind and KnownVideoProfile are the same with the exception of // `Unspecified` that takes value 0. var profile = (KnownVideoProfile)((int)kind - 1); profiles = MediaCapture.FindKnownVideoProfiles(item.Id, profile); } foreach (var profile in profiles) { videoProfiles.Add(profile); } } VideoProfiles = videoProfiles; // Select first item for convenience VideoProfiles.SelectFirstItemIfAny(); }
public async Task RefreshVideoCaptureDevicesAsync() { Logger.Log($"Refreshing list of video capture devices"); ErrorMessage = null; try { await Utils.RequestMediaAccessAsync(StreamingCaptureMode.Video); } catch (UnauthorizedAccessException uae) { ErrorMessage = "This application is not authorized to access the local camera device. Change permission settings and restart the application."; throw uae; } catch (Exception ex) { ErrorMessage = ex.Message; throw ex; } // Populate the list of video capture devices (webcams). // On UWP this uses internally the API: // Devices.Enumeration.DeviceInformation.FindAllAsync(VideoCapture) // Note that there's no API to pass a given device to WebRTC, // so there's no way to monitor and update that list if a device // gets plugged or unplugged. Even using DeviceInformation.CreateWatcher() // would yield some devices that might become unavailable by the time // WebRTC internally opens the video capture device. // This is more for demo purpose here because using the UWP API is nicer. var devices = await DeviceVideoTrackSource.GetCaptureDevicesAsync(); var deviceList = new CollectionViewModel <VideoCaptureDeviceInfo>(); foreach (var device in devices) { Logger.Log($"Found video capture device: id={device.id} name={device.name}"); deviceList.Add(new VideoCaptureDeviceInfo(id: device.id, displayName: device.name)); } VideoCaptureDevices = deviceList; // Auto-select first device for convenience VideoCaptureDevices.SelectFirstItemIfAny(); }
public async void RefreshVideoProfiles(VideoCaptureDeviceInfo item, VideoProfileKind kind) { // Clear formats, which are profile-dependent. This ensures the former list doesn't // stay visible if the current profile kind is not supported (does not return any profile). VideoCaptureFormats.Clear(); var videoProfiles = new CollectionViewModel <VideoProfile>(); if (item != null) { IReadOnlyList <VideoProfile> profiles = await DeviceVideoTrackSource.GetCaptureProfilesAsync(item.Id, kind); foreach (var profile in profiles) { videoProfiles.Add(profile); } } VideoProfiles = videoProfiles; // Select first item for convenience VideoProfiles.SelectFirstItemIfAny(); }
public async Task RefreshVideoCaptureFormatsAsync(VideoCaptureDeviceInfo item) { var formats = new CollectionViewModel <VideoCaptureFormatViewModel>(); if (item != null) { if (MediaCapture.IsVideoProfileSupported(item.Id)) { foreach (var desc in VideoProfiles.SelectedItem?.SupportedRecordMediaDescription) { var formatVM = new VideoCaptureFormatViewModel(); formatVM.Format.width = desc.Width; formatVM.Format.height = desc.Height; formatVM.Format.framerate = desc.FrameRate; //formatVM.Format.fourcc = desc.Subtype; // TODO: string => FOURCC formatVM.FormatEncodingDisplayName = desc.Subtype; formats.Add(formatVM); } } else { // Device doesn't support video profiles; fall back on flat list of capture formats. List <VideoCaptureFormat> formatsList = await PeerConnection.GetVideoCaptureFormatsAsync(item.Id); foreach (var format in formatsList) { formats.Add(new VideoCaptureFormatViewModel { Format = format, FormatEncodingDisplayName = FourCCToString(format.fourcc) }); } } } VideoCaptureFormats = formats; // Select first item for convenience VideoCaptureFormats.SelectFirstItemIfAny(); }