replaceTrack method
Replaces the current track with a new one.
Implementation
Future<void> replaceTrack(MediaStreamTrack track) async {
_logger.debug('replcaeTrack() ${track.toString()}');
if (closed) {
// Thus must be done here. Otherwise there is no chance to stop the given track.
if (stopTracks) {
try {
track.stop();
} catch (error) {
_logger.error(error.toString());
}
}
throw 'closed';
}
// flutter_webrtc, как получить состояние? : )
// else if (track != null && track.readyState == 'ended'))
// Do nothing if this is the same track as the current handled one.
if (track == this.track) {
_logger.debug('replaceTrack() | same track, ignored.');
return;
}
if (zeroRtpOnPause || paused) {
await safeEmitAsFuture('@replacetrack', {
'track': track,
});
}
// Destroy the previous track.
_destroyTrack();
// Set the new track.
track = track;
// If this Producer was paused/resumed and the state of the new
// track does not match, fix it.
if (disableTrackOnPause) {
if (!paused) {
track.enabled = true;
} else if (paused) {
track.enabled = false;
}
}
// Handle the effective track.
_handleTrack();
}