publishTrack method

void publishTrack({
  1. required MediaStreamTrack track,
})

Implementation

void publishTrack({required MediaStreamTrack track}) async {
  if (_pc != null) {
    if (track.kind == 'video' && _constraints.simulcast!) {
      var idx = resolutions.indexOf(_constraints.resolution!);
      var encodings = <RTCRtpEncoding>[
        RTCRtpEncoding(
          rid: 'f',
          active: true,
          maxBitrate:
              videoConstraints[resolutions[idx]]!.encodings.maxBitrate,
          minBitrate: 256000,
          scaleResolutionDownBy: 1.0,
          maxFramerate:
              videoConstraints[resolutions[idx]]!.encodings.maxFramerate,
        )
      ];

      if (idx - 1 >= 0) {
        encodings.add(RTCRtpEncoding(
          rid: 'h',
          active: true,
          scaleResolutionDownBy: 2.0,
          maxBitrate:
              videoConstraints[resolutions[idx - 1]]!.encodings.maxBitrate,
          minBitrate: 128000,
          maxFramerate:
              videoConstraints[resolutions[idx - 1]]!.encodings.maxFramerate,
        ));
      }

      if (idx - 2 >= 0) {
        encodings.add(RTCRtpEncoding(
          rid: 'q',
          active: true,
          minBitrate: 64000,
          scaleResolutionDownBy: 4.0,
          maxBitrate:
              videoConstraints[resolutions[idx - 2]]!.encodings.maxBitrate,
          maxFramerate:
              videoConstraints[resolutions[idx - 2]]!.encodings.maxFramerate,
        ));
      }

      var transceiver = await _pc?.addTransceiver(
          track: track,
          init: RTCRtpTransceiverInit(
            streams: [_stream],
            direction: TransceiverDirection.SendOnly,
            sendEncodings: encodings,
          ));
      setPreferredCodec(transceiver);
    } else {
      var transceiver = await _pc?.addTransceiver(
          track: track,
          init: RTCRtpTransceiverInit(
            streams: [_stream],
            direction: TransceiverDirection.SendOnly,
            sendEncodings: track.kind == 'video'
                ? [videoConstraints[_constraints.resolution]!.encodings]
                : [],
          ));
      if (track.kind == 'video') {
        setPreferredCodec(transceiver);
      }
    }
  }
}