* 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
42 lines
910 B
Dart
42 lines
910 B
Dart
import 'package:flutter_webrtc/flutter_webrtc.dart' as rtc;
|
|
import 'package:meta/meta.dart';
|
|
|
|
import '../proto/livekit_models.pb.dart' as lk_models;
|
|
import 'track.dart';
|
|
|
|
/// A video track will notify when its mediaTrack has changed.
|
|
class VideoTrack extends Track {
|
|
rtc.MediaStream _mediaStream;
|
|
|
|
VideoTrack(
|
|
String name,
|
|
rtc.MediaStreamTrack mediaTrack,
|
|
this._mediaStream,
|
|
// this._client,
|
|
) : super(
|
|
lk_models.TrackType.VIDEO,
|
|
name,
|
|
mediaTrack,
|
|
);
|
|
|
|
rtc.MediaStream get mediaStream => _mediaStream;
|
|
|
|
/// internal use
|
|
/// {@nodoc}
|
|
@internal
|
|
void setMediaStream(rtc.MediaStream stream) {
|
|
_mediaStream = stream;
|
|
notifyListeners();
|
|
}
|
|
|
|
@override
|
|
Future<bool> stop() async {
|
|
final didStop = await super.stop();
|
|
if (didStop) {
|
|
await _mediaStream.dispose();
|
|
}
|
|
// _mediaStream = null;
|
|
return didStop;
|
|
}
|
|
}
|