private async Task LoadSettings()
{
_voipChannel.InitializeRTC();
SignalingServerPort = int.Parse(SignalingSettings.SignalingServerPort);
SignalingServerHost = SignalingSettings.SignalingServerHost;
Domain = RegistrationSettings.Domain;
#if WIN10
AppInsightsEnabled = SignalingSettings.AppInsightsEnabled;
#endif
if (_localSettings.Values[nameof(NtpServerIP)] != null)
{
NtpServerIP = (string)_localSettings.Values[nameof(NtpServerIP)];
}
if (_localSettings.Values[nameof(RTCTraceServerIp)] != null)
{
RTCTraceServerIp = (string)_localSettings.Values[nameof(RTCTraceServerIp)];
}
if (_localSettings.Values[nameof(RTCTraceServerPort)] != null)
{
RTCTraceServerPort = (string)_localSettings.Values[nameof(RTCTraceServerPort)];
}
Cameras = new ObservableCollection<MediaDevice>(_mediaSettings.GetVideoCaptureDevices().Devices);
SelectedCamera = null;
if (_localSettings.Values[nameof(SelectedCamera)] != null)
{
var id = (string)_localSettings.Values[nameof(SelectedCamera)];
var camera = Cameras.SingleOrDefault(c => c.Id.Equals(id));
if (camera != null)
{
SelectedCamera = camera;
}
}
if (SelectedCamera == null && Cameras.Count > 0)
{
SelectedCamera = Cameras.First();
}
_mediaSettings.SetVideoDevice(SelectedCamera);
Microphones = new ObservableCollection<MediaDevice>(_mediaSettings.GetAudioCaptureDevices().Devices);
SelectedMicrophone = null;
if (_localSettings.Values[nameof(SelectedMicrophone)] != null)
{
var id = (string)_localSettings.Values[nameof(SelectedMicrophone)];
var mic = Microphones.SingleOrDefault(m => m.Id.Equals(id));
if (mic != null)
{
SelectedMicrophone = mic;
}
}
if (SelectedMicrophone == null && Microphones.Count > 0)
{
SelectedMicrophone = Microphones.First();
}
_mediaSettings.SetAudioDevice(SelectedMicrophone);
AudioCodecs = new ObservableCollection<CodecInfo>();
var audioCodecList = _mediaSettings.GetAudioCodecs();
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();
}
_mediaSettings.SetAudioCodec(SelectedAudioCodec);
var videoCodecList = _mediaSettings.GetVideoCodecs().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();
}
_mediaSettings.SetVideoCodec(SelectedVideoCodec);
AudioPlayoutDevices = new ObservableCollection<MediaDevice>(_mediaSettings.GetAudioPlayoutDevices().Devices);
string savedAudioPlayoutDeviceId = null;
SelectedAudioPlayoutDevice = null;
if (_localSettings.Values[nameof(SelectedAudioPlayoutDevice)] != null)
{
savedAudioPlayoutDeviceId = (string)_localSettings.Values[nameof(SelectedAudioPlayoutDevice)];
var playoutDevice = AudioPlayoutDevices.SingleOrDefault(a => a.Id.Equals(savedAudioPlayoutDeviceId));
if (playoutDevice != null)
{
SelectedAudioPlayoutDevice = playoutDevice;
}
}
if (SelectedAudioPlayoutDevice == null && AudioPlayoutDevices.Count > 0)
{
SelectedAudioPlayoutDevice = AudioPlayoutDevices.First();
}
_mediaSettings.SetAudioPlayoutDevice(SelectedAudioPlayoutDevice);
IceServers = new ObservableCollection<IceServerViewModel>(
IceServerSettings.IceServers.Select(ices => new IceServerViewModel(ices)));
}