updateTrack method

  1. @internal
  2. @override
Future<bool> updateTrack(
  1. covariant T? newValue
)
override

Implementation

@internal
@override
Future<bool> updateTrack(covariant T? newValue) async {
  logger.fine('RemoteTrackPublication.updateTrack track: $newValue');
  final didUpdate = await super.updateTrack(newValue);

  if (didUpdate) {
    // Stop current visibility timer (if exists)
    _cancelPendingTrackSettingsUpdateRequest?.call();
    _visibilityTimer?.cancel();

    final roomOptions = participant.room.roomOptions;
    if (roomOptions.adaptiveStream && newValue is RemoteVideoTrack) {
      // Start monitoring visibility
      _visibilityTimer = Timer.periodic(
        const Duration(milliseconds: 300),
        (_) => _computeVideoViewVisibility(),
      );

      newValue.onVideoViewBuild = (_) {
        logger.fine('[Visibility] VideoView did build');
        if (_lastSentTrackSettings?.disabled == true) {
          // quick enable
          _cancelPendingTrackSettingsUpdateRequest?.call();
          _computeVideoViewVisibility(quick: true);
        }
      };
    }

    if (newValue != null) {
      // if new Track has been set to this RemoteTrackPublication,
      // update the Track's muted state from the latest info.
      newValue.updateMuted(
        _metadataMuted,
        shouldNotify: false, // don't emit event since this is initial state
      );
    }
  }

  return didUpdate;
}