diff --git a/lib/src/support/platform.dart b/lib/src/support/platform.dart new file mode 100644 index 0000000..de68a8d --- /dev/null +++ b/lib/src/support/platform.dart @@ -0,0 +1,15 @@ +import 'platform/io.dart' if (dart.library.html) 'platform/web.dart'; + +// Returns the current platform which works for both web and devices. +PlatformType lkPlatform() => lkPlatformImplementation(); +bool lkPlatformIs(PlatformType type) => lkPlatform() == type; + +enum PlatformType { + web, + windows, + linux, + macOS, + android, + fuchsia, + iOS, +} diff --git a/lib/src/support/platform/io.dart b/lib/src/support/platform/io.dart new file mode 100644 index 0000000..59ef81d --- /dev/null +++ b/lib/src/support/platform/io.dart @@ -0,0 +1,11 @@ +import '../platform.dart'; +import 'dart:io'; + +PlatformType lkPlatformImplementation() { + if (Platform.isWindows) return PlatformType.windows; + if (Platform.isFuchsia) return PlatformType.fuchsia; + if (Platform.isMacOS) return PlatformType.macOS; + if (Platform.isLinux) return PlatformType.linux; + if (Platform.isIOS) return PlatformType.iOS; + return PlatformType.android; +} diff --git a/lib/src/support/platform/web.dart b/lib/src/support/platform/web.dart new file mode 100644 index 0000000..ff54692 --- /dev/null +++ b/lib/src/support/platform/web.dart @@ -0,0 +1,3 @@ +import '../platform.dart'; + +PlatformType lkPlatformImplementation() => PlatformType.web; diff --git a/lib/src/support/websocket.dart b/lib/src/support/websocket.dart index 8021abf..525d974 100644 --- a/lib/src/support/websocket.dart +++ b/lib/src/support/websocket.dart @@ -1,4 +1,4 @@ -import 'platforms/io.dart' if (dart.library.html) 'platforms/web.dart'; +import 'websocket/io.dart' if (dart.library.html) 'websocket/web.dart'; class WebSocketException implements Exception { final int code; diff --git a/lib/src/support/platforms/io.dart b/lib/src/support/websocket/io.dart similarity index 100% rename from lib/src/support/platforms/io.dart rename to lib/src/support/websocket/io.dart diff --git a/lib/src/support/platforms/web.dart b/lib/src/support/websocket/web.dart similarity index 100% rename from lib/src/support/platforms/web.dart rename to lib/src/support/websocket/web.dart diff --git a/lib/src/track/audio_management.dart b/lib/src/track/audio_management.dart index 4f5e91e..a442aea 100644 --- a/lib/src/track/audio_management.dart +++ b/lib/src/track/audio_management.dart @@ -1,8 +1,4 @@ -// import 'package:audio_session/audio_session.dart' as _as; - -import 'dart:io'; - -import 'package:flutter/foundation.dart'; +import '../support/platform.dart'; import 'package:synchronized/synchronized.dart' as sync; @@ -78,7 +74,7 @@ mixin AudioManagementMixin on AudioTrack { logger.fine('[$runtimeType] didUpdateSate: $audioTrackState'); NativeAudioConfiguration? config; - if (!kIsWeb && Platform.isIOS) { + if (!lkPlatformIs(PlatformType.iOS)) { // Only iOS for now... config = await nativeAudioConfigurationForAudioTrackState .call(audioTrackState); diff --git a/lib/src/track/local.dart b/lib/src/track/local.dart index 1a67acf..9f47403 100644 --- a/lib/src/track/local.dart +++ b/lib/src/track/local.dart @@ -1,6 +1,5 @@ -import 'dart:io' show Platform; - import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc; +import '../support/platform.dart'; import 'package:meta/meta.dart'; import '../exceptions.dart'; @@ -48,7 +47,7 @@ abstract class LocalTrack extends Track { logger.fine('LocalTrack.mute() muted: $muted'); if (muted) return false; // already muted await disable(); - if (!Platform.isWindows) { + if (!lkPlatformIs(PlatformType.windows)) { await stop(); } updateMuted(true, shouldSendSignal: true); @@ -61,7 +60,7 @@ abstract class LocalTrack extends Track { Future unmute() async { logger.fine('LocalTrack.unmute() muted: $muted'); if (!muted) return false; // already un-muted - if (!Platform.isWindows) { + if (!lkPlatformIs(PlatformType.windows)) { await restartTrack(); } await enable(); @@ -74,8 +73,16 @@ abstract class LocalTrack extends Track { final didStop = await super.stop(); if (didStop) { logger.fine('Stopping mediaStreamTrack...'); - await mediaStreamTrack.stop(); - await mediaStream.dispose(); + try { + await mediaStreamTrack.stop(); + } catch (error) { + logger.severe('MediaStreamTrack.stop() did throw $error'); + } + try { + await mediaStream.dispose(); + } catch (error) { + logger.severe('MediaStreamTrack.dispose() did throw $error'); + } } return didStop; } @@ -131,7 +138,11 @@ abstract class LocalTrack extends Track { final newTrack = newStream.getTracks().first; // replace track on sender - await sender?.replaceTrack(newTrack); + try { + await sender?.replaceTrack(newTrack); + } catch (error) { + logger.severe('RTCRtpSender.replaceTrack() did throw $error'); + } // set new stream & track to this object updateMediaStreamAndTrack(newStream, newTrack);