Skip to main content

nativemind_call 0.1.1 copy "nativemind_call: ^0.1.1" to clipboard
nativemind_call: ^0.1.1 copied to clipboard

Native media layer of NativeMind calls on Andrey Bekhtold's handmade WebRTC code (Android PeerConnectionClient, iOS WebRTCManager, the WebRTCClientType configuration, Debug.swift): video through Flutt [...]

nativemind_call #

Native media layer of NativeMind calls, built on Andrey Bekhtold's handmade WebRTC code (without 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. Part of the NativeMind framework; plugs into the call screens of nativemind_deals through NmCallPort.

0.1.0 status. Android is tested on a device (loopback: camera → WebRTC → texture, hardware VP8). The iOS (Swift) part has not been compiled yet (no macOS in CI); build it with pod install + flutter build ios before relying on it. The app supplies the signalling (SDP / ICE); LiveKit rooms are served by nativemind_deals/livekit.dart instead.

Install #

dependencies:
  nativemind_call: ^0.1.0
import 'package:nativemind_call/nativemind_call.dart';

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). There is no earlier package to migrate from; DealApp calls still run on LiveKit (NmLiveKitCallPort) until a P2P signalling backend exists.

Handmade authors #

Author Role In this package
Andrey Bekhtold DealApp (Dilap) team lead; network, VPN, video calls, native Kotlin / Swift / KMP; without AI (confirmed by the CTO) Android PeerConnectionClient (+ adapters), iOS WebRTCManager, WebRTCStatus, WebRTCClientType, Debug.swift (byte-identical); his WebRTC configuration and loopback demo, ported

Share of his code: 458 of 1 395 plugin lines (33 %; native Kotlin / Swift 36 %), the rest is the plugin glue by Claude Code (Pigeon host, texture renderers, Dart API) — PROVENANCE.md.

License #

NativeMindNONC (see LICENSE), as the whole NativeMind framework. WebRTC (webrtc-sdk) is a runtime dependency under its own BSD-3-Clause license (see NOTICE).

0
likes
130
points
99
downloads

Documentation

API reference

Publisher

verified publisherframework.nativemind.net

Weekly Downloads

Native media layer of NativeMind calls on Andrey Bekhtold's handmade WebRTC code (Android PeerConnectionClient, iOS WebRTCManager, the WebRTCClientType configuration, Debug.swift): video through Flutter textures, hardware codecs, a Pigeon API after WebRTCManagerDelegate, and NmNativeCallPort — the NmCallPort of nativemind_deals.

Homepage
Repository (GitLab)

License

unknown (license)

Dependencies

flutter, meta, nativemind_deals

More

Packages that depend on nativemind_call

Packages that implement nativemind_call