/// <summary> /// Refresh audio playout devices list. /// </summary> private async Task RefreshAudioPlayoutDevicesAsync() { var selectedAudioPlayoutId = SelectedAudioPlayoutDevice?.Id; var oldAudioPlayoutDevices = AudioPlayoutDevices; AudioPlayoutDevices = await GetAudioPlayoutDevicesAsync(); var preferredAudioPlayoutDevice = AudioPlayoutDevices.FirstOrDefault(c => c.IsPreferred); SelectedAudioPlayoutDevice = (selectedAudioPlayoutId != null ? AudioPlayoutDevices.FirstOrDefault(c => c.Id == selectedAudioPlayoutId) : preferredAudioPlayoutDevice) ?? AudioPlayoutDevices.First(); if (!EtwStatsEnabled) { return; } var addedPlayoutDevicesInfo = AudioPlayoutDevices.Where( playoutDevice => oldAudioPlayoutDevices.FirstOrDefault(x => x.Id == playoutDevice.Id) == null) .Aggregate("", (current, playoutDevice) => string.Format("{0}id = {1} name = {2}\n", current, playoutDevice.Id, playoutDevice.Name)); if (addedPlayoutDevicesInfo != "") { ETWEventLogger.Instance.LogEvent("Audio Playout Device(s) Added", addedPlayoutDevicesInfo, DateTimeOffset.Now.ToUnixTimeMilliseconds().ToString()); } var removedPlayoutDevicesInfo = oldAudioPlayoutDevices.Where( playoutDevice => _audioPlayoutDevices.FirstOrDefault(x => x.Id == playoutDevice.Id) == null) .Aggregate("", (current, playoutDevice) => string.Format("{0}id = {1} name = {2}\n", current, playoutDevice.Id, playoutDevice.Name)); if (removedPlayoutDevicesInfo != "") { ETWEventLogger.Instance.LogEvent("Audio Playout Device(s) Removed", removedPlayoutDevicesInfo, DateTimeOffset.Now.ToUnixTimeMilliseconds().ToString()); } }
private void RefreshAudioPlayoutDevices(IList <MediaDevice> audioPlayoutDevices) { RunOnUiThread(() => { var selectedPlayoutDeviceId = SelectedAudioPlayoutDevice?.Id; SelectedAudioPlayoutDevice = null; AudioPlayoutDevices.Clear(); foreach (MediaDevice audioPlayoutDevice in audioPlayoutDevices) { AudioPlayoutDevices.Add(audioPlayoutDevice); if (audioPlayoutDevice.Id == selectedPlayoutDeviceId) { SelectedAudioPlayoutDevice = audioPlayoutDevice; } } if (SelectedAudioPlayoutDevice == null) { SelectedAudioPlayoutDevice = AudioPlayoutDevices.FirstOrDefault(); } }); }
private async void LoadSettings() { await _callChannel.InitializeRtcAsync(); SignalingServerPort = int.Parse(SignalingSettings.SignalingServerPort); SignalingServerHost = SignalingSettings.SignalingServerHost; Domain = RegistrationSettings.Domain; AppInsightsEnabled = SignalingSettings.AppInsightsEnabled; RegisteredUserName = RegistrationSettings.Name; if (_localSettings.Values[nameof(NtpServerIp)] != null) { NtpServerIp = (string)_localSettings.Values[nameof(NtpServerIp)]; } Cameras = new ObservableCollection <MediaDevice>((await _mediaSettings.GetVideoCaptureDevicesAsync()).Devices); SelectedCamera = Cameras.FirstOrDefault(c => c.IsPreferred) ?? Cameras.FirstOrDefault(); Microphones = await GetAudioCaptureDevicesAsync(); SelectedMicrophone = Microphones.FirstOrDefault(c => c.IsPreferred); if (SelectedMicrophone == null) { SelectedMicrophone = Microphones.First(); await _mediaSettings.SetAudioDeviceAsync(SelectedMicrophone.Id == DefaultAudioDeviceId ?null : SelectedMicrophone); } AudioPlayoutDevices = await GetAudioPlayoutDevicesAsync(); SelectedAudioPlayoutDevice = AudioPlayoutDevices.FirstOrDefault(c => c.IsPreferred); if (SelectedAudioPlayoutDevice == null) { SelectedAudioPlayoutDevice = AudioPlayoutDevices.First(); await _mediaSettings.SetAudioPlayoutDeviceAsync(SelectedAudioPlayoutDevice.Id == DefaultAudioDeviceId ?null : SelectedAudioPlayoutDevice); } AudioCodecs = new ObservableCollection <CodecInfo>(); var audioCodecList = await _mediaSettings.GetAudioCodecsAsync(); foreach (var audioCodec in audioCodecList.Codecs) { if (!_incompatibleAudioCodecs.Contains(audioCodec.Name + audioCodec.ClockRate)) { AudioCodecs.Add(audioCodec); } } SelectedAudioCodec = null; if (_localSettings.Values[nameof(SelectedAudioCodec)] != null) { var audioCodecId = (int)_localSettings.Values[nameof(SelectedAudioCodec)]; var audioCodec = AudioCodecs.SingleOrDefault(a => a.Id.Equals(audioCodecId)); if (audioCodec != null) { SelectedAudioCodec = audioCodec; } } if (SelectedAudioCodec == null && AudioCodecs.Count > 0) { SelectedAudioCodec = AudioCodecs.First(); } await _mediaSettings.SetAudioCodecAsync(SelectedAudioCodec); var videoCodecList = (await _mediaSettings.GetVideoCodecsAsync()).Codecs.OrderBy(codec => { switch (codec.Name) { case "VP8": return(1); case "VP9": return(2); case "H264": return(3); default: return(99); } }); VideoCodecs = new ObservableCollection <CodecInfo>(videoCodecList); SelectedVideoCodec = null; if (_localSettings.Values[nameof(SelectedVideoCodec)] != null) { var videoCodecId = (int)_localSettings.Values[nameof(SelectedVideoCodec)]; var videoCodec = VideoCodecs.SingleOrDefault(v => v.Id.Equals(videoCodecId)); if (videoCodec != null) { SelectedVideoCodec = videoCodec; } } if (SelectedVideoCodec == null && VideoCodecs.Count > 0) { SelectedVideoCodec = VideoCodecs.First(); } await _mediaSettings.SetVideoCodecAsync(SelectedVideoCodec); IceServers = new ObservableCollection <IceServerViewModel>( IceServerSettings.IceServers.Select(ices => new IceServerViewModel(ices))); if (_localSettings.Values[nameof(StatsServerPort)] != null) { StatsServerPort = (int)_localSettings.Values[nameof(StatsServerPort)]; } else { StatsServerPort = 47005; } if (_localSettings.Values[nameof(StatsServerHost)] != null) { StatsServerHost = (string)_localSettings.Values[nameof(StatsServerHost)]; } else { StatsServerHost = "localhost"; } }