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

Last update: Jun 18, 2022

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.

GitHub

https://github.com/livekit/client-sdk-flutter
Comments
  • 1. 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
    Reviewed by chenull at 2021-10-22 03:12
  • 2. [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 !

    Reviewed by jack2992 at 2021-08-31 13:52
  • 3. 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
    Reviewed by hiroshihorie at 2021-08-31 18:28
  • 4. VideoTrackRenderer wrapped in ClipRRect renders black corners

    Code to reproduce.

    ClipRRect( borderRadius: BorderRadius.circular(20), child: VideoTrackRenderer(p.videoTracks.first.track as VideoTrack, fit: RTCVideoViewObjectFit.RTCVideoViewObjectFitCover)));

    image

    Reviewed by wfinken at 2022-02-09 18:12
  • 5. Example failed to run on ios simulator

    Hi there, I am trying to run the example app from the latest main branch but there is an error while compiling for ios simulator. I search the github issues previously and found something almost similar reported before #22 .

    The error received was:

    [!] CocoaPods could not find compatible versions for pod "WebRTC-SDK":
      In snapshot (Podfile.lock):
        WebRTC-SDK (= 92.4515.11)
    
      In Podfile:
        flutter_webrtc (from `.symlinks/plugins/flutter_webrtc/ios`) was resolved to 0.7.1, which depends on
          WebRTC-SDK (= 92.4515.11)
    
        livekit_client (from `.symlinks/plugins/livekit_client/ios`) was resolved to 0.5.2, which depends on
          WebRTC-SDK (= 92.4515.10)
    
    
    You have either:
     * out-of-date source repos which you can update with `pod repo update` or with `pod install --repo-update`.
     * changed the constraints of dependency `WebRTC-SDK` inside your development pod `livekit_client`.
       You should run `pod update WebRTC-SDK` to apply changes you've made.
    

    I have run every command suggested by the error and the same error is still popping up.

    Thank you :)

    Reviewed by ichiroadris at 2021-11-08 22:03
  • 6. Apply Flutter best practices [Non-Breaking]

    Add flutter_lints package, and clear the lint warnings. This PR is intended to be non-breaking, but clearing some lint errors need breaking changes, I will open another Draft PR for that.

    Reviewed by hiroshihorie at 2021-08-29 13:32
  • 7. [Windows] SIGTERM / Crash on connection

    Using the example app results in a crash when connecting.

    The issue was always there, in all LiveKit versions that I tried, not just the recent releases.

    The WebRTC Example App is working fine for me on windows. How can I try to debug this?

    client_sdk: 1.0.0 server: 1.0.1 flutter: 3.0.1

    Connecting to VM Service at ws://127.0.0.1:51014/Pl7Ck9atwPw=/ws
    flutter: Connecting with url: wss://live.xxxx-xxxx.net, token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NTQ3ODY4NTAsImlzcyI6IkFQSWFlb0JFeENOdG5CUyIsIm5iZiI6MTY1MjE5NDg1MCwic3ViIjoic2wiLCJ2aWRlbyI6eyJyb29tIjoidGVzdDAxIiwicm9vbUpvaW4iOnRydWV9fQ.7m6xVj3UFXIZfAucgqLjziZEefuX8ZLmgAMPYnEAWVE...
    flutter: 12:57:06: Engine ConnectionState disconnected -> connecting
    flutter: 12:57:06: [EngineEvent] Engine#148511108 EngineConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null)
    flutter: 12:57:06: SignalClient connecting with url: wss://live.xxxx-xxxx.net/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NTQ3ODY4NTAsImlzcyI6IkFQSWFlb0JFeENOdG5CUyIsIm5iZiI6MTY1MjE5NDg1MCwic3ViIjoic2wiLCJ2aWRlbyI6eyJyb29tIjoidGVzdDAxIiwicm9vbUpvaW4iOnRydWV9fQ.7m6xVj3UFXIZfAucgqLjziZEefuX8ZLmgAMPYnEAWVE&auto_subscribe=1&adaptive_stream=0&protocol=7&sdk=flutter&version=1.0.0&os=windows
    flutter: 12:57:06: SignalClient ConnectionState disconnected -> connecting
    flutter: 12:57:06: [SignalClient#728484996] cleanUp()
    flutter: 12:57:06: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null)
    flutter: 12:57:06: [WebSocketIO] Connecting(uri: wss://live.xxxx-xxxx.net/rtc?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NTQ3ODY4NTAsImlzcyI6IkFQSWFlb0JFeENOdG5CUyIsIm5iZiI6MTY1MjE5NDg1MCwic3ViIjoic2wiLCJ2aWRlbyI6eyJyb29tIjoidGVzdDAxIiwicm9vbUpvaW4iOnRydWV9fQ.7m6xVj3UFXIZfAucgqLjziZEefuX8ZLmgAMPYnEAWVE&auto_subscribe=1&adaptive_stream=0&protocol=7&sdk=flutter&version=1.0.0&os=windows)...
    flutter: 12:57:06: [WebSocketIO] Connected
    flutter: 12:57:06: SignalClient ConnectionState connecting -> connected
    flutter: 12:57:06: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: connected, didReconnect: false, disconnectReason: null)
    flutter: 12:57:06: [SignalEvent] Instance of 'SignalJoinResponseEvent'
    flutter: 12:57:06: onConnected subscriberPrimary: true, serverVersion: 1.0.1, iceServers: [urls: turn:23.88.43.252:443?transport=udp
    urls: turns:live-turn.xxxx-xxxx.net:443?transport=tcp
    username: test01
    credential: esfxSYymurP5zq7IwkfScqIlEb0N3nYLNRvruWzzSTbB
    flutter: 12:57:06: [PCTransport] creating {sdpSemantics: unified-plan, iceServers: [{urls: [turn:23.88.43.252:443?transport=udp, turns:live-turn.therapy-lift.net:443?transport=tcp], username: test01, credential: test01}]}
    flutter: 12:57:06: [Engine] Received JoinResponse, serverVersion: 1.0.1
    flutter: 12:57:06: Room Connect completed
    flutter: 12:57:06: [ParticipantEvent] ParticipantPermissionsUpdatedEvent(participant: LocalParticipant(sid: PA_mFLZ9tREXocx, identity: sl), permissions: Instance of 'ParticipantPermissions'), will notifyListeners()
    flutter: 12:57:06: [RoomEvent] ParticipantPermissionsUpdatedEvent(participant: LocalParticipant(sid: PA_mFLZ9tREXocx, identity: sl), permissions: Instance of 'ParticipantPermissions'), will notifyListeners()
    flutter: 12:57:06: [PCTransport] creating {sdpSemantics: unified-plan, iceServers: [{urls: [turn:23.88.43.252:443?transport=udp, turns:live-turn.therapy-lift.net:443?transport=tcp], username: test01, credential: test01}]}
    flutter: 12:57:06: [SignalEvent] Instance of 'SignalTokenUpdatedEvent'
    flutter: 12:57:06: [SignalEvent] Instance of 'SignalOfferEvent'
    9
    flutter: 12:57:06: [SignalEvent] Instance of 'SignalTrickleEvent'
    Lost connection to device.
    Exited (sigterm)
    
    PS C:\Users\winislose\client-sdk-flutter> flutter doctor -v
    [√] Flutter (Channel stable, 3.0.1, on Microsoft Windows [Version 10.0.19044.1706], locale de-DE)
        • Flutter version 3.0.1 at D:\src\flutter
        • Upstream repository https://github.com/flutter/flutter.git
        • Framework revision fb57da5f94 (12 hours ago), 2022-05-19 15:50:29 -0700
        • Engine revision caaafc5604
        • Dart version 2.17.1
        • DevTools version 2.12.2
    
    [√] Android toolchain - develop for Android devices (Android SDK version 30.0.3) 
        • Android SDK at D:/android
        • Platform android-31, build-tools 30.0.3
        • Java binary at: D:\android-studio\jre\bin\java
        • Java version OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)
        • All Android licenses accepted.
    
    [√] Chrome - develop for the web
        • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
    
    [√] Visual Studio - develop for Windows (Visual Studio Community 2019 16.11.14)
        • Visual Studio at D:\Microsoft Visual Studio\2019
        • Visual Studio Community 2019 version 16.11.32428.217
        • Windows 10 SDK version 10.0.19041.0
    
    [√] Android Studio (version 4.1)
        • Android Studio at D:\androidstudio
        • Flutter plugin can be installed from:
           https://plugins.jetbrains.com/plugin/9212-flutter
        • Dart plugin can be installed from:
           https://plugins.jetbrains.com/plugin/6351-dart
        • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
    
    [√] Android Studio (version 2021.3)
        • Android Studio at D:\android-studio
        • Flutter plugin can be installed from:
           https://plugins.jetbrains.com/plugin/9212-flutter
        • Dart plugin can be installed from:
           https://plugins.jetbrains.com/plugin/6351-dart
        • Java version OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)
    
    [√] VS Code (version 1.67.2)
        • VS Code at C:\Users\winislose\AppData\Local\Programs\Microsoft VS Code
        • Flutter extension version 3.40.0
    
    [√] Connected device (3 available)
        • Windows (desktop) • windows • windows-x64    • Microsoft Windows [Version 10.0.19044.1706]
        • Chrome (web)      • chrome  • web-javascript • Google Chrome 101.0.4951.67
        • Edge (web)        • edge    • web-javascript • Microsoft Edge 99.0.1150.55
    
    [√] HTTP Host Availability
        • All required HTTP hosts are available
    
    • No issues found!
    
    Reviewed by rokk4 at 2022-05-20 11:09
  • 8. random video freeze when participant disconnects

    description

    when a participant leaves the room, some of the remaining participant may randomly experience a freeze on the video track from a remote participant or from his own stream.

    how to reproduce

    run the client-sdk-flutter/example on three devices (I tried iOS, Android and chrome) join the same room, then make one participant leave. Then check if all video streams are updating on the remaining participants

    if it doesn't occur, rejoin the room on the participant that left, and try again... it will eventually happen.

    btw, the audio is still alive, but the video is frozen, it gets fixed if the "frozen" participant mutes/unmutes his video

    I think it's related to the visibility events being fired

    tested on commit 2b375033e9cb2cd1b7eba2e547248b3b35d3c9d7 livekit-server 0.15.1

    Reviewed by alex-bluetrain at 2021-12-24 16:54
  • 9. video mute/unmute no longer notifies remote participants

    On v0.5.4 when a participant mutes his video, the remote participants don't get the notification event for it.

    the last time I've tested, it was working fine, that was on commit 79a2d2070260ea5bbe1d127bfd6d9f1899c1e982 it broke somewhere between that commit and 0.5.4

    Reviewed by alex-bluetrain at 2021-12-10 11:42
  • 10. Execution failed for task ':flutter_webrtc:compileReleaseJavaWithJavac'.

    Good Day.

    I tried running the plugin from a fresh install of latest dev channel for livekit_client: ^0.5.7.

    * What went wrong:
    Execution failed for task ':flutter_webrtc:compileReleaseJavaWithJavac'.
    > Compilation failed; see the compiler error output for details.
    

    Flutter Doctor

    [✓] Flutter (Channel dev, 2.11.0-0.1.pre, on Ubuntu 18.04.6 LTS 4.15.0-171-generic, locale
        en_PH.UTF-8)
    [!] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
        ✗ Android license status unknown.
          Run `flutter doctor --android-licenses` to accept the SDK licenses.
          See https://flutter.dev/docs/get-started/install/linux#android-setup for more details.
    [✓] Android Studio (version 3.0)
    [✓] IntelliJ IDEA Community Edition (version 2017.2)
    [✓] VS Code (version 1.62.3)
    [✓] Connected device (1 available)
    [✓] HTTP Host Availability
    
    Reviewed by litzbalane2017 at 2022-03-12 07:09
  • 11. Example app crashes when simulcast is enable

    When running example app with enable simulcast, the app goes to room and when enabling video app crashes with this error log:

    I/OMXClient(15574): IOmx service obtained
    I/ACodec  (15574): [OMX.Exynos.VP8.Encoder] Now Loaded
    E/org.webrtc.Logging(15574): HardwareVideoEncoder: initEncodeInternal failed
    E/org.webrtc.Logging(15574): HardwareVideoEncoder: android.media.MediaCodec$CodecException: Error 0xfffffc0e
    E/org.webrtc.Logging(15574): HardwareVideoEncoder: android.media.MediaCodec$CodecException: Error 0xfffffc0e
    E/org.webrtc.Logging(15574): 	at android.media.MediaCodec.native_configure(Native Method)
    E/org.webrtc.Logging(15574): 	at android.media.MediaCodec.configure(MediaCodec.java:2127)
    E/org.webrtc.Logging(15574): 	at android.media.MediaCodec.configure(MediaCodec.java:2043)
    E/org.webrtc.Logging(15574): 	at org.webrtc.MediaCodecWrapperFactoryImpl$MediaCodecWrapperImpl.configure(MediaCodecWrapperFactoryImpl.java:37)
    E/org.webrtc.Logging(15574): 	at org.webrtc.HardwareVideoEncoder.initEncodeInternal(HardwareVideoEncoder.java:260)
    E/org.webrtc.Logging(15574): 	at org.webrtc.HardwareVideoEncoder.initEncode(HardwareVideoEncoder.java:220)
    E/org.webrtc.Logging(15574): 	at com.cloudwebrtc.webrtc.SimulcastVideoEncoderFactoryWrapper$StreamEncoderWrapper$initEncode$future$1.call(SimulcastVideoEncoderFactoryWrapper.kt:107)
    E/org.webrtc.Logging(15574): 	at com.cloudwebrtc.webrtc.SimulcastVideoEncoderFactoryWrapper$StreamEncoderWrapper$initEncode$future$1.call(SimulcastVideoEncoderFactoryWrapper.kt:83)
    E/org.webrtc.Logging(15574): 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    E/org.webrtc.Logging(15574): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    E/org.webrtc.Logging(15574): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    E/org.webrtc.Logging(15574): 	at java.lang.Thread.run(Thread.java:923)
    W/System.err(15574): java.util.concurrent.ExecutionException: java.lang.UnsupportedOperationException: Not implemented.
    W/System.err(15574): 	at java.util.concurrent.FutureTask.report(FutureTask.java:123)
    W/System.err(15574): 	at java.util.concurrent.FutureTask.get(FutureTask.java:193)
    W/System.err(15574): 	at com.cloudwebrtc.webrtc.SimulcastVideoEncoderFactoryWrapper$StreamEncoderWrapper.initEncode(SimulcastVideoEncoderFactoryWrapper.kt:109)
    W/System.err(15574): Caused by: java.lang.UnsupportedOperationException: Not implemented.
    W/System.err(15574): 	at org.webrtc.WrappedNativeVideoEncoder.initEncode(WrappedNativeVideoEncoder.java:22)
    W/System.err(15574): 	at com.cloudwebrtc.webrtc.SimulcastVideoEncoderFactoryWrapper$StreamEncoderWrapper$initEncode$future$1.call(SimulcastVideoEncoderFactoryWrapper.kt:107)
    W/System.err(15574): 	at com.cloudwebrtc.webrtc.SimulcastVideoEncoderFactoryWrapper$StreamEncoderWrapper$initEncode$future$1.call(SimulcastVideoEncoderFactoryWrapper.kt:83)
    W/System.err(15574): 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    W/System.err(15574): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    W/System.err(15574): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    W/System.err(15574): 	at java.lang.Thread.run(Thread.java:923)
    E/rtc     (15574): #
    E/rtc     (15574): # Fatal error in: gen/sdk/android/generated_metrics_jni/../../../../../../sdk/android/src/jni/jni_generator_helper.h, line 94
    E/rtc     (15574): # last system error: 0
    E/rtc     (15574): # Check failed: !env->ExceptionCheck()
    E/rtc     (15574): # 
    F/libc    (15574): Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 20528 (EncoderQueue - ), pid 15574 (livekit.example)
    *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    Build fingerprint: 'samsung/y2sxx/y2s:11/RP1A.200720.012/G985FXXSCDUK2:user/release-keys'
    Revision: '22'
    ABI: 'arm64'
    Timestamp: 2021-11-30 13:48:56+0330
    pid: 15574, tid: 20528, name: EncoderQueue -  >>> io.livekit.example <<<
    uid: 10349
    signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
        x0  0000000000000000  x1  0000000000005030  x2  0000000000000006  x3  000000720126d8b0
        x4  fefefefffefeff2f  x5  fefefefffefeff2f  x6  fefefefffefeff2f  x7  7f7f7f7f7f7f7f7f
        x8  00000000000000f0  x9  e9b94537ea191a79  x10 0000000000000000  x11 ffffffc0fffffbdf
        x12 0000000000000001  x13 00000000000000c2  x14 0000000000000000  x15 000057f67ac3de16
        x16 00000075b57ffc80  x17 00000075b57e1d50  x18 000000720014e000  x19 0000000000003cd6
        x20 0000000000005030  x21 00000000ffffffff  x22 000000721db5dde3  x23 00000000000000f0
        x24 000000000000007d  x25 000000000000000f  x26 0000000000002ff6  x27 0000000000000000
        x28 0000000000000000  x29 000000720126d930
        lr  00000075b5795724  sp  000000720126d890  pc  00000075b5795750  pst 0000000000001000
    backtrace:
          #00 pc 000000000004e750  /apex/com.android.runtime/lib64/bionic/libc.so (abort+164) (BuildId: 47fa1511afbec3da8219bfec53725f93)
          #01 pc 0000000000387c50  /data/app/~~xapS6rSglVMnDJUBLOK2tQ==/io.livekit.example-MxodN8SWB5QlMX3ymPURFA==/lib/arm64/libjingle_peerconnection_so.so (BuildId: bc662912e660ccb2)
          #02 pc 0000000000387be8  /data/app/~~xapS6rSglVMnDJUBLOK2tQ==/io.livekit.example-MxodN8SWB5QlMX3ymPURFA==/lib/arm64/libjingle_peerconnection_so.so (BuildId: bc662912e660ccb2)
          #03 pc 000000000036f688  /data/app/~~xapS6rSglVMnDJUBLOK2tQ==/io.livekit.example-MxodN8SWB5QlMX3ymPURFA==/lib/arm64/libjingle_peerconnection_so.so (BuildId: bc662912e660ccb2)
          #04 pc 000000000036f5ac  /data/app/~~xapS6rSglVMnDJUBLOK2tQ==/io.livekit.example-MxodN8SWB5QlMX3ymPURFA==/lib/arm64/libjingle_peerconnection_so.so (BuildId: bc662912e660ccb2)
          #05 pc 0000000000516dd4  /data/app/~~xapS6rSglVMnDJUBLOK2tQ==/io.livekit.example-MxodN8SWB5QlMX3ymPURFA==/lib/arm64/libjingle_peerconnection_so.so (BuildId: bc662912e660ccb2)
          #06 pc 000000000051b764  /data/app/~~xapS6rSglVMnDJUBLOK2tQ==/io.livekit.example-MxodN8SWB5QlMX3ymPURFA==/lib/arm64/libjingle_peerconnection_so.so (BuildId: bc662912e660ccb2)
          #07 pc 000000000051af00  /data/app/~~xapS6rSglVMnDJUBLOK2tQ==/io.livekit.example-MxodN8SWB5QlMX3ymPURFA==/lib/arm64/libjingle_peerconnection_so.so (BuildId: bc662912e660ccb2)
          #08 pc 00000000006ba760  /data/app/~~xapS6rSglVMnDJUBLOK2tQ==/io.livekit.example-MxodN8SWB5QlMX3ymPURFA==/lib/arm64/libjingle_peerconnection_so.so (BuildId: bc662912e660ccb2)
          #09 pc 000000000078b5e8  /data/app/~~xapS6rSglVMnDJUBLOK2tQ==/io.livekit.example-MxodN8SWB5QlMX3ymPURFA==/lib/arm64/libjingle_peerconnection_so.so (BuildId: bc662912e660ccb2)
          #10 pc 000000000078cfc4  /data/app/~~xapS6rSglVMnDJUBLOK2tQ==/io.livekit.example-MxodN8SWB5QlMX3ymPURFA==/lib/arm64/libjingle_peerconnection_so.so (BuildId: bc662912e660ccb2)
          #11 pc 000000000078ff0c  /data/app/~~xapS6rSglVMnDJUBLOK2tQ==/io.livekit.example-MxodN8SWB5QlMX3ymPURFA==/lib/arm64/libjingle_peerconnection_so.so (BuildId: bc662912e660ccb2)
          #12 pc 00000000006bf2a4  /data/app/~~xapS6rSglVMnDJUBLOK2tQ==/io.livekit.example-MxodN8SWB5QlMX3ymPURFA==/lib/arm64/libjingle_peerconnection_so.so (BuildId: bc662912e660ccb2)
          #13 pc 00000000006c0954  /data/app/~~xapS6rSglVMnDJUBLOK2tQ==/io.livekit.example-MxodN8SWB5QlMX3ymPURFA==/lib/arm64/libjingle_peerconnection_so.so (BuildId: bc662912e660ccb2)
          #14 pc 00000000006bf8a4  /data/app/~~xapS6rSglVMnDJUBLOK2tQ==/io.livekit.example-MxodN8SWB5QlMX3ymPURFA==/lib/arm64/libjingle_peerconnection_so.so (BuildId: bc662912e660ccb2)
          #15 pc 00000000003917fc  /data/app/~~xapS6rSglVMnDJUBLOK2tQ==/io.livekit.example-MxodN8SWB5QlMX3ymPURFA==/lib/arm64/libjingle_peerconnection_so.so (BuildId: bc662912e660ccb2)
          #16 pc 0000000000391704  /data/app/~~xapS6rSglVMnDJUBLOK2tQ==/io.livekit.example-MxodN8SWB5QlMX3ymPURFA==/lib/arm64/libjingle_peerconnection_so.so (BuildId: bc662912e660ccb2)
          #17 pc 00000000000b0228  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+64) (BuildId: 47fa1511afbec3da8219bfec53725f93)
          #18 pc 000000000005070c  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: 47fa1511afbec3da8219bfec53725f93)
    

    this is my flutter doctor log :

    Doctor summary (to see all details, run flutter doctor -v):
    [✓] Flutter (Channel stable, 2.5.3, on macOS 11.5.1 20G80 darwin-arm, locale en)
    [✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    [✓] Xcode - develop for iOS and macOS
    [✓] Chrome - develop for the web
    [✓] Android Studio (version 4.2)
    [✓] Android Studio (version 2020.3)
    [✓] IntelliJ IDEA Ultimate Edition (version 2021.1.2)
    [✓] Connected device (2 available)
    
    • No issues found!
    
    Reviewed by mojtabaghiasi at 2021-11-30 10:28
  • 12. 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.
    
    Reviewed by design2be at 2022-06-22 10:57
  • 13. Data Publish and Events not working Flutter 3

    Good Day.

    I just updated a week ago to Flutter 3. I noticed that publish data is not working anymore. It used to work well before the upgrade. Here is my flutter doctor:

    Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, 3.0.1, on Ubuntu 18.04.6 LTS 4.15.0-177-generic, locale en_PH.UTF-8) [✓] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1) [✗] Linux toolchain - develop for Linux desktop ✗ GTK 3.0 development libraries are required for Linux development. They are likely available from your distribution (e.g.: apt install libgtk-3-dev) [✓] Android Studio (version 2021.1) [✓] IntelliJ IDEA Community Edition (version 2021.3) [✓] VS Code (version 1.62.3) [✓] Connected device (2 available) [✓] HTTP Host Availability

    Can I have confirmation if it is working on your end?

    Reviewed by litzbalane2017 at 2022-06-04 00:35
  • 14. "ConnectException Failed to connect to server" ONLY on iOS with 4G/5G

    First I want to thank you for the dev expierence with livekit, it is really awesome. This project is going to huge. :)

    My issue is, It just won't connect on iOS with celluar, works fine in every other scenario.

    Very strange is that, there is a small chance for it to work, but only after a fresh start of the app. But this happend only 2 or 3 times out of 50-60 trails.

    At first I thought that it was an issue withe the celluar provider (telekom) doing IPv6 only, but changing to regular dual-stack did not solve the issue, and also everything was fine when the IPv6 only uplink was used by other devices via hotspot.

    Versions: flutter_client 0.5.9 iOS 15.4.1

    What did I test:

    LiveKit Connection Test is fine on all devices under all circumstances.

    React Example App in Safari on the iPhone with 4G/5G connection ---> OK React Example App in Safari on the iPhone with Wifi ---- OK

    Flutter Example App on Android Mi A2 with Wifi but from the 4G/5G iPhone hotspot --> OK Flutter Example App on Android Mi A2 Wifi --> OK Flutter Example App on MacOS with Wifi or Ethernet -> OK Flutter Example App on MacOS with Wifi but from the 4G/5G iPhone hotspot -> OK

    Flutter Example App on iPhone with Wifi --> OK Flutter Example App on iPhone with Wifi but 4G uplink from another Androids phone hotspot --> OK Flutter Example App on iPhone with 4G/5G --> ConnectException Failed to connect to server :(

    Steps to reproduce: use example app on iphone with 4G/5G server URLwss://live. txxhexxraxxpy-lxxixxft.net (without the xxs because SEO ...) token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NTQ3ODY4NTAsImlzcyI6IkFQSWFlb0JFeENOdG5CUyIsIm5iZiI6MTY1MjE5NDg1MCwic3ViIjoic2wiLCJ2aWRlbyI6eyJyb29tIjoidGVzdDAxIiwicm9vbUpvaW4iOnRydWV9fQ.7m6xVj3UFXIZfAucgqLjziZEefuX8ZLmgAMPYnEAWVE

    I have attached server and flutter logs, for success and failure cases. flutter_FAIL.txt flutter_SUCCESS.txt server_FAIL.txt server_SUCCESS.txt

    Reviewed by rokk4 at 2022-05-11 20:16
  • 15. publishData results in TimeoutException on mobile platforms

    Problem

    For some reason publishData method of LocalParticipant class fails to send message on mobile platforms (iOS/Android), although it works fine on web: during the connection to the same room participants receive messages sent by users connected with web versions of the app, while messages sent by mobile clients never received by any participant.

    During the debug stage on mobile devices the clicking on send demo data button results in TimeoutException after some delay:

    E/flutter (17084): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: LiveKit Exception TimeoutException Timeout
    

    Reproduce

    This behaviour can be reproduced with the example from this package.

    Additional

    I checked LiveKit deployment with LiveKit Tester (https://livekit.io/connection-test). Everything seems to work fine (all tests passed).

    Flutter version: 2.10.5

    Dart version: 2.16.2

    Reviewed by Parfyonator at 2022-05-10 07:15
  • 16. iOS crash when rotating camera (inputvideo dimensions change while using h264 encoder)

    after running the client-sdk-flutter example, connecting to a room and rotating the device many, many times on different orientations, it randomly crashes with:

    * thread #32, queue = 'com.apple.coremedia.compressionsession.clientcallback', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
        frame #0: 0x0000000104902444 WebRTC`___lldb_unnamed_symbol3987$$WebRTC + 260
    WebRTC`___lldb_unnamed_symbol3987$$WebRTC:
    ->  0x104902444 <+260>: ldr    x8, [x0]
        0x104902448 <+264>: ldr    x8, [x8, #0x10]
        0x10490244c <+268>: add    x1, sp, #0xf98            ; =0xf98 
        0x104902450 <+272>: add    x2, sp, #0x7d0            ; =0x7d0 
    Target 0: (Runner) stopped.
    
    here's the full output when running it from xcode:
    WebRTC`___lldb_unnamed_symbol3987$$WebRTC:
        0x102c3e340 <+0>:   stp    x22, x21, [sp, #-0x30]!
        0x102c3e344 <+4>:   stp    x20, x19, [sp, #0x10]
        0x102c3e348 <+8>:   stp    x29, x30, [sp, #0x20]
        0x102c3e34c <+12>:  add    x29, sp, #0x20            ; =0x20 
        0x102c3e350 <+16>:  sub    sp, sp, #0x1, lsl #12     ; =0x1000 
        0x102c3e354 <+20>:  sub    sp, sp, #0xb0             ; =0xb0 
        0x102c3e358 <+24>:  mov    x20, x2
        0x102c3e35c <+28>:  mov    x21, x0
        0x102c3e360 <+32>:  adrp   x8, 1758
        0x102c3e364 <+36>:  ldr    x8, [x8, #0x248]
        0x102c3e368 <+40>:  ldr    x8, [x8]
        0x102c3e36c <+44>:  stur   x8, [x29, #-0x28]
        0x102c3e370 <+48>:  bl     0x102c3f434               ; ___lldb_unnamed_symbol4055$$WebRTC
        0x102c3e374 <+52>:  mov    x19, x0
        0x102c3e378 <+56>:  mov    x0, x20
        0x102c3e37c <+60>:  bl     0x1031c7c60               ; symbol stub for: objc_retain
        0x102c3e380 <+64>:  mov    x20, x0
        0x102c3e384 <+68>:  adrp   x1, 1426
        0x102c3e388 <+72>:  add    x1, x1, #0xff8            ; =0xff8 
        0x102c3e38c <+76>:  add    x0, sp, #0xf98            ; =0xf98 
        0x102c3e390 <+80>:  mov    w2, #0x110
        0x102c3e394 <+84>:  bl     0x1031c7ad4               ; symbol stub for: memcpy
        0x102c3e398 <+88>:  cbz    x19, 0x102c3e3b4          ; <+116>
        0x102c3e39c <+92>:  adrp   x8, 1850
        0x102c3e3a0 <+96>:  ldr    x1, [x8, #0x3d8]
        0x102c3e3a4 <+100>: add    x8, sp, #0xf98            ; =0xf98 
        0x102c3e3a8 <+104>: mov    x0, x19
        0x102c3e3ac <+108>: bl     0x1031c7c3c               ; symbol stub for: objc_msgSend
        0x102c3e3b0 <+112>: b      0x102c3e3c0               ; <+128>
        0x102c3e3b4 <+116>: add    x0, sp, #0xf98            ; =0xf98 
        0x102c3e3b8 <+120>: mov    w1, #0x110
        0x102c3e3bc <+124>: bl     0x1031c7528               ; symbol stub for: bzero
        0x102c3e3c0 <+128>: add    x0, sp, #0x7d0            ; =0x7d0 
        0x102c3e3c4 <+132>: mov    w1, #0xaa
        0x102c3e3c8 <+136>: mov    w2, #0x7c8
        0x102c3e3cc <+140>: bl     0x1031c7aec               ; symbol stub for: memset
        0x102c3e3d0 <+144>: add    x0, sp, #0x7d0            ; =0x7d0 
        0x102c3e3d4 <+148>: bl     0x102d28608               ; webrtc::CodecSpecificInfo::CodecSpecificInfo()
        0x102c3e3d8 <+152>: adrp   x8, 1851
        0x102c3e3dc <+156>: ldr    x0, [x8, #0xa78]
        0x102c3e3e0 <+160>: adrp   x8, 1850
        0x102c3e3e4 <+164>: ldr    x1, [x8, #0x1e0]
        0x102c3e3e8 <+168>: bl     0x1031c7c3c               ; symbol stub for: objc_msgSend
        0x102c3e3ec <+172>: mov    x2, x0
        0x102c3e3f0 <+176>: adrp   x8, 1850
        0x102c3e3f4 <+180>: ldr    x1, [x8, #0x1e8]
        0x102c3e3f8 <+184>: mov    x0, x20
        0x102c3e3fc <+188>: bl     0x1031c7c3c               ; symbol stub for: objc_msgSend
        0x102c3e400 <+192>: cbz    w0, 0x102c3e440           ; <+256>
        0x102c3e404 <+196>: cbz    x20, 0x102c3e420          ; <+224>
        0x102c3e408 <+200>: adrp   x8, 1850
        0x102c3e40c <+204>: ldr    x1, [x8, #0x3e0]
        0x102c3e410 <+208>: add    x8, sp, #0x8              ; =0x8 
        0x102c3e414 <+212>: mov    x0, x20
        0x102c3e418 <+216>: bl     0x1031c7c3c               ; symbol stub for: objc_msgSend
        0x102c3e41c <+220>: b      0x102c3e42c               ; <+236>
        0x102c3e420 <+224>: add    x0, sp, #0x8              ; =0x8 
        0x102c3e424 <+228>: mov    w1, #0x7c8
        0x102c3e428 <+232>: bl     0x1031c7528               ; symbol stub for: bzero
        0x102c3e42c <+236>: add    x0, sp, #0x7d0            ; =0x7d0 
        0x102c3e430 <+240>: add    x1, sp, #0x8              ; =0x8 
        0x102c3e434 <+244>: bl     0x102c3e4f0               ; ___lldb_unnamed_symbol3988$$WebRTC
        0x102c3e438 <+248>: add    x0, sp, #0x8              ; =0x8 
        0x102c3e43c <+252>: bl     0x102d28698               ; webrtc::CodecSpecificInfo::~CodecSpecificInfo()
        0x102c3e440 <+256>: ldr    x0, [x21, #0x20]
    ->  0x102c3e444 <+260>: ldr    x8, [x0]                                    = Thread 6: EXC_BAD_ACCESS (code=1, address=0x0)
        0x102c3e448 <+264>: ldr    x8, [x8, #0x10]
        0x102c3e44c <+268>: add    x1, sp, #0xf98            ; =0xf98 
        0x102c3e450 <+272>: add    x2, sp, #0x7d0            ; =0x7d0 
        0x102c3e454 <+276>: blr    x8
        0x102c3e458 <+280>: cmp    w0, #0x0                  ; =0x0 
        0x102c3e45c <+284>: cset   w21, eq
        0x102c3e460 <+288>: add    x0, sp, #0x7d0            ; =0x7d0 
        0x102c3e464 <+292>: bl     0x102d28698               ; webrtc::CodecSpecificInfo::~CodecSpecificInfo()
        0x102c3e468 <+296>: add    x0, sp, #0xf98            ; =0xf98 
        0x102c3e46c <+300>: bl     0x102d0c708               ; webrtc::EncodedImage::~EncodedImage()
        0x102c3e470 <+304>: bl     0x102c3f350               ; ___lldb_unnamed_symbol4038$$WebRTC
        0x102c3e474 <+308>: bl     0x102c3f360               ; ___lldb_unnamed_symbol4040$$WebRTC
        0x102c3e478 <+312>: ldur   x8, [x29, #-0x28]
        0x102c3e47c <+316>: adrp   x9, 1758
        0x102c3e480 <+320>: ldr    x9, [x9, #0x248]
        0x102c3e484 <+324>: ldr    x9, [x9]
        0x102c3e488 <+328>: cmp    x9, x8
        0x102c3e48c <+332>: b.ne   0x102c3e4a4               ; <+356>
        0x102c3e490 <+336>: mov    x0, x21
        0x102c3e494 <+340>: add    sp, sp, #0x1, lsl #12     ; =0x1000 
        0x102c3e498 <+344>: add    sp, sp, #0xb0             ; =0xb0 
        0x102c3e49c <+348>: ldp    x29, x30, [sp, #0x20]
        0x102c3e4a0 <+352>: b      0x102c3f404               ; ___lldb_unnamed_symbol4051$$WebRTC
        0x102c3e4a4 <+356>: bl     0x1031c74b0               ; symbol stub for: __stack_chk_fail
        0x102c3e4a8 <+360>: b      0x102c3e4d0               ; <+400>
        0x102c3e4ac <+364>: mov    x21, x0
        0x102c3e4b0 <+368>: add    x0, sp, #0x8              ; =0x8 
        0x102c3e4b4 <+372>: bl     0x102d28698               ; webrtc::CodecSpecificInfo::~CodecSpecificInfo()
        0x102c3e4b8 <+376>: b      0x102c3e4d4               ; <+404>
        0x102c3e4bc <+380>: mov    x21, x0
        0x102c3e4c0 <+384>: b      0x102c3e4e4               ; <+420>
        0x102c3e4c4 <+388>: b      0x102c3e4d0               ; <+400>
        0x102c3e4c8 <+392>: mov    x21, x0
        0x102c3e4cc <+396>: b      0x102c3e4dc               ; <+412>
        0x102c3e4d0 <+400>: mov    x21, x0
        0x102c3e4d4 <+404>: add    x0, sp, #0x7d0            ; =0x7d0 
        0x102c3e4d8 <+408>: bl     0x102d28698               ; webrtc::CodecSpecificInfo::~CodecSpecificInfo()
        0x102c3e4dc <+412>: add    x0, sp, #0xf98            ; =0xf98 
        0x102c3e4e0 <+416>: bl     0x102d0c708               ; webrtc::EncodedImage::~EncodedImage()
        0x102c3e4e4 <+420>: bl     0x102c3f350               ; ___lldb_unnamed_symbol4038$$WebRTC
        0x102c3e4e8 <+424>: bl     0x102c3f360               ; ___lldb_unnamed_symbol4040$$WebRTC
        0x102c3e4ec <+428>: bl     0x102c3f3a4               ; ___lldb_unnamed_symbol4045$$WebRTC
    

    tested on client-sdk-flutter commit 435def8f2c78aefd3b0eae06c6922857e8ee48d2 compiled with Flutter stable 2.5.3, Xcode 12.5.1 on MacOS Big Sur 11.0.1 running on iPhone 6s iOS 14.8

    Reviewed by alex-bluetrain at 2021-12-20 01:15

Related

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

Jun 16, 2022
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.

May 31, 2022
YoYo Video Player is a HLS(.m3u8) video player for flutter.
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

Jun 18, 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.

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.

Jun 7, 2022
Flutter plugin that can support audio recording and level metering
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

Jun 16, 2022
Flutter plugin for sound. Audio recorder and player.
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

Jun 28, 2022
A Flutter audio-plugin to playing and recording sounds
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

May 19, 2022
Flutter plugin for sound. Audio recorder and player.
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

May 5, 2022
A Flutter package for both android and iOS which provides Audio recorder
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

Jun 28, 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.

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.

Jun 13, 2022
Just_audio: a feature-rich audio player for Android, iOS, macOS and web
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

Feb 2, 2022
A opensource, minimal and powerful audio player for android

A opensource, minimal and powerful audio player for android

Jun 22, 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

May 5, 2022
Virlow Flutter Recorder - an open-source Flutter application that can transcribe recorded audio
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.

Jun 1, 2022
Play simultaneously music/audio from assets/network/file directly from Flutter, compatible with android / ios / web / macos, displays notifications
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

Jun 29, 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

Jan 1, 2022
A feature-packed audio recorder app built using Flutter
A feature-packed audio recorder app built using Flutter

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

Jun 6, 2022
Audio Input Mixer made in Flutter (UI only)
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

Apr 1, 2021
Audio classification Tflite package for flutter (iOS & Android).
Audio classification Tflite package for flutter (iOS & Android).

Audio classification Tflite package for flutter (iOS & Android). Can also support Google Teachable Machine models.

Jun 14, 2022