nativemind_call

Native media layer of NativeMind calls, built on Andrey Bekhtold's handmade WebRTC code (no AI, 2025-04): video goes into Flutter textures (Android SurfaceProducer + EglRenderer, iOS FlutterTexture), so call tiles compose under overlays and scroll without PlatformViews; hardware codecs on a shared EGL context; his WebRTC configuration and call audio session on both platforms.

final call = NmNativeCall.instance;
await call.requestPermissions();
final me = await call.createClient(iceServers: [NmCallIceServer(urls: ['turn:turn.example.org:3478'], username: u, credential: p)]);
me.onOffer.listen(signalling.sendOffer);            // your signalling
me.onIceCandidate.listen(signalling.sendCandidate);  // null = end of candidates
await me.createOffer();
// remote answer / candidates: me.handleRemoteSdp(sdp); me.addIceCandidate(c); me.setReadyToSendIceCandidates(true);

// The call screens of nativemind_deals draw tiles through NmCallPort.videoTile:
final port = NmNativeCallPort(client: me, activeCall: info, onAccept: accept, onHangUp: hangUp);

NmLoopbackCall is Andrey's demo: two peer connections in one process (A sends the camera, B receives); see example/.

Platforms: Android (minSdk 24, webrtc-sdk 125.6422.07 — an app that also has flutter_webrtc gets that plugin's newer build of the same artifact), iOS 13+ (WebRTC-SDK pod ≥ 125.6422.07; add NSCameraUsageDescription and NSMicrophoneUsageDescription). License: NativeMindNONC. Provenance: PROVENANCE.md.

Libraries

nativemind_call
Native media layer of NativeMind calls on Andrey Bekhtold's handmade WebRTC code: NmNativeCall creates NmNativeCallClients (Android PeerConnectionClient / iOS WebRTCManager), NmCallVideoView shows their Flutter textures, NmNativeCallPort is the NmCallPort of nativemind_deals over them, NmLoopbackCall is Andrey's two-peer loopback demo.