onRemoteStreamReceive method

  1. @override
void onRemoteStreamReceive(
  1. int userId,
  2. MediaStream remoteMediaStream, {
  3. RTCRtpTransceiver? transceiver,
  4. MediaStreamTrack? track,
})

Implementation

@override
void onRemoteStreamReceive(int userId, MediaStream remoteMediaStream,
    {RTCRtpTransceiver? transceiver, MediaStreamTrack? track}) {
  log('[onRemoteStreamReceive] userId: $userId, trackId: ${track?.id}, trackMid: ${transceiver?.mid}',
      _TAG);
  if (track != null && transceiver != null) {
    trackIdMid[track.id!] = transceiver.mid;
  } else {
    remoteMediaStream.getTracks().forEach((track) {
      if (track.id?.startsWith(JANUS_PREFIX) ?? false) {
        trackIdMid[track.id!] = track.id!.replaceAll(JANUS_PREFIX, '');
      }
    });
  }

  var feedId = _signaler.subStreams[
      transceiver?.mid ?? track?.id?.replaceAll(JANUS_PREFIX, '')];

  if (transceiver == null) {
    onRemoteStreamTrackReceived?.call(this, feedId!, remoteMediaStream,
        trackId: track?.id);
  } else if (track != null) {
    if (kIsWeb) {
      createMediaStream(track.id!).then((mediaStream) {
        mediaStream.addTrack(track);

        remoteMediaStream.getTracks().forEach((remoteTrack) {
          if (remoteTrack.id != track.id) {
            var feedId2 = _signaler
                .subStreams[remoteTrack.id?.replaceAll(JANUS_PREFIX, '')];

            if (feedId == feedId2) {
              mediaStream.addTrack(remoteTrack);
            }
          }
        });

        onRemoteStreamTrackReceived?.call(this, feedId!, mediaStream,
            trackId: track.id);
      });
    } else {
      if (track.kind == 'video') {
        onRemoteStreamTrackReceived?.call(this, feedId!, remoteMediaStream,
            trackId: track.id);
      }
    }
  }
}