-
-
Notifications
You must be signed in to change notification settings - Fork 492
/
Copy pathMediaDeviceTracker.cs
81 lines (68 loc) · 2.48 KB
/
MediaDeviceTracker.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using System;
using System.Collections.Generic;
namespace Telegram.Common
{
public enum MediaDeviceClass
{
VideoInput,
AudioInput,
AudioOutput
}
public record MediaDevice2(string Id, string Name, MediaDeviceClass Class);
public record MediaDeviceId(string Id, bool IsDefault);
public record MediaDeviceChangedEventArgs(MediaDeviceClass DeviceClass, string DeviceId);
public partial class MediaDeviceTracker
{
private readonly Dictionary<MediaDeviceClass, MediaDeviceList> _devices = new()
{
{ MediaDeviceClass.VideoInput, new MediaDeviceList(MediaDeviceClass.VideoInput) },
{ MediaDeviceClass.AudioInput, new MediaDeviceList(MediaDeviceClass.AudioInput) },
{ MediaDeviceClass.AudioOutput, new MediaDeviceList(MediaDeviceClass.AudioOutput) },
};
// TODO: implement storage of chosen devices
public void Stop()
{
_devices[MediaDeviceClass.VideoInput].Stop();
_devices[MediaDeviceClass.AudioInput].Stop();
_devices[MediaDeviceClass.AudioOutput].Stop();
}
public event EventHandler<MediaDeviceChangedEventArgs> Changed
{
add
{
_devices[MediaDeviceClass.VideoInput].Changed += value;
_devices[MediaDeviceClass.AudioInput].Changed += value;
_devices[MediaDeviceClass.AudioOutput].Changed += value;
}
remove
{
_devices[MediaDeviceClass.VideoInput].Changed -= value;
_devices[MediaDeviceClass.AudioInput].Changed -= value;
_devices[MediaDeviceClass.AudioOutput].Changed -= value;
}
}
public bool? HasDevices(MediaDeviceClass deviceClass)
{
if (_devices.TryGetValue(deviceClass, out var devices))
{
return devices.HasValues;
}
return false;
}
public IList<MediaDevice2> GetDevices(MediaDeviceClass deviceClass)
{
if (_devices.TryGetValue(deviceClass, out var devices))
{
return devices.GetValues();
}
return Array.Empty<MediaDevice2>();
}
public void Track(MediaDeviceClass deviceClass, string deviceId)
{
if (_devices.TryGetValue(deviceClass, out var devices))
{
devices.Track(deviceId);
}
}
}
}