addRtpReceiver method

Future<void> addRtpReceiver({
  1. required RTCRtpReceiver receiver,
  2. required RTCVideoCodec codec,
  3. required bool enabled,
})

Implementation

Future<void> addRtpReceiver({
  required RTCRtpReceiver receiver,
  required RTCVideoCodec codec,
  required bool enabled,
}) async {
  if (_identity == null || _keyProvider == null) return;

  if (!codec.isSFrameSuported || !enabled) return;

  try {
    final String trackId = receiver.track?.id ?? '';
    final String id = '${receiver.track?.kind}_${trackId}_receiver';

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

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

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

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