Video Call API (Research Resolution) - PatilAntariksh/Mind-For-The-Blind GitHub Wiki

Video Call Integration in Flutter: API Conflicts and Resolution

Introduction & Project Background

Project Overview

Requirements:

  • Seamless, instant room-based connection
  • Minimal interaction from blind users
  • Cross-platform support (Android + iOS)
  • Rear camera default for blind users
  • No prejoin, lobby, or moderator prompts

Objective

Enable reliable, accessible, and intuitive video calling functionality for blind users — requiring only a single tap to connect.


Attempted APIs & Challenges Faced

1. WebRTC + Custom Signaling Server

  • Backend: Node.js + Socket.io (Render)
  • Flutter: flutter_webrtc, socket_io_client

Issues:

  • ICE negotiation complexity
  • No built-in TURN/STUN server support
  • Platform permission inconsistencies
  • Race conditions in signaling
  • Difficult to support rear/front camera switching

2. Agora

  • Plugins: agora_rtc_engine, agora_uikit

Issues:

  • Android Gradle plugin conflicts
  • Java version & NDK adjustments
  • Build crashes on some devices

3. Daily.co

  • Simple REST + embed model

Issues:

  • Limited free tier
  • UI not accessible-friendly
  • Poor audio-video sync on mobile

4. 100ms.live

  • Designed for streaming, not 1:1 video

Issues:

  • Token/room creation too complex
  • Flutter SDK unstable
  • UI workflow not blind-user friendly

Jitsi Meet – What Worked & What Didn’t

What We Tried

  • Plugin: jitsi_meet_wrapper
  • Also experimented with JaaS (Jitsi-as-a-Service)

What Worked:

  • Room-based joining
  • Good media stability
  • Supported both platforms

What Didn’t:

  • Persistent lobby/moderator prompts
  • prejoinEnabled: false did not always work
  • Couldn’t suppress all UI elements
  • Rear camera setting not enforced

Attempts to Fix:

  • Used JWT with moderator privileges
  • Tried backend overrides in room config
  • Manually stripped UI with plugin forks

Conclusion: Jitsi couldn’t meet the accessibility and UX standards needed.


Final Success with ZEGO Cloud

Why It Worked

  • Plugin: zego_uikit_prebuilt_call
  • Instant join with no lobbies
  • Fully Flutter-native & cross-platform
  • Stable audio/video
  • Simple parameterized setup

Features Implemented:

  • Room-based video calls
  • Auto mic/camera toggles
  • Accessible layout by default

Integration Snippet:

ZegoUIKitPrebuiltCall(
  appID: yourAppId,
  appSign: yourAppSign,
  userID: 'blind_user',
  userName: ' ',
  callID: 'helproom',
)

Lessons Learned & Final Thoughts

Key Takeaways

WebRTC is powerful, but not practical for MVP

Agora & 100ms have high integration overhead

Jitsi lacks Flutter-native customization

ZEGO offers the best trade-off for speed, stability, and accessibility

Developer Recommendations

Use prebuilt kits for MVP

Test on both platforms from day one

Avoid complex signaling unless needed

Design with accessibility-first in mind

Final Outcome

After evaluating five platforms, fixing dozens of integration bugs, and iterating UI designs, ZEGO Cloud provided a production-ready, accessible solution for real-time video calling — enabling blind users to connect instantly and reliably.