Line data Source code
1 : import 'package:collection/collection.dart';
2 : import 'package:random_string/random_string.dart';
3 : import 'package:webrtc_interface/webrtc_interface.dart';
4 :
5 : import 'package:matrix/matrix.dart';
6 :
7 2 : Future<void> stopMediaStream(MediaStream? stream) async {
8 : if (stream != null) {
9 2 : for (final track in stream.getTracks()) {
10 : try {
11 0 : await track.stop();
12 : } catch (e, s) {
13 0 : Logs().e('[VOIP] stopping track ${track.id} failed', e, s);
14 : }
15 : }
16 : try {
17 2 : await stream.dispose();
18 : } catch (e, s) {
19 0 : Logs().e('[VOIP] disposing stream ${stream.id} failed', e, s);
20 : }
21 : }
22 : }
23 :
24 0 : void setTracksEnabled(List<MediaStreamTrack> tracks, bool enabled) {
25 0 : for (final element in tracks) {
26 0 : element.enabled = enabled;
27 : }
28 : }
29 :
30 0 : Future<bool> hasMediaDevice(
31 : WebRTCDelegate delegate,
32 : MediaInputKind mediaInputKind,
33 : ) async {
34 0 : final devices = await delegate.mediaDevices.enumerateDevices();
35 : return devices
36 0 : .where((device) => device.kind == mediaInputKind.name)
37 0 : .isNotEmpty;
38 : }
39 :
40 0 : Future<void> updateMediaDevice(
41 : WebRTCDelegate delegate,
42 : MediaKind kind,
43 : List<RTCRtpSender> userRtpSenders, [
44 : MediaStreamTrack? track,
45 : ]) async {
46 : final sender = userRtpSenders
47 0 : .firstWhereOrNull((element) => element.track!.kind == kind.name);
48 0 : await sender?.track?.stop();
49 : if (track != null) {
50 0 : await sender?.replaceTrack(track);
51 : } else {
52 0 : final stream = await delegate.mediaDevices.getUserMedia({kind.name: true});
53 : MediaStreamTrack? track;
54 0 : if (kind == MediaKind.audio) {
55 0 : track = stream.getAudioTracks().firstOrNull;
56 0 : } else if (kind == MediaKind.video) {
57 0 : track = stream.getVideoTracks().firstOrNull;
58 : }
59 : if (track != null) {
60 0 : await sender?.replaceTrack(track);
61 : }
62 : }
63 : }
64 :
65 2 : String genCallID() {
66 8 : return '${DateTime.now().millisecondsSinceEpoch}${randomAlphaNumeric(16)}';
67 : }
|