addPeerEvents method
- PeerConnection instanceClass,
- 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');
};
}