nativemind_call 0.1.1
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 iosbefore relying on it. The app supplies the signalling (SDP / ICE); LiveKit rooms are served bynativemind_deals/livekit.dartinstead.
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.
Links #
- pub.dev: nativemind_call · publisher framework.nativemind.net
- Source: gitlab.com/nativemind/widgets.nativemind.net,
flutter/nativemind_call - CHANGELOG.md · PROVENANCE.md · NOTICE
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).