riffus / waterbus

Open source video conferencing app built on latest WebRTC SDK. Multi-attendee calls built on SFU. Your meeting will be more professional with Virtual Background. Additionally, multitasking is better with Picture in Picture.

Home Page:https://docs.waterbus.tech

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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.

codecovCodeFactorQuality Gate StatusGitHub Workflow Status (with event)GitHub issueslibwebrtcCocoapods Version Twitter FollowPRs Welcome

Website β€’ Wiki β€’ License

Banner 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/

πŸš€ Getting Started

πŸ”§ Installation

  1. Clone the waterbus repository:
git clone https://github.com/lambiengcode/waterbus
  1. Change to the project directory:
cd waterbus
  1. Install the dependencies:
flutter pub get

πŸ€– Run flutter app

flutter run

πŸ§ͺ Tests

flutter test

πŸ”₯ Usage

  1. Sign up for an account
  2. Create a new meeting
  3. Share the meeting link with other participants
  4. Start the meeting and utilize the available features

πŸ›  Selfhosted Waterbus

⏲️ Benchmarking

  • This part is benchmarking video codecs within a 60-second duration of an online meeting on an iPhone 13 running iOS 17.0.2. The codecs included in the benchmark are VP8, VP9, H.264, H.265, and AV1.
  • The benchmark aims to quickly compare the performance differences between these codecs during a short online meeting session.

πŸ“± Device Specifications

  • Model: iPhone 13
  • Operating System: iOS 17.0.2

🎯 Results

You can view the benchmark results in the generated plots and data files. Here's how you can interpret the results:

VP8 - Total encode time: 9325 (Β΅s) in 60s call lambiengcode
VP9 - Total encode time: 12091 (Β΅s) in 60s call lambiengcode
H264 - Total encode time: 11127 (Β΅s) in 60s call lambiengcode
H265 - Total encode time: 9264 (Β΅s) in 60s call lambiengcode
AV1 - Total encode time: 13615 (Β΅s) in 60s call lambiengcode

Enjoying this project? πŸ’™

Stargazers repo roster for @lambiengcode/waterbus Stargazers repo roster for @lambiengcode/waterbus

Support it by joining stargazers for this repository. ⭐

Also, follow maintainers on GitHub for our next creations!

Stars History

Star History Chart Star History Chart

Contributing

Contributions are welcome! Please feel free to submit a pull request or open an issue if you encounter any problems or have suggestions for improvements.

Contact Information

If you have any questions or suggestions related to this application, please contact me via email: lambiengcode@waterbus.tech or lambiengcode@gmail.com.

About

Open source video conferencing app built on latest WebRTC SDK. Multi-attendee calls built on SFU. Your meeting will be more professional with Virtual Background. Additionally, multitasking is better with Picture in Picture.

https://docs.waterbus.tech

License:MIT License


Languages

Language:Dart 89.8%Language:Swift 7.8%Language:Shell 0.9%Language:Gnuplot 0.7%Language:Ruby 0.6%Language:Kotlin 0.1%Language:Java 0.1%Language:Objective-C 0.0%