addPeerEvents method

void addPeerEvents(
  1. PeerConnection instanceClass,
  2. RTCPeerConnection peer
)

Emits peer events.

instanceClass - PeerConnection instance. RTCPeerConnection peer - Peer instance. PeerConnection#track PeerConnection#connectionStateChange

Implementation

void addPeerEvents(PeerConnection instanceClass, RTCPeerConnection peer) {
  peer.onTrack = (event) async {
    _logger.i('New track from peer.');
    _logger.d('Track event value: $event');
    // Listen for remote track events to resolve pending addRemoteTrack calls.
    if (event.transceiver != null && event.streams.isEmpty) {
      if (pendingTransceivers.isNotEmpty) {
        RTCRtpTransceiverCompleter transceiverCompleter =
            pendingTransceivers.removeLast();
        transceiverCompleter.completeTransceiver(event.transceiver!);
      }
    }

    instanceClass.emit(webRTCEvents['track'], this, event);
  };
  if (peer.connectionState != null) {
    peer.onConnectionState = (event) {
      _logger.i('Peer connection state change: ${peer.connectionState}');
      instanceClass.emit(webRTCEvents['connectionStateChange'], this,
          peer.iceConnectionState);
    };
  } else {
    peer.onIceConnectionState = (RTCIceConnectionState state) {
      _logger
          .i('Peer ICE connection state change: ${peer.iceConnectionState}');
      instanceClass.emit(webRTCEvents['connectionStateChange'], this,
          peer.iceConnectionState);
    };
  }

  peer.onRenegotiationNeeded = () async {
    RTCSessionDescription? remoteSdp = await peer.getRemoteDescription();
    if (remoteSdp == null) {
      return;
    }
    _logger.i('Peer onnegotiationneeded, updating local description');
    RTCSessionDescription offer = await peer.createOffer();
    _logger.i('Peer onnegotiationneeded, got local offer', offer.sdp);
    await peer.setLocalDescription(offer);
    String? sdp = SdpParser.renegotiate(offer.sdp, remoteSdp.sdp);
    _logger.i('Peer onnegotiationneeded, updating remote description', sdp);
    await peer.setRemoteDescription(RTCSessionDescription(sdp, 'answer'));
    _logger.i('Peer onnegotiationneeded, renegotiation done');
  };
}