E2EEManager
Attaches end-to-end encryption to the media that flows through a call.
The SDK ships StreamEncryptionManager as the default AES-GCM implementation. Integrators who need a different scheme (a different cipher, a regulator-mandated key hierarchy, a hardware keystore) implement this interface themselves and hand it to io.getstream.video.android.core.Call.setE2EEManager before joining. The SDK then never sees the key material or the crypto, it only tells the manager which senders and receivers exist.
Key generation and key distribution are deliberately not part of this interface. Stream's infrastructure must stay isolated from that process, so it is the integrator's responsibility. Keys therefore live on the manager instance, not on the call: see StreamEncryptionManager.setSharedKey and StreamEncryptionManager.setKey for the default manager's surface, and give your own manager whichever key API suits your scheme.
This mirrors the E2EEManager interface in the JavaScript SDK and StreamE2EEManager in the iOS SDK, so the same integration shape works across all three platforms.