Video optimizations (#18)

* use events for `VideoTrackRenderer`

* logger

* implemented visibility detection

* optimize code with 1 param debounce func

* stop pending visibility event when disposed

* clean up

* mark internal

* report to track

* call dispose on pub and track

* use internal events to receive visibility events

* clean up visibility for disposed track

* listen to track visibility events on pub

* re-design

* quickly re-enable

* clean up

* clean up
This commit is contained in:
Hiroshi Horie
2021-10-25 18:34:02 +09:00
committed by GitHub
parent bf1322642b
commit 16910cae25
18 changed files with 314 additions and 95 deletions
+12 -3
View File
@@ -3,15 +3,19 @@ import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc;
import 'package:meta/meta.dart';
import 'package:uuid/uuid.dart';
import '../events.dart';
import '../extensions.dart';
import '../logger.dart';
import '../managers/event.dart';
import '../proto/livekit_models.pb.dart' as lk_models;
import '../support/disposable.dart';
/// Wrapper around a MediaStreamTrack with additional metadata.
/// Base for [AudioTrack] and [VideoTrack],
/// can not be instantiated directly.
abstract class Track extends DisposableChangeNotifier {
abstract class Track extends DisposableChangeNotifier
with EventsEmittable<TrackEvent> {
static const uuid = Uuid();
static const cameraName = 'camera';
static const screenShareName = 'screen';
@@ -31,7 +35,13 @@ abstract class Track extends DisposableChangeNotifier {
this.kind,
this.name,
this.mediaStreamTrack,
);
) {
onDispose(() async {
logger.fine('${objectId} onDispose()');
// dispose events
await events.dispose();
});
}
bool get muted =>
mediaStreamTrack.muted == null ? false : mediaStreamTrack.muted!;
@@ -52,7 +62,6 @@ abstract class Track extends DisposableChangeNotifier {
var cid = _cid ?? mediaStreamTrack.id;
if (cid == null) {
const uuid = Uuid();
cid = uuid.v4();
_cid = cid;
}