unpublishTrack method
Unpublish a LocalTrackPublication that's already published by this LocalParticipant.
Implementation
@override
Future<void> unpublishTrack(String trackSid, {bool notify = true}) async {
logger.finer('Unpublish track sid: $trackSid, notify: $notify');
final pub = trackPublications.remove(trackSid);
if (pub == null) {
logger.warning('Publication not found $trackSid');
return;
}
await pub.dispose();
final track = pub.track;
if (track != null) {
final roomOptions = room.roomOptions ?? const RoomOptions();
if (roomOptions.stopLocalTrackOnUnpublish) {
await track.stop();
}
final sender = track.transceiver?.sender;
if (sender != null) {
try {
await room.engine.publisher?.pc.removeTrack(sender);
} catch (_) {
logger.warning('[$objectId] rtc.removeTrack() did throw ${_}');
}
// doesn't make sense to negotiate if already disposed
if (!isDisposed) {
// manual negotiation since track changed
await room.engine.negotiate();
}
}
}
if (notify) {
[events, room.events].emit(LocalTrackUnpublishedEvent(
participant: this,
publication: pub,
));
}
await pub.dispose();
}