removePublishedTrack method
Implementation
Future<void> removePublishedTrack(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) {
if (room.roomOptions.stopLocalTrackOnUnpublish) {
await track.stop();
}
final sender = track.transceiver?.sender;
if (sender != null) {
try {
await room.engine.publisher?.pc.removeTrack(sender);
if (track is LocalVideoTrack) {
track.simulcastCodecs.forEach((key, simulcastTrack) async {
await room.engine.publisher?.pc.removeTrack(simulcastTrack.sender!);
});
}
} catch (e) {
logger.warning('[$objectId] rtc.removeTrack() did throw $e');
}
// doesn't make sense to negotiate if already disposed
if (!isDisposed) {
// manual negotiation since track changed
await room.engine.negotiate();
}
}
// did unpublish
await track.onUnpublish();
if (track.processor != null) {
await track.processor?.onUnpublish();
await track.stopProcessor();
}
await room.applyAudioSpeakerSettings();
}
if (notify) {
[events, room.events].emit(LocalTrackUnpublishedEvent(
participant: this,
publication: pub,
));
}
await pub.dispose();
}