Skip to content
Kai Dao edited this page Apr 4, 2024 · 16 revisions

Computador

Online Meeting App using Flutter and WebRTC SFU (Selective Forwarding Unit)

πŸ€™ This is an Online Meeting App that utilizes Flutter and WebRTC technologies to provide users with a platform to conduct virtual meetings, conferences, and webinars. The app is built to provide seamless audio and video communication, as well as screen sharing, chat functionality, and file sharing.

codecovCodeFactorGitHub Workflow Status (with event)GitHub issueslibwebrtcCocoapods VersionPRs Welcome

Twitter FollowDiscord

Website β€’ Wiki β€’ License

Banner

πŸ‘‰ The Virtual Background feature supports both Android and iOS


Virtual Background on iOS (VisionKit for Person segment) Virtual Background on Android (Mediapipe for Image segment)

⚑ Current supported features

Feature Subscribe/Publish Screen Sharing Picture in Picture Virtual Background End to End Encryption Record Media
iOS 🟒 🟒 🟒 🟒 🟒 🟑
Android 🟒 🟒 🟒 🟒 🟒 🟑

πŸ’₯ Codec supported

Codec VP8 VP9 H264 H265 AV1
iOS 🟒 🟒 🟒 🟒 🟒
Android 🟒 🟒 🟒 🟒 🟒

🟒 = Available

🟑 = Coming soon (Work in progress)

πŸ”΄ = Not currently available (Possibly in the future)

Note

  • AV1 supported on iOS 14 and above, Android 14 and above.
  • E2EE only supported H264, VP8 and VP9
  • Video codec Android supported: Check at Google Site

Warning

Virtual Background is still in beta so it will not be stable. It is developed using MediaPipe for Android and VisionKit for iOS

πŸ–ΌοΈ Online Meeting Diagram

Diagram Diagram

πŸ“‚ Repository Structure
└── waterbus/
    β”œβ”€β”€ .githooks/
    β”‚   β”œβ”€β”€ pre-commit
    β”‚   └── pre-push
    β”œβ”€β”€ .github/
    β”‚   β”œβ”€β”€ FUNDING.yml
    β”‚   β”œβ”€β”€ ISSUE_TEMPLATE/
    β”‚   β”œβ”€β”€ dependabot.yml
    β”‚   └── workflows/
    β”‚       β”œβ”€β”€ ci.yml
    β”‚       └── release.yml
    β”œβ”€β”€ .metadata
    β”œβ”€β”€ analysis_options.yaml
    β”œβ”€β”€ android/
    β”‚   β”œβ”€β”€ app/
    β”‚   β”‚   β”œβ”€β”€ build.gradle
    β”‚   β”‚   β”œβ”€β”€ google-services.json
    β”‚   β”‚   β”œβ”€β”€ proguard-rules.pro
    β”‚   β”‚   └── src/
    β”‚   β”œβ”€β”€ build.gradle
    β”‚   β”œβ”€β”€ gradle/
    β”‚   β”‚   └── wrapper/
    β”‚   └── settings.gradle
    β”œβ”€β”€ benchmark/
    β”‚   β”œβ”€β”€ benchmark.txt
    β”‚   └── plot_benchmark_results.gp
    β”œβ”€β”€ codecov.yml
    β”œβ”€β”€ ios/
    β”‚   β”œβ”€β”€ BroadcastAppGroup/
    β”‚   β”‚   └── BroadcastAppGroupHandler.swift
    β”‚   β”œβ”€β”€ BroadcastWaterbus/
    β”‚   β”‚   β”œβ”€β”€ Atomic.swift
    β”‚   β”‚   β”œβ”€β”€ BroadcastWaterbus.entitlements
    β”‚   β”‚   β”œβ”€β”€ DarwinNotificationCenter.swift
    β”‚   β”‚   β”œβ”€β”€ Info.plist
    β”‚   β”‚   β”œβ”€β”€ SampleHandler.swift
    β”‚   β”‚   β”œβ”€β”€ SampleUploader.swift
    β”‚   β”‚   └── SocketConnection.swift
    β”‚   β”œβ”€β”€ Flutter/
    β”‚   β”‚   β”œβ”€β”€ AppFrameworkInfo.plist
    β”‚   β”‚   β”œβ”€β”€ Debug.xcconfig
    β”‚   β”‚   └── Release.xcconfig
    β”‚   β”œβ”€β”€ Podfile
    β”‚   β”œβ”€β”€ Podfile.lock
    β”‚   β”œβ”€β”€ Runner/
    β”‚   β”‚   β”œβ”€β”€ AppDelegate.swift
    β”‚   β”‚   β”œβ”€β”€ Assets.xcassets/
    β”‚   β”‚   β”œβ”€β”€ Base.lproj/
    β”‚   β”‚   β”œβ”€β”€ GoogleService-Info.plist
    β”‚   β”‚   β”œβ”€β”€ Info.plist
    β”‚   β”‚   β”œβ”€β”€ Runner-Bridging-Header.h
    β”‚   β”‚   └── Runner.entitlements
    β”‚   β”œβ”€β”€ Runner.xcodeproj/
    β”‚   β”‚   β”œβ”€β”€ project.pbxproj
    β”‚   β”‚   β”œβ”€β”€ project.xcworkspace/
    β”‚   β”‚   └── xcshareddata/
    β”‚   β”œβ”€β”€ Runner.xcworkspace/
    β”‚   β”‚   β”œβ”€β”€ contents.xcworkspacedata
    β”‚   β”‚   └── xcshareddata/
    β”‚   └── clean-pods.sh
    β”œβ”€β”€ launcher_icon_setup.yaml
    β”œβ”€β”€ lib/
    β”‚   β”œβ”€β”€ core/
    β”‚   β”‚   β”œβ”€β”€ app/
    β”‚   β”‚   β”œβ”€β”€ constants/
    β”‚   β”‚   β”œβ”€β”€ error/
    β”‚   β”‚   β”œβ”€β”€ helpers/
    β”‚   β”‚   β”œβ”€β”€ injection/
    β”‚   β”‚   β”œβ”€β”€ navigator/
    β”‚   β”‚   β”œβ”€β”€ types/
    β”‚   β”‚   β”œβ”€β”€ usecase/
    β”‚   β”‚   └── utils/
    β”‚   β”œβ”€β”€ features/
    β”‚   β”‚   β”œβ”€β”€ app/
    β”‚   β”‚   β”œβ”€β”€ auth/
    β”‚   β”‚   β”œβ”€β”€ chats/
    β”‚   β”‚   β”œβ”€β”€ common/
    β”‚   β”‚   β”œβ”€β”€ conversation/
    β”‚   β”‚   β”œβ”€β”€ home/
    β”‚   β”‚   β”œβ”€β”€ meeting/
    β”‚   β”‚   β”œβ”€β”€ notifications/
    β”‚   β”‚   β”œβ”€β”€ profile/
    β”‚   β”‚   β”œβ”€β”€ schedule/
    β”‚   β”‚   └── settings/
    β”‚   β”œβ”€β”€ gen/
    β”‚   β”‚   β”œβ”€β”€ assets.gen.dart
    β”‚   β”‚   └── fonts.gen.dart
    β”‚   └── main.dart
    β”œβ”€β”€ packages/
    β”‚   β”œβ”€β”€ auth/
    β”‚   β”‚   β”œβ”€β”€ .metadata
    β”‚   β”‚   β”œβ”€β”€ analysis_options.yaml
    β”‚   β”‚   β”œβ”€β”€ lib/
    β”‚   β”‚   β”œβ”€β”€ pubspec.yaml
    β”‚   β”‚   └── test/
    β”‚   └── sizer/
    β”‚       β”œβ”€β”€ .metadata
    β”‚       β”œβ”€β”€ analysis_options.yaml
    β”‚       β”œβ”€β”€ lib/
    β”‚       └── pubspec.yaml
    β”œβ”€β”€ pubspec.lock
    β”œβ”€β”€ pubspec.yaml
    β”œβ”€β”€ run.sh
    β”œβ”€β”€ screenshots/
    β”œβ”€β”€ splash-setup.yaml
    β”œβ”€β”€ test/
    β”‚   β”œβ”€β”€ constants/
    β”‚   β”‚   └── sample_file_path.dart
    β”‚   β”œβ”€β”€ features/
    β”‚   β”‚   β”œβ”€β”€ auth/
    β”‚   β”‚   β”œβ”€β”€ meeting/
    β”‚   β”‚   └── profile/
    β”‚   └── fixtures/
    β”‚       β”œβ”€β”€ auth/
    β”‚       β”œβ”€β”€ fixture_reader.dart
    β”‚       └── meeting/