WebPeerConnection constructor

WebPeerConnection(
  1. RTCPeerConnection rtcConnection
)

Implementation

WebPeerConnection(this.rtcConnection) {
  rtcConnection.onConnectionState = (state) {
    if (!_connectionStateController.isClosed) {
      _connectionStateController.add(_mapConnectionState(state));
    }
  };

  rtcConnection.onIceCandidate = (candidate) {
    if (!_iceCandidateController.isClosed) {
      _iceCandidateController.add(
        IceCandidate(
          candidate: candidate.candidate ?? '',
          sdpMid: candidate.sdpMid,
          sdpMLineIndex: candidate.sdpMLineIndex,
        ),
      );
    }
  };

  rtcConnection.onDataChannel = (dc) {
    if (!_dataChannelController.isClosed) {
      _dataChannelController.add(WebDataChannel(dc));
    }
  };

  rtcConnection.onTrack = (rtc.RTCTrackEvent track) async {
    print(
      'onTrack (web): ${track.track.kind} with ${track.streams.length} streams',
    );
    if (_trackController.isClosed) return;

    if (track.streams.isNotEmpty) {
      _trackController.add(WebMediaStream(track.streams[0]));
    } else {
      final stream = await rtc.createLocalMediaStream(
        'remote_stream_${track.track.id}',
      );
      await stream.addTrack(track.track);
      if (!_trackController.isClosed) {
        _trackController.add(WebMediaStream(stream));
      }
    }
  };
}