addRtpSender method

Future<void> addRtpSender({
  1. required RTCRtpSender sender,
})

Implementation

Future<void> addRtpSender({required RTCRtpSender sender}) async {
  try {
    if (_identity == null || _keyProvider == null) return;

    if (!_videoCodec.isSFrameSuported || !_enabled) return;

    final String trackId = sender.track?.id ?? '';
    final String id =
        '${sender.track?.kind.toString().trim()}_${trackId}_sender';

    final frameCryptor = await _fcFactory.createFrameCryptorForRtpSender(
      participantId: _identity!,
      sender: sender,
      algorithm: _algorithm,
      keyProvider: _keyProvider!.keyProvider,
    );

    frameCryptor.onFrameCryptorStateChanged = (participantId, state) {
      _logger.log('Encryption: $participantId $state');
    };

    _frameCryptors[{_identity!: id}] = frameCryptor;
    await frameCryptor.setKeyIndex(_keyProvider!.getLatestIndex(_identity!));
    await frameCryptor.setEnabled(_enabled);

    if (kIsWeb) {
      await frameCryptor.updateCodec(
        sender.track?.kind.toString().trim() == RtcTrackKind.video.kind
            ? _videoCodec.codec.toUpperCase()
            : _audioCodec.codec.toUpperCase(),
      );
    }
  } catch (e) {
    _logger.bug(e.toString());
  }
}