updateTrack method

Future<void> updateTrack({
  1. required MediaStreamTrack next,
  2. MediaStreamTrack? prev,
})

Implementation

Future<void> updateTrack(
    {required MediaStreamTrack next, MediaStreamTrack? prev}) async {
  await _stream.addTrack(next);
  // If published, replace published track with track from new device
  if (prev != null && prev.enabled) {
    await _stream.removeTrack(prev);
    await prev.stop();
    if (_pc != null) {
      await _pc!
          .getSenders()
          .then((senders) => senders.forEach((RTCRtpSender sender) {
                if (sender.track?.kind == next.kind) {
                  sender.track?.stop();
                  sender.replaceTrack(next);
                }
              }));
    }
  } else {
    await _stream.addTrack(next);

    if (_pc != null) {
      publishTrack(track: next);
    }
  }
}