Official Flutter SDK for LiveKit. Easily add real-time video and audio to your Flutter apps.

Overview

LiveKit Flutter SDK

Official Flutter SDK for LiveKit. Easily add real-time video and audio to your Flutter apps.

This package is published to pub.dev as livekit_client.

Docs

More Docs and guides are available at https://docs.livekit.io

Current supported features

Feature Subscribe/Publish Simulcast Background mode Screen sharing
Web 🟢 🟢 🟢 🟢
iOS 🟢 🟡 🟡 🔴
Android 🟢 🟡 🟡 🔴

🟢 = Available 🟡 = Coming soon (Work in progress) 🔴 = Not currently available (Possibly in the future)

Installation

Include this package to your pubspec.yaml

...
dependencies:
  livekit_client: 
   

iOS

Camera and microphone usage need to be declared in your Info.plist file.

<dict>
  ...
  <key>NSCameraUsageDescriptionkey>
  <string>$(PRODUCT_NAME) uses your camerastring>
  <key>NSMicrophoneUsageDescriptionkey>
  <string>$(PRODUCT_NAME) uses your microphonestring>

Your application can still run the voice call when it is switched to the background if the background mode is enabled. Select the app target in Xcode, click the Capabilities tab, enable Background Modes, and check Audio, AirPlay, and Picture in Picture.

Your Info.plist should have the following entries.

<dict>
  ...
  <key>UIBackgroundModeskey>
  <array>
    <string>audiostring>
  array>

Android

We require a set of permissions that need to be declared in your AppManifest.xml. These are required by Flutter WebRTC, which we depend on.

... ">
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.your.package">
  <uses-feature android:name="android.hardware.camera" />
  <uses-feature android:name="android.hardware.camera.autofocus" />
  <uses-permission android:name="android.permission.CAMERA" />
  <uses-permission android:name="android.permission.RECORD_AUDIO" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
  ...
manifest>

Example app

We built a multi-user conferencing app as an example in the example/ folder. You can join the same room from any supported LiveKit clients.

Usage

Connecting to a room, publish video & audio

var room = await LiveKitClient.connect(url, token);
try {
  // video will fail when running in ios simulator
  var localVideo = await LocalVideoTrack.createCameraTrack();
  await room.localParticipant.publishVideoTrack(localVideo);
} catch (e) {
  print('could not publish video: $e');
}

var localAudio = await LocalAudioTrack.createTrack();
await room.localParticipant.publishAudioTrack(localAudio);

Rendering video

Each track can be rendered separately with the provided VideoTrackRenderer widget.

VideoTrack? track;

@override
Widget build(BuildContext context) {
  if (track != null) {
    return VideoTrackRenderer(track);
  } else {
    return Container(
      color: Colors.grey,
    );
  }
}

Audio handling

Audio tracks are rendered automatically as long as you are subscribed to them.

Handling changes

LiveKit client makes it simple to build declarative UI that reacts to state changes. It notifies changes in two ways

  • ChangeNotifier - generic notification of changes
  • RoomDelegate and ParticipantDelegate - notification of specific events.

This example will show you how to use both to react to room events.

class RoomWidget extends StatefulWidget {
  final Room room;

  RoomWidget(this.room);

  @override
  State<StatefulWidget> createState() {
    return _RoomState();
  }
}

class _RoomState extends State<RoomWidget> with RoomDelegate {
  @override
  void initState() {
    super.initState();
    widget.room.delegate = this;
    widget.room.addListener(_onChange);
  }

  @override
  void dispose() {
    widget.room.delegate = null;
    super.dispose();
  }

  void _onChange() {
    // perform computations and then call setState
    // setState will trigger a build
    setState(() {
      // your updates here
    });
  }

  @override
  void onDisconnected() {
    // onDisconnected is a RoomDelegate method, handle when disconnected from room
  }

  @override
  Widget build(BuildContext context) {
    // your build function
  }
}

Similarly, you could do the same when rendering participants. Reacting to changes makes it possible to handle tracks published/unpublished or re-ordering participants in your UI.

class VideoView extends StatefulWidget {
  final Participant participant;

  VideoView(this.participant);

  @override
  State<StatefulWidget> createState() {
    return _VideoViewState();
  }
}

class _VideoViewState extends State<VideoView> with ParticipantDelegate {
  TrackPublication? videoPub;

  @override
  void initState() {
    super.initState();
    widget.participant.addListener(this._onParticipantChanged);
    // trigger initial change
    _onParticipantChanged();
  }

  @override
  void dispose() {
    widget.participant.removeListener(this._onParticipantChanged);
    super.dispose();
  }

  @override
  void didUpdateWidget(covariant VideoView oldWidget) {
    oldWidget.participant.removeListener(_onParticipantChanged);
    widget.participant.addListener(_onParticipantChanged);
    _onParticipantChanged();
    super.didUpdateWidget(oldWidget);
  }

  void _onParticipantChanged() {
    var subscribedVideos = widget.participant.videoTracks.values.where((pub) {
      return pub.kind == TrackType.VIDEO &&
          !pub.isScreenShare &&
          pub.subscribed;
    });

    setState(() {
      if (subscribedVideos.length > 0) {
        var videoPub = subscribedVideos.first;
        if (videoPub is RemoteTrackPublication) {
          videoPub.videoQuality = widget.quality;
        }
        // when muted, show placeholder
        if (!videoPub.muted) {
          this.videoPub = videoPub;
          return;
        }
      }
      this.videoPub = null;
    });
  }

  @override
  Widget build(BuildContext context) {
    var videoPub = this.videoPub;
    if (videoPub != null) {
      return VideoTrackRenderer(videoPub.track as VideoTrack);
    } else {
      return Container(
        color: Colors.grey,
      );
    }
  }
}

Mute, unmute local tracks

On LocalTrackPublications, you could control if the track is muted by setting its muted property. Changing the mute status will generate an onTrackMuted or onTrack Unmuted delegate call for the local participant. Other participant will receive the status change as well.

// mute track
trackPub.muted = true;

// unmute track
trackPub.muted = false;

Subscriber controls

When subscribing to remote tracks, the client has precise control over status of its subscriptions. You could subscribe or unsubscribe to a track, change its quality, or disabling the track temporarily.

These controls are accessible on the RemoteTrackPublication object.

For more info, see Subscriber controls.

License

Apache License 2.0

Thanks

A huge thank you to flutter-webrtc for making it possible to use WebRTC in Flutter.

Comments
  • VideoTrackRenderer for local has been blacked when toggle video status

    VideoTrackRenderer for local has been blacked when toggle video status

    thanks for your sdk !

    i found that VideoTrackRenderer for local has been blacked when toggle video status!

    the vedio status is enabled when i connected to the room.

    and then setCameraEnabled(false) ,looks well;

    and then setCameraEnabled(true) , the other members can view my camera video;

    but my local VideoTrackRenderer gave a black container withoth anything;

    please check it?

    https://user-images.githubusercontent.com/7520801/189082490-15fd5e05-0c28-41f1-96e7-78a6d285fcef.mp4

    opened by lxl518000 38
  • After refreshing LiveKit server to 1.2.3  SDK can't connect to server

    After refreshing LiveKit server to 1.2.3 SDK can't connect to server

    After refreshing LiveKit server to 1.2.3 SDK can't connect to server. Neither Android or iOS.

    Flutter version: [✓] Flutter (Channel stable, 3.3.3, on macOS 12.6 21G115 darwin-arm, locale en-HU) • Flutter version 3.3.3 on channel stable at /Users/janoskranczler/flutter • Upstream repository https://github.com/flutter/flutter.git • Framework revision 18a827f393 (7 days ago), 2022-09-28 10:03:14 -0700 • Engine revision 5c984c26eb • Dart version 2.18.2 • DevTools version 2.15.0

    Plugin version: 1.1.4

    opened by janoskranczler 26
  • [bug] unable to connect

    [bug] unable to connect

    Unable to connect to Livekit "cloud" dashboard

    To reproduce

    1. clone repo
    2. flutter pub get
    3. flutter run --dart-define=URL=ws://{domain from "dashboard"}:7880 --dart-define=TOKEN={token generated in "settings"}
    4. (app runs on external device)
    5. press "connect"
    6. hangs for a few minutes with a spinner and then reports "failed to connect"

    Expected behavior Some kind of connection. Anything. I know I'm doing it wrong, but at this point I'm very frustrated. I've tried to use this product at least 4 times over the last 5 months. Tried installing servers on VMs, my local machine, etc. Each time I'm unable to get a connection going or to even begin debugging what the heck is going on. I feel like an idiot

    Platform information

    Pixel 2

    • Flutter version

    Flutter (Channel stable, 3.3.6, on macOS 12.5.1 21G83 darwin-x64, locale en-US)

    • Plugin version:

    livekit_client: ^1.1.7

    • Flutter target OS:

    Android device

    • Flutter target OS version:

    ?

    • Flutter console log:

    I/flutter (20691): 12:51:48: SignalClient connecting with url: ws://uvai.livekit.cloud:7880/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjY4MzE2MTgsImlzcyI6IkFQSXpVSkpBcE5NNjZkYiIsIm5iZiI6MTY2Njc0NTIxOCwic3ViIjoidXNlci01YmYwYzNjMCIsInZpZGVvIjp7InJvb20iOiJyb29tLTcwNDIxNzA0Iiwicm9vbUpvaW4iOnRydWV9fQ.8Qjnmx10jr96k7V6PWV45tKoGlA55N3JHa8Q9RCEgpw&auto_subscribe=1&adaptive_stream=0&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2 I/flutter (20691): 12:51:48: SignalClient ConnectionState disconnected -> connecting I/flutter (20691): 12:51:48: [SignalClient#723860707] cleanUp() I/flutter (20691): 12:51:48: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null) I/flutter (20691): 12:51:48: [WebSocketIO] Connecting(uri: ws://uvai.livekit.cloud:7880/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjY4MzE2MTgsImlzcyI6IkFQSXpVSkpBcE5NNjZkYiIsIm5iZiI6MTY2Njc0NTIxOCwic3ViIjoidXNlci01YmYwYzNjMCIsInZpZGVvIjp7InJvb20iOiJyb29tLTcwNDIxNzA0Iiwicm9vbUpvaW4iOnRydWV9fQ.8Qjnmx10jr96k7V6PWV45tKoGlA55N3JHa8Q9RCEgpw&auto_subscribe=1&adaptive_stream=0&protocol=8&sdk=flutter&version=1.0.0&network=wifi&os=android&os_version=11&device_model=Pixel+2)... I/flutter (20691): 12:53:55: [WebSocketIO] did throw SocketException: Connection timed out (OS Error: Connection timed out, errno = 110), address = uvai.livekit.cloud, port = 41091 I/flutter (20691): 12:56:03: SignalClient ConnectionState connecting -> disconnected I/flutter (20691): 12:56:03: Connect Error Failed to connect I/flutter (20691): 12:56:03: Engine ConnectionState connecting -> disconnected I/flutter (20691): Could not connect Failed to connect I/flutter (20691): 12:56:03: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null) I/flutter (20691): 12:56:03: [EngineEvent] Engine#100113504 EngineConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null) I/flutter (20691): 12:56:03: [Room#497044879] cleanUp() I/flutter (20691): 12:56:03: onDisconnected state:ConnectionState.disconnected reason:signal I/flutter (20691): 12:56:03: [Engine#100113504] Already disconnected... DisconnectReason.signal I/flutter (20691): 12:56:03: [Engine#100113504] cleanUp() I/flutter (20691): 12:56:03: [SignalClient#723860707] cleanUp() I/flutter (20691): 12:56:03: [RoomEvent] RoomDisconnectedEvent(), will notifyListeners()

    opened by brighama 17
  • Black screen on broadcaster's widget

    Black screen on broadcaster's widget

    Hi, While there is a broadcaster in a room in my app, when a new broadcaster arrives, the image of both broadcasters appears correctly, but when the new broadcaster exits, the old broadcaster sees himself on a black screen. His voice is heard, but he and the audience see a black screen. When you put the application in the background and open it again, the camera works.

    @davidzhao @cloudwebrtc

    opened by fpasalioglu 13
  • screen sharing for desktop.

    screen sharing for desktop.

    Currently, flutter-webrtc solves macOS/Windows screen/window enumeration and can select specific sources for sharing. The following issues still need to be resolved

    Capture screen

    • [x] macOS
    • [x] Windows

    Capture window

    • [x] macOS
    • [x] Windows

    Watch window changes to refresh the selection dialog, if some windows are closed, or the title changes, refresh the list.

    • [x] macOS
    • [x] Windows

    Monitor the status of the window/screen, for example, if we close the window that is in capturing, or unplug the second display HDMI cable, we need to send a notification, and the client SDK needs to automatically close the sharing, remove the video source track.

    • [x] macOS
    • [x] Windows

    ~~Another question, should we move the example/lib/widgets/screen_select_dialog.dart file inside the SDK? this In this case, we need to pass in a BuildContext to build the Widget when starting the SDK.~~

    • [x] Add capture source selection dialog to SDK.

    related PRs: https://github.com/flutter-webrtc/flutter-webrtc/pull/1015 https://github.com/webrtc-sdk/libwebrtc/pull/36 https://github.com/webrtc-sdk/webrtc/pull/24

    imageimageimage

    opened by cloudwebrtc 12
  • Windows 11 - Crash on Connect in Example Project, Version 1.0.1

    Windows 11 - Crash on Connect in Example Project, Version 1.0.1

    On the example project the app crashes directly on connect with Windows 11 (Version 21H2) using the Live Kit Version 1.0.1.

    The persmissions for video & microphone have been granted according to the flutter permission handler. (https://pub.dev/packages/permission_handler)

    Version of WebRTC is already 0.8.9.

    flutter: 03:49:29: RemoteTrackPublication.updateTrack track: null
    flutter: 03:49:29: Room Connect completed
    flutter: 03:49:29: [ParticipantEvent] ParticipantPermissionsUpdatedEvent(participant: LocalParticipant(sid: PA_seL6mvs4JCnG, identity: 5), permissions: Instance of 'ParticipantPermissions'), will notifyListeners()
    flutter: 03:49:29: [RoomEvent] ParticipantPermissionsUpdatedEvent(participant: LocalParticipant(sid: PA_seL6mvs4JCnG, identity: 5), permissions: Instance of 'ParticipantPermissions'), will notifyListeners()
    flutter: 03:49:29: [PCTransport] creating {sdpSemantics: unified-plan, iceServers: [{urls: [turn:3.121.184.220:443?transport=udp], username: drunkenunping-72248, credential: drunkenunping-72248}]}
    flutter: 03:49:29: [SignalEvent] Instance of 'SignalTokenUpdatedEvent'
    flutter: 03:49:29: [SignalEvent] Instance of 'SignalOfferEvent'
    3
    flutter: 03:49:29: [SignalEvent] Instance of 'SignalTrickleEvent'
    flutter: 03:49:29: [SignalEvent] Instance of 'SignalParticipantUpdateEvent'
    flutter: 03:49:29: [ParticipantEvent] ParticipantPermissionsUpdatedEvent(participant: LocalParticipant(sid: PA_seL6mvs4JCnG, identity: 5), permissions: Instance of 'ParticipantPermissions'), will notifyListeners()
    flutter: 03:49:29: [RoomEvent] ParticipantPermissionsUpdatedEvent(participant: LocalParticipant(sid: PA_seL6mvs4JCnG, identity: 5), permissions: Instance of 'ParticipantPermissions'), will notifyListeners()
    Lost connection to device.
    
    opened by design2be 12
  • Not reconnecting after network problem fixed

    Not reconnecting after network problem fixed

    Describe the issue If the broadcaster has an internet problem or switches from wifi to cellular, the broadcast is interrupted and does not reconnect.

    To Reproduce Switch from wifi to cellular

    Expected behavior Continue the broadcast from where it is when the internet is fixed

    opened by fpasalioglu 10
  • running the provied example failed

    running the provied example failed

    Hi, i was trying to run the provided example but failed. the error was:

    ❯ pod install
    Analyzing dependencies
    [!] CocoaPods could not find compatible versions for pod "WebRTC-SDK":
      In snapshot (Podfile.lock):
        WebRTC-SDK (= 92.4515.07)
    
      In Podfile:
        flutter_webrtc (from `.symlinks/plugins/flutter_webrtc/ios`) was resolved to 0.2.2, which depends on
          WebRTC-SDK (= 92.4515.07)
    
        livekit_client (from `.symlinks/plugins/livekit_client/ios`) was resolved to 0.0.1, which depends on
          WebRTC-SDK (= 92.4515.10)
    
    Specs satisfying the `WebRTC-SDK (= 92.4515.07), WebRTC-SDK (= 92.4515.07), WebRTC-SDK (= 92.4515.10)` dependency were found, but they required a higher minimum deployment target.
    

    when i saw the Podfile, the target in the provided example is

    platform :ios, '12.1'
    

    which seems right.

    i've tried to do pod cache clean --all too.

    any suggestion ?

    I am using:

    • ios simulator
    • on Mac M1
    opened by chenull 10
  • [Question] Share screen with client-sdk-flutter

    [Question] Share screen with client-sdk-flutter

    Hi, master, I am sharing the screen from using client-sdk-flutter. However, I can't see the screen share from the web client. Can you help me to find the solution to solve it? Thanks !

    opened by jack2992 10
  • Failed to build for iOS with version 1.1.0

    Failed to build for iOS with version 1.1.0

    After updating from livekit_client: 1.0.1 to livekit_client: 1.1., building for iOS generates this error:

    [!] CocoaPods could not find compatible versions for pod "WebRTC-SDK":
          In snapshot (Podfile.lock):
            WebRTC-SDK (= 97.4692.05, ~> 97.4692)
    
          In Podfile:
            flutter_webrtc (from `.symlinks/plugins/flutter_webrtc/ios`) was resolved to 0.9.2, which depends on
              WebRTC-SDK (= 104.5112.02)
    
            livekit_client (from `.symlinks/plugins/livekit_client/ios`) was resolved to 1.0.0, which depends on
              WebRTC-SDK (~> 97.4692)
    
    
    opened by FreddyKaiser 9
  • Simulcast, Screen sharing & Various improvements

    Simulcast, Screen sharing & Various improvements

    Simulcast

    To make simulcast work for iOS/Android, WebRTC itself needs patching + need to modify flutter_webrtc.

    • [x] Web
    • [ ] iOS
    • [ ] Android

    Next

    • [x] Simulcast option for example app
    • [x] Fallback to ConnectOption's TrackPublishOptions if options == null for publishVideoTrack
    • [x] More code optimizations for dart syntax
    • [x] Screen sharing
    • [x] Fix a bug that exit and re-entering room causes exception.
    • [ ] Better error handling
    • [ ] Test Simulcast with real devices
    • [ ] Limit what symbols are Exported by show
    • [ ] Manage AudioSession

    Notes

    • PB imports has been prefixed to avoid potential symbol collision such as Room
    opened by hiroshihorie 8
  • [bug] publishing glitches on certain Android devices

    [bug] publishing glitches on certain Android devices

    Describe the bug

    When publishing on certain devices, their video appears to have an artifact. Sometimes it's a green border, other times it appears distorted. This appears hardware specific.

    The user also reported that it could be related to their internet connection.

    To Reproduce

    User reports reproduction on

    • HUAWEI P30 Lite
    • HUAWEI Y9 Prime 2019
    opened by davidzhao 1
  • (Mac Desktop Bug) EXC_BAD_ACCESS (SIGSEGV) on M1 Mac Studio

    (Mac Desktop Bug) EXC_BAD_ACCESS (SIGSEGV) on M1 Mac Studio

    Hey @cloudwebrtc

    I am getting crash on my M1 mac studio on the example app.

    Flutter Doctor

    Doctor summary (to see all details, run flutter doctor -v):
    [✓] Flutter (Channel stable, 3.3.10, on macOS 13.0.1 22A400 darwin-arm, locale en-AE)
    [✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    [✓] Xcode - develop for iOS and macOS (Xcode 14.2)
    [✓] Chrome - develop for the web
    [✓] Android Studio (version 2021.2)
    [✓] VS Code (version 1.74.2)
    [✓] Connected device (3 available)
        ! Error: iPhone (60) is busy: Fetching debug symbols for iPhone (60). Xcode will continue when iPhone (60) is finished. (code -10)
    [✓] HTTP Host Availability
    

    Error Report error_report.txt

    opened by jascodes 5
  • [bug]运行在Android12上会出现无法找到蓝牙权限导致崩溃

    [bug]运行在Android12上会出现无法找到蓝牙权限导致崩溃

    Describe the bug I/LogContext(19681): [main] uploadCoreByStartService: start upload service, logCategory: mPaaSCrashAndroid, success: true, process: main, disableTools: false, event: maxLogCount E/MonitorLogger(19681): [main] crash: java.lang.SecurityException: Need BLUETOOTH permission E/MonitorLogger(19681): at android.bluetooth.BluetoothHeadset.(BluetoothHeadset.java:426) E/MonitorLogger(19681): at android.bluetooth.BluetoothAdapter.getProfileProxy(BluetoothAdapter.java:3144) E/MonitorLogger(19681): at com.twilio.audioswitch.bluetooth.BluetoothHeadsetManager.start(BluetoothHeadsetManager.kt:156) E/MonitorLogger(19681): at com.twilio.audioswitch.AudioSwitch.start(AudioSwitch.kt:160) E/MonitorLogger(19681): at com.cloudwebrtc.webrtc.audio.AudioSwitchManager.lambda$start$2$com-cloudwebrtc-webrtc-audio-AudioSwitchManager(AudioSwitchManager.java:70) E/MonitorLogger(19681): at com.cloudwebrtc.webrtc.audio.AudioSwitchManager<2$>ExternalSyntheticLambda1.run(Unknown Source:2) E/MonitorLogger(19681): at android.os.Handler.handleCallback(Handler.java:938) E/MonitorLogger(19681): at android.os.Handler.dispatchMessage(Handler.java:99) E/MonitorLogger(19681): at android.os.Looper.loopOnce(Looper.java:210) E/MonitorLogger(19681): at android.os.Looper.loop(Looper.java:299) E/MonitorLogger(19681): at android.app.ActivityThread.main(ActivityThread.java:8118) E/MonitorLogger(19681): at java.lang.reflect.Method.invoke(Native Method) E/MonitorLogger(19681): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556) E/MonitorLogger(19681): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1045) To Reproduce

    Expected behavior

    Platform information

    • Flutter version:
    • Plugin version:
    • Flutter target OS:
    • Flutter target OS version:
    • Flutter console log:
    opened by Poker-J 10
  • [bug] Bad state: StreamSink is closed

    [bug] Bad state: StreamSink is closed

    Describe the bug

    Firebase report :

    Fatal Exception: io.flutter.plugins.firebase.crashlytics.FlutterError: Bad state: StreamSink is closed. Error thrown null. at _WebSocketImpl.add(_WebSocketImpl.java) at Transport.sendAsyncMessage(transport.dart:145) at ClientImpl._onPing(client.dart:711) at ClientImpl._onPush(client.dart:719) at Transport._onData..(transport.dart:246) at _GrowableList.forEach(_GrowableList.java) at Transport._onData.(transport.dart:242)

    I see this error coming up frequently in my Firebase reports.

    opened by furkanKotic 0
  • Aggressive echos during conference calls (mostly on iOS)

    Aggressive echos during conference calls (mostly on iOS)

    We recently moved our voice conference features on LiveKit. In our first test with a group of five people, we realized strong and loud echo happens mostly for iOS users. Obviously all the participants are not using headphone, but we had a perfect consistency with Agora and we changed it because of the unstable flutter plugin and lack of web support.

    I tried to turn echoCancellation on to fix the issue but nothing changed and it seems the option is already turned on by default. In the documentation it reads Attempt to use echoCancellation option (if supported by the platform). So is there something I need to do to enable it in iOS?

    I would appreciate if you guide me to fix this issue

    P.S During implementation I found more inconsistence behaviors in other parts which I had to handle with a dirty workaround. I will list them here in case of informing

    • For the first time after connecting to the room, mute or unmute microphone doesn't notify room listeners
    • On iOS, enabling and disabling microphone track is inconsistent. If I disable it, it would not enable anymore. Even by disposing the room.
    opened by papmodern 13
Releases(v1.1.11)
  • v1.1.11(Dec 12, 2022)

  • v1.1.9(Nov 28, 2022)

  • v1.1.8(Nov 14, 2022)

  • v1.1.7(Oct 19, 2022)

    1.1.7

    • Fixed ice config issues. (#192).
    • Make timeouts configurable.
    • Fixed Hardware.setSpeakerphoneOn() not working on iOS.
    • Fixed track not being correctly passed to localParticipant in FastConnectOptions, causing the camera to apply twice and not be released.
    • Clean up pingIntervalTimer when closing SignalClient.
    Source code(tar.gz)
    Source code(zip)
  • v1.1.6(Oct 12, 2022)

  • v1.1.5(Oct 9, 2022)

    • Make MediaDevice data class.
    • Add simulate for candidate protocol switch.
    • Fix VideoTrackRenderer for local has been blacked when toggling video status #166
    Source code(tar.gz)
    Source code(zip)
  • v1.1.3(Sep 13, 2022)

  • v1.1.2(Sep 9, 2022)

    • feat: Support for capturing audio for chrome tab.
    • Expose data channel for e2e testing.
    • Expose RTPReceiver for getting track statistics.
    • fix: Do not set mandatory & optional parameters, when used in web (#164)
    Source code(tar.gz)
    Source code(zip)
  • v1.1.1(Aug 24, 2022)

  • v1.1.0-hotfix(Aug 17, 2022)

  • v1.1.0(Aug 2, 2022)

    Changelog (2022-08-02)

    • Set subscription to allowed when subscribed.
    • Handle combined participant updates.
    • Downgrade version settings to support flutter 2.8.0+.
    • Fix camera release.
    • Feat: iOS screen share.
    • Feat: Screen sharing for desktop.
    • Feat: protocol v8.
    Source code(tar.gz)
    Source code(zip)
  • v1.0.1(Jun 20, 2022)

    Changelog

    • Re-send tracks permissions after reconnected.
    • Add audioBitrate option for publishAudioTrack.
    • Bump version for flutter_webrtc (up to 0.8.9).
    • Fix: SIGTERM / Crash on connection (Windows) #121
    • Fix: Microphone not published on windows build #64
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(May 18, 2022)

    Recent changes

    • Ready for Flutter 3.
    • mirrorMode for VideoTrackRenderer. #119
    • Fix url building logic for validation mode. #110
    • Changed AVAudioSessionCategory switch timing to publish / unpublish. #104
    • Support for Bluetooth on Android 11. #107

    Full diff: https://github.com/livekit/client-sdk-flutter/compare/v0.5.9...v1.0.0

    Source code(tar.gz)
    Source code(zip)
  • v0.5.9(Apr 7, 2022)

  • v0.5.8(Apr 4, 2022)

    • Support for protocol 7, remote unpublish.
    • Fixes simulcast issues with Android devices.
    • Adds ability to select capture device by id.
    • serverRegion property on Room.
    • Minor optimizations.
    Source code(tar.gz)
    Source code(zip)
  • v0.5.7(Mar 3, 2022)

  • v0.5.6(Jan 8, 2022)

    • Using WebRTC version M93.
    • New dynacast option to RoomOptions. Dynacast dynamically pauses video layers that are not being consumed by any subscribers, significantly reducing publishing CPU and bandwidth usage. (currently defaults to off)
    • Rename optimizeVideo to adaptiveStream and improve stability. AdaptiveStream lets LiveKit automatically manage quality of subscribed video tracks to optimize for bandwidth and CPU.
    • Ensure data channel is ready state when LocalParticipant.publishData api is called.
    Source code(tar.gz)
    Source code(zip)
  • v0.5.5(Dec 22, 2021)

    • Default capture options for setCameraEnabled, setMicrophoneEnabled
    • Track stream update events
    • Send video layers to server for more video optimization
    • Room instance can be created without connecting
    • Release Camera/Mic when track is muted
    • Better type handling
    • Option to unpublish without stopping track
    • Fixed RemoteTrackPublication mute events
    • Fixed data channel publish bug
    • Initial Windows support
    Source code(tar.gz)
    Source code(zip)
  • v0.5.4(Nov 27, 2021)

    • Screen sharing support for Android
    • Fixed TrackPublication/Track mute status
    • Fixed bug with updateTrack
    • Fixed being able to apply capture resolution constraints
    • initial macOS support
    Source code(tar.gz)
    Source code(zip)
  • v0.5.3(Nov 10, 2021)

    • Connection quality information
    • Automatic video optimizations
    • Simplified track APIs
    • Fix ios camera switch issue
    • Looser podspec constraint for WebRTC-SDK to avoid build issues
    • Better URL parsing
    Source code(tar.gz)
    Source code(zip)
  • v0.5.2(Oct 22, 2021)

  • v0.5.1(Oct 2, 2021)

Owner
LiveKit
Open source platform for real-time audio and video
LiveKit
Audio Recorder Jordan AlcarazAudio Recorder [156⭐] - Record audio and store it locally by Jordan Alcaraz.

Audio recorder Record audio and store it locally Usage To use this plugin, add audio_recorder as a dependency in your pubspec.yaml file. Android Make

Jordan Alcaraz 172 Jan 4, 2023
WaVe - an audio streaming platform which gives the best user experience without any compromise in the audio quality

WaVe is an audio streaming platform which gives the best user experience without any compromise in the audio quality, and there is even space for the users to explore their creativity. And makes it more efficient with the AI features.

OmarFayadhd 1 May 31, 2022
YoYo Video Player is a HLS(.m3u8) video player for flutter.

YoYo Video Player YoYo Video Player is a HLS(.m3u8) video player for flutter. The video_player is a video player that allows you to select HLS video s

Ko Htut 89 Dec 23, 2022
Apps For streaming audio via url (Android, iOS & Web ). Developed with Dart & Flutter ❤

Flutter Sleep App (Dicoding Submission : Learn to Make Flutter Apps for Beginners) Stream Great collection of high-definition sounds that can be mixed

Utrodus Said Al Baqi 13 Nov 29, 2022
Flutter plugin for playing or streaming YouTube videos inline using the official iFrame Player API.

Flutter plugin for playing or streaming YouTube videos inline using the official iFrame Player API. The package exposes almost all the API provided by iFrame Player API. So, it's 100% customizable.

Sarbagya Dhaubanjar 558 Jan 2, 2023
Flutter plugin that can support audio recording and level metering

flutter_audio_recorder English | 简体中文 Flutter Audio Record Plugin that supports Record Pause Resume Stop and provide access to audio level metering pr

RMBR ONE 108 Dec 13, 2022
Flutter plugin for sound. Audio recorder and player.

Flutter Sound user: your documentation is there The CHANGELOG file is here Overview Flutter Sound is a Flutter package allowing you to play and record

null 764 Jan 2, 2023
A Flutter audio-plugin to playing and recording sounds

medcorder_audio Flutter record/play audio plugin. Developed for Evrone.com Funded by Medcorder Medcorder.com Getting Started For help getting started

Evrone 106 Oct 29, 2022
Flutter plugin for sound. Audio recorder and player.

Sounds Sounds is a Flutter package allowing you to play and record audio for both the android and ios platforms. Sounds provides both a high level API

Brett Sutton 75 Dec 8, 2022
A Flutter package for both android and iOS which provides Audio recorder

social_media_recorder A Flutter package for both android and iOS which provides

subhikhalifeh 16 Dec 29, 2022
Music Player app made with Just audio library and Local database Hive.

Music Player app made with Just audio library and Local database Hive. Find the free and Royelty music with Happy Rock application. The app contains information about singers and you can make your own playlist with Songs.Happy rock App's features are same as the real music app like spotify, amazon music etc.

Ansh rathod 17 Dec 22, 2022
Just_audio: a feature-rich audio player for Android, iOS, macOS and web

just_audio just_audio is a feature-rich audio player for Android, iOS, macOS and web. Mixing and matching audio plugins The flutter plugin ecosystem c

Ensar Yusuf Yılmaz 2 Jun 28, 2022
A opensource, minimal and powerful audio player for android

A opensource, minimal and powerful audio player for android

Milad 7 Nov 2, 2022
Audio player app in Flutter. Created as a tutorial for learning Flutter.

Music Player: create a simple Flutter music player app This is a Flutter project used during a series of articles on I should go to sleep. License Cop

Michele Volpato 11 May 5, 2022
Virlow Flutter Recorder - an open-source Flutter application that can transcribe recorded audio

The Virlow Flutter Recorder is an open-source Flutter application that can transcribe recorded audio, plus it includes TL;DR and Short Hand Notes for your transcription. It also consists of a rich text editor that allows you to edit the transcription plus add any additional notes you require.

null 12 Dec 26, 2022
Play simultaneously music/audio from assets/network/file directly from Flutter, compatible with android / ios / web / macos, displays notifications

?? assets_audio_player ?? Play music/audio stored in assets files (simultaneously) directly from Flutter (android / ios / web / macos). You can also u

Florent CHAMPIGNY 651 Dec 24, 2022
Flutter (web-only at this moment) plugin for recording audio (using the microphone).

Microphone Flutter (web-only at this moment) plugin for recording audio (using the microphone). Getting started To learn more about the plugin and get

null 28 Sep 26, 2022
A feature-packed audio recorder app built using Flutter

Qoohoo Submission ??️ An audio recording/playing app. ??️ This is a basic audio

Akshay Maurya 24 Dec 22, 2022
Audio Input Mixer made in Flutter (UI only)

Audio Input Mixer UI Design in Flutter Audio Input Mixer made in Flutter (UI only) This project is an attempt to design a simple one screen Audio Mixe

Praharsh Bhatt 6 Jul 16, 2022