MobilePeerConnection constructor
MobilePeerConnection(
- RTCPeerConnection rtcConnection
Implementation
MobilePeerConnection(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(MobileDataChannel(dc));
}
};
rtcConnection.onTrack = (rtc.RTCTrackEvent track) async {
print(
'onTrack: ${track.track.kind} with ${track.streams.length} streams',
);
if (_trackController.isClosed) return;
if (track.streams.isNotEmpty) {
_trackController.add(MobileMediaStream(track.streams[0]));
} else {
// Create a fake stream if none provide (Unified Plan track-only mode)
final stream = await rtc.createLocalMediaStream(
'remote_stream_${track.track.id}',
);
await stream.addTrack(track.track);
if (!_trackController.isClosed) {
_trackController.add(MobileMediaStream(stream));
}
}
};
}