addMediaStreamToPeer method
Implementation
void addMediaStreamToPeer(RTCPeerConnection? peer, MediaStream? mediaStream,
Map<String, dynamic> options) {
_logger.i('Adding mediaStream tracks to RTCPeerConnection');
mediaStream?.getTracks().forEach((track) {
RTCRtpTransceiverInit initOptions = RTCRtpTransceiverInit();
if (track.kind == 'audio') {
initOptions = RTCRtpTransceiverInit(
direction: (!options['disableAudio']
? TransceiverDirection.SendOnly
: TransceiverDirection.Inactive),
streams: [
mediaStream
],
sendEncodings: [
RTCRtpEncoding(
rid: 'f',
maxBitrate: 900000,
numTemporalLayers: 3,
)
]);
}
if (track.kind == 'video') {
initOptions = RTCRtpTransceiverInit(
direction: (!options['disableVideo']
? TransceiverDirection.SendOnly
: TransceiverDirection.Inactive),
streams: [mediaStream],
// Choose bitrates for each encoding
sendEncodings: (options['simulcast'])
? [
RTCRtpEncoding(
rid: '2',
numTemporalLayers: 1,
),
RTCRtpEncoding(
rid: '1',
numTemporalLayers: 1,
maxBitrate: 300000,
scaleResolutionDownBy: 2.0,
),
RTCRtpEncoding(
rid: '0',
numTemporalLayers: 1,
maxBitrate: 100000,
scaleResolutionDownBy: 4.0,
),
]
: null);
}
peer?.addTransceiver(
track: track,
kind: (track.kind == 'audio')
? RTCRtpMediaType.RTCRtpMediaTypeAudio
: RTCRtpMediaType.RTCRtpMediaTypeVideo,
init: initOptions);
_logger.i(
'Track ${track.label} added: ,id: ${track.id}, kind: ${track.kind}');
});
}