Closed cedricfung closed 4 years ago
@crossle please add more info, maybe we don't need to use the insertable streams, because I remember there is more mature interfaces, e.g. FrameEncryptorInterface?
Insertable streams only for browser, native app should use FrameEncryptorInterface.
https://webrtc.googlesource.com/src/+/master/api/rtp_transceiver_interface.h
We should use only one PeerConnection for the group voice call, each participant has a transceiver, and according to the transceiver interface, we can set a FrameEncryptorInterface for each transceiver.
Every device has a sender key for e2ee chat messages, we can use this key in the FrameEncryptorInterface. And since we could decrypt the signal messages with sender key, we are sure that we have the sender key in advance of the transceiver.
End to end encrypted group voice call could be implemented in both Android and iOS Mixin Messenger apps.
For performance and security consideration, we should use an SFU and TURN to proxy the traffic, while still ensure full E2EE.
WebRTC library has the feature called insertable streams https://www.chromestatus.com/feature/6321945865879552 to make this happen.