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.