import 'dart:async'; import 'package:random_string/random_string.dart'; import 'package:webrtc_interface/webrtc_interface.dart'; import 'package:matrix/matrix.dart'; Future stopMediaStream(MediaStream? stream) async { if (stream != null) { for (final track in stream.getTracks()) { try { await track.stop(); } catch (e, s) { Logs().e('[VOIP] stopping track ${track.id} failed', e, s); } } try { await stream.dispose(); } catch (e, s) { Logs().e('[VOIP] disposing stream ${stream.id} failed', e, s); } } } void setTracksEnabled(List tracks, bool enabled) { tracks.forEach((element) { element.enabled = enabled; }); } Future hasAudioDevice() async { //TODO(duan): implement this, check if there is any audio device return true; } Future hasVideoDevice() async { //TODO(duan): implement this, check if there is any video device return true; } String roomAliasFromRoomName(String roomName) { return roomName.trim().replaceAll('-', '').toLowerCase(); } String genCallID() { return '${DateTime.now().millisecondsSinceEpoch}${randomAlphaNumeric(16)}'; }