apars_media

pub package pub points license

Student-side Flutter SDK for Apars Media live classes. Supports HLS playback, real-time chat, and viewer tracking out of the box.

Features

  • HLS live stream playback via AparsMediaPlayerWidget (wraps video_player with 15-retry exponential backoff)
  • Real-time chat — send and receive messages over Socket.IO v4
  • Viewer tracking — automatic start/stop heartbeats
  • Typed event stream — Dart 3 sealed RoomEvent classes, exhaustive switch support
  • Multi-server — connect one app to multiple Apars Media servers simultaneously

Installation

Add to your pubspec.yaml:

dependencies:
  apars_media: ^1.0.3

Then run:

flutter pub get

Permissions

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

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

iOSios/Runner/Info.plist (needed by video_player):

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

Quick start

1. Initialize

Call once from main() before runApp():

void main() {
  AparsMediaSDK.init(
    baseUrl:  'https://your-apars-media-server.com',
    clientId: 'your_client_id',
    authKey:  'your_auth_key',
  );
  runApp(const MyApp());
}

2. Join a room

final room = await AparsMediaSDK.instance.joinRoom(
  roomId:   'room_abc123',
  userId:   currentUser.id,
  userName: currentUser.displayName,
);

3. Show the player

AparsMediaPlayerWidget(room: room)

4. Listen for events

final sub = room.events.listen((event) {
  switch (event) {
    case ChatMessageReceived(:final message):
      setState(() => messages.add(message));
    case ViewerCountUpdated(:final count):
      setState(() => viewers = count);
    case RoomEnded():
      Navigator.pop(context);
    default:
      break;
  }
});

5. Send a chat message

room.sendChatMessage('Hello!');

6. Clean up

@override
void dispose() {
  sub.cancel();
  room.leave();
  super.dispose();
}

Multi-server support

Construct one AparsMediaSDK instance per server instead of using the singleton:

final schoolA = AparsMediaSDK(
  baseUrl:  'https://school-a.com',
  clientId: 'id_a',
  authKey:  'key_a',
);
final schoolB = AparsMediaSDK(
  baseUrl:  'https://school-b.com',
  clientId: 'id_b',
  authKey:  'key_b',
);

RoomEvent types

Event Description
RoomConnected Socket connected successfully
RoomDisconnected Socket disconnected (auto-reconnects)
ConnectionWarning High latency detected
ChatMessageReceived New chat message
ChatToggled Chat enabled/disabled by teacher
SlowModeToggled Slow mode changed
MessagePinned Message pinned/unpinned
MessageDeleted Message removed
UserBanned User banned from chat
ViewerCountUpdated Live viewer count changed
TeacherVideoToggled Teacher camera on/off
TeacherAudioToggled Teacher mic on/off
TeacherReconnected Teacher came back after a drop
RoomEnded Class ended by teacher
SessionKicked Duplicate login detected

Requirements

Platform Minimum
Flutter 3.10+
Dart 3.0+
iOS 12+
Android API 21+

License

MIT

Libraries

apars_media
AparsMedia Flutter SDK — HLS stream URL + real-time chat for students and co-teachers.