At Video SDK, weβre building tools to help companies create world-class collaborative products with capabilities for live audio/video, cloud recordings, RTMP/HLS streaming, and interaction APIs.
π₯³ Get 10,000 minutes free every month! Try it now!
- π₯οΈ Demo App
- π± Video SDK Compatibility
- β‘ Quick Setup
- π§ Prerequisites
- π¦ Running the Sample App
- π₯ Meeting Features
- π§ Key Concepts
- π Token Generation
- 𧩠Project OverView
- π Examples
- π VideoSDK's Documentation
- π¬ Join Our Community
π² Download the sample iOS app here: https://testflight.apple.com/join/C1UOYbxh
π± Download the sample Android app here: https://appdistribution.firebase.dev/i/80c2c6cc9fcb89b0
Android | iOS | Web | MacOS | Windows | Safari |
---|---|---|---|---|---|
β | β | β | β | β | β |
- Flutter 2.0 or later
- Dart 3.3.0 or later
- A valid Video SDK Account
Follow these steps to get the sample app up and running:
Clone the repository to your local environment.
git clone https://github.com/videosdk-live/videosdk-rtc-flutter-sdk-example.git
Open your favorite code editor and copy .env.example
to .env
file.
cp .env.example .env
Generate a temporary token from Video SDK Account.
AUTH_TOKEN = "TEMPORARY-TOKEN";
Install all the dependencies to run the project.
flutter pub get
For iOS or macOS, navigate to the respective folder and install the pods.
cd ios // or cd macos
pod install
Bingo, it's time to push the launch button.
flutter run
Unlock a suite of powerful features to enhance your meetings:
Feature | Documentation | Description |
---|---|---|
π Precall Setup | Setup Precall | Configure audio, video devices, and other settings before joining the meeting. |
π€ Join Meeting | Join Meeting | Allows participants to join a meeting. |
πͺ Leave Meeting | Leave Meeting | Allows participants to leave a meeting. |
π€ Toggle Mic | Mic Control | Toggle the microphone on or off during a meeting. |
π· Toggle Camera | Camera Control | Turn the video camera on or off during a meeting. |
π₯οΈ Screen Share | Screen Share | Share your screen with other participants during the call. |
π Change Audio Output | Switch Audio Output | Select an output device for audio during a meeting. |
π Change Video Output | Switch Video Output | Select an output device for audio during a meeting. |
βοΈ Optimize Audio Track | Audio Track Optimization | Enhance the quality and performance of media tracks. |
βοΈ Optimize Video Track | Video Track Optimization | Enhance the quality and performance of media tracks. |
πΌοΈ Virtual Background | Virtual Background | Add a virtual background or blur effect to your video during the call. |
π¬ Chat | In-Meeting Chat | Exchange messages with participants through a Publish-Subscribe mechanism. |
π Whiteboard | Whiteboard | Collaborate visually by drawing and annotating on a shared whiteboard. |
πΌ Recording | Recording | Record the meeting for future reference. |
π‘ RTMP Livestream | RTMP Livestream | Stream the meeting live to platforms like YouTube or Facebook. |
π Real-time Transcription | Real-time Transcription | Generate real-time transcriptions of the meeting. |
π Toggle Remote Media | Remote Media Control | Control the microphone or camera of remote participants. |
π« Mute All Participants | Mute All | Mute all participants simultaneously during the call. |
ποΈ Remove Participant | Remove Participant | Eject a participant from the meeting. |
Understand the core components of our SDK:
-
Meeting
- A Meeting represents Real-time audio and video communication.Note: Don't confuse the terms Room and Meeting; both mean the same thing π
-
Sessions
- A particular duration you spend in a given meeting is referred as a session, you can have multiple sessions of a specific meetingId. -
Participant
- A participant refers to anyone attending the meeting session. Thelocal participant
represents yourself (You), while all other attendees are consideredremote participants
. -
Stream
- A stream refers to video or audio media content that is published by either thelocal participant
orremote participants
.
The token is used to create and validate a meeting using API and also initialize a meeting.
π οΈ Development Environment
:
- You may use a temporary token for development. To create a temporary token, go to VideoSDK's dashboard .
π Production Environment
:
- You must set up an authentication server to authorize users for production. To set up an authentication server, please take a look at our official example repositories. videosdk-rtc-api-server-examples
-
One-to-One meeting - The One-to-One meeting allows 2 participants to join a meeting in the app.
-
Group Meeting - The Group meeting allows any number of participants to join a meeting in the app with a maximum of 6 participants on screen.
- We have separated screens and widgets in the following folder structure:
one-to-one
- It includes all files related to the OneToOne meeting.common
- It includes all the files used in both meeting types (OneToOne and Group calls).conference-call
- It includes all files related to the conference call.
-
lib/widgets/common/pre_call/selectAudioDevice.dart : This file implements the
SelectAudioDevice
widget, which allows users to select an audio output device. -
lib/widgets/common/pre_call/selectVideoDevice.dart : This file provides the
SelectVideoDevice
widget for choosing a video input device (camera). -
lib/widgets/common/pre_call/dropdowns_Web.dart : This file defines the
DropdownsWebWidget
, a stateful widget that manages dropdown menus for selecting video and audio devices in a web interface.
-
lib/utils/api.dart : This file handles the API interactions, including fetching a token, creating a meeting, validating a meeting, and fetching session data.
-
lib/widgets/common/joining/join_view.dart : This file defines the
JoinView
widget, which provides the user interface for joining a meeting. -
lib/screens/common/join_screen.dart :
- This file implements the
JoinScreen
widget, the main screen for joining or creating meetings. - It includes logic for handling device permissions, displaying the camera preview, and navigating to different meeting screens (one-to-one or group) after joining or creating a meeting.
- This file implements the
-
lib/widgets/common/joining_details/joining_details.dart :
- This file defines the
JoiningDetails
widget, where users input meeting details like the meeting ID and their display name. - It includes a dropdown for selecting the meeting type (e.g., "One to One" or "Group Call"), and text fields for the meeting ID (when joining) and display name.
- This file defines the
- lib/widgets/common/joining/waiting_to_join.dart : The
waiting_to_join.dart
file defines a basic UI screen that displays a loading animation and a message to notify users that a room is being set up as they wait.
- lib/widgets/common/app_bar/meeting_appbar.dart : This file defines the
MeetingAppBar
widget, which shows details like the meeting ID, recording status, and the session's elapsed time.
- lib/widgets/common/meeting_controls/meeting_action_bar.dart : This file defines the
MeetingActionBar
widget, which provides essential meeting controls at the bottom of the screen. Its main components include meeting controls like ending/ leaving a call, toggling the microphone and camera, and accessing chat. It also provides options for recording, screen sharing, and viewing the participant list.
- lib/widgets/common/app_bar/web_meeting_appbar.dart : This file defines the
WebMeetingAppBar
widget, serving as the top control bar for a web meeting interface. It features a meeting ID display with a copy button, recording indicator, microphone and camera controls with device options, screen sharing control, chat and participant list buttons, and an option to leave or end the meeting for all participants.
- lib/widgets/common/chat.dart : This file defines the
ChatView
widget. It displays incoming messages and enables users to send new messages.
- lib/widgets/common/participant/participant_list_item.dart and lib/widgets/common/participant/participant_list.dart : Displays the list of participants present in the meeting.
-
lib/screens/one-to-one/one_to_one_meeting_screen.dart : It contains the complete layout for one to one meeting.
-
lib/widgets/one-to-one/one_to_one_meeting_container.dart : The
OneToOneMeetingContainer
widget manages the display of local and remote participant streams in a one-on-one meeting, dynamically adjusting for video, audio, and screen share streams with responsive layout support. -
lib/widgets/one-to-one/participant_view.dart : It is used to display the individual stream of the participant.
-
lib/widgets/conference-call/conference_participant_grid.dart : The
ConferenceParticipantGrid
widget organizes and displays participants in a grid layout. -
lib/widgets/conference-call/participant_grid_tile.dart : The
ParticipantGridTile
widget displays single participant which is displayed in the grid. -
lib/widgets/conference-call/manage_grid.dart : The
ManageGrid
class organize participants into grid layouts for different device types (mobile, tablet, desktop) during a conference, adjusting the number of rows and columns based on the participant count and presentation mode. -
lib/widgets/conference-call/conference_screenshare_view.dart : The
ConferenseScreenShareView
widget handles the display of a screen share stream during a meeting.
- Prebuilt Example
- JavaScript SDK Example
- React SDK Example
- React Native SDK Example
- Android Java SDK Example
- Android Kotlin SDK Example
- iOS SDK Example
Explore more and start building with our Documentation