addMediaStreamToPeer method

void addMediaStreamToPeer(
  1. RTCPeerConnection? peer,
  2. MediaStream? mediaStream,
  3. Map<String, dynamic> options
)

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}');
  });
}