quickrtc_flutter_client 1.0.1 copy "quickrtc_flutter_client: ^1.0.1" to clipboard
quickrtc_flutter_client: ^1.0.1 copied to clipboard

A Flutter WebRTC client library built on MediaSoup with Provider state management for real-time video conferencing.

QuickRTC Flutter Client #

A Flutter WebRTC library built on MediaSoup for real-time video conferencing.

Features #

  • Simple API - High-level methods for common tasks
  • Cross-Platform - Android, iOS, macOS, Web
  • Screen Sharing - Full support for all platforms
  • Auto-Consume - Automatically handles new participant streams

Installation #

dependencies:
  quickrtc_flutter_client: ^1.0.1

Quick Start #

1. Connect & Join #

import 'package:quickrtc_flutter_client/quickrtc_flutter_client.dart';
import 'package:socket_io_client/socket_io_client.dart' as io;

// Create socket
final socket = io.io('https://your-server.com:3000',
  io.OptionBuilder()
    .setTransports(['websocket'])
    .disableAutoConnect()
    .build());
socket.connect();

// Create controller
final controller = QuickRTCController(socket: socket, debug: true);

// Join meeting
await controller.joinMeeting(
  conferenceId: 'my-room',
  participantName: 'John',
);

2. Start Camera & Mic #

// Get media
final media = await QuickRTCStatic.getLocalMedia(MediaConfig.audioVideo());

// Publish to meeting
await controller.produce(
  ProduceInput.fromTracksWithTypes(media.tracksWithTypes),
);

3. Control Media #

await controller.toggleMicrophoneMute();  // Mute/unmute mic
await controller.toggleCameraPause();     // Pause/resume camera

4. Render Video #

// Local video
QuickRTCMediaRenderer(
  stream: localStream,
  mirror: true,
  isLocal: true,
  participantName: 'You',
)

// Remote video
QuickRTCMediaRenderer(
  remoteStream: participant.videoStream,
  participantName: participant.name,
)

// Remote audio (invisible - handles playback)
QuickRTCAudioRenderers(participants: state.participantList)

5. Listen to State #

ListenableBuilder(
  listenable: controller,
  builder: (context, _) {
    final state = controller.state;
    // state.participantList - remote participants
    // state.hasLocalVideo - camera active
    // state.hasLocalAudio - mic active
    return YourUI();
  },
)

6. Leave #

await controller.leaveMeeting();
controller.dispose();
socket.disconnect();

Screen Sharing #

// Mobile
final media = await QuickRTCStatic.getLocalMedia(MediaConfig.screenShareOnly());

// Desktop (with picker)
final media = await QuickRTCStatic.getScreenShareWithPicker(context);

// Publish
await controller.produce(
  ProduceInput.fromTrack(media.screenshareTrack!, type: StreamType.screenshare),
);

Platform Setup #

Android #

android/app/src/main/AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />

android/app/build.gradle:

android {
    defaultConfig {
        minSdkVersion 24
    }
}

iOS #

ios/Runner/Info.plist:

<key>NSCameraUsageDescription</key>
<string>Camera for video calls</string>
<key>NSMicrophoneUsageDescription</key>
<string>Microphone for audio calls</string>

macOS #

macos/Runner/*.entitlements:

<key>com.apple.security.device.camera</key>
<true/>
<key>com.apple.security.device.audio-input</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>

State Properties #

state.isConnected           // Connection status
state.participantList       // List<RemoteParticipant>
state.participantCount      // Number of participants
state.hasLocalAudio         // Mic active
state.hasLocalVideo         // Camera active
state.isLocalAudioPaused    // Mic muted
state.isLocalVideoPaused    // Camera paused
state.localVideoStream      // LocalStream?
state.localAudioStream      // LocalStream?

RemoteParticipant #

participant.id              // String
participant.name            // String
participant.videoStream     // RemoteStream?
participant.audioStream     // RemoteStream?
participant.hasVideo        // bool
participant.hasAudio        // bool
participant.isVideoMuted    // bool
participant.isAudioMuted    // bool

Example #

See example/ for code snippets demonstrating basic features. For a complete working application, refer to the QuickRTC Example Repository.

Documentation #

Full documentation: quickrtc-docs.vercel.app/docs/flutter/getting-started

2
likes
0
points
13
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter WebRTC client library built on MediaSoup with Provider state management for real-time video conferencing.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

collection, equatable, events2, flutter, flutter_webrtc, freezed_annotation, h264_profile_level_id, json_annotation, logger, provider, sdp_transform, socket_io_client

More

Packages that depend on quickrtc_flutter_client

Packages that implement quickrtc_flutter_client