Hey everyone, I’m working on a side project to get video/audio calls running inside my dapp.
At the moment, we’re handling signaling using HTTP outcalls to exchange ICE candidates; that part works fine. But once we run into restrictive NATs, we need a TURN relay to complete the connection.
I could just host a TURN server on a centralized provider; but that defeats the point of building on ICP.
Is there any way to run a TURN server natively on the Internet Computer? From what I understand:
• Canisters can’t handle raw UDP or open persistent socket connections;
• That likely rules out full TURN functionality directly on-chain.
We’re currently exploring a hybrid: hosting a TURN server in a TEE (Trusted Execution Environment) and letting an ICP canister monitor its integrity via signed state updates. That could work; but it would be amazing if we could bring more of this stack directly on-chain.
Would love to hear if others have tackled this problem or are interested in building a decentralized TURN-as-a-service model; maybe with relayers registering through canisters, being rewarded based on uptime or usage, and optionally verified via TEE or zk attestations.
Open to thoughts or collaborators.