Giter VIP home page Giter VIP logo

client-sdk-flutter's Introduction

The LiveKit icon, the name of the repository and some sample code in the background.

LiveKit: Real-time video, audio and data for developers

LiveKit is an open source project that provides scalable, multi-user conferencing based on WebRTC. It's designed to provide everything you need to build real-time video audio data capabilities in your applications.

LiveKit's server is written in Go, using the awesome Pion WebRTC implementation.

GitHub stars Slack community Twitter Follow GitHub release (latest SemVer) GitHub Workflow Status License

Features

Documentation & Guides

https://docs.livekit.io

Live Demos

Ecosystem

  • Agents: build real-time multimodal AI applications with programmable backend participants
  • Egress: record or multi-stream rooms and export individual tracks
  • Ingress: ingest streams from external sources like RTMP, WHIP, HLS, or OBS Studio

SDKs & Tools

Client SDKs

Client SDKs enable your frontend to include interactive, multi-user experiences.

Language Repo Declarative UI Links
JavaScript (TypeScript) client-sdk-js React docs | JS example | React example
Swift (iOS / MacOS) client-sdk-swift Swift UI docs | example
Kotlin (Android) client-sdk-android Compose docs | example | Compose example
Flutter (all platforms) client-sdk-flutter native docs | example
Unity WebGL client-sdk-unity-web docs
React Native (beta) client-sdk-react-native native
Rust client-sdk-rust

Server SDKs

Server SDKs enable your backend to generate access tokens, call server APIs, and receive webhooks. In addition, the Go SDK includes client capabilities, enabling you to build automations that behave like end-users.

Language Repo Docs
Go server-sdk-go docs
JavaScript (TypeScript) server-sdk-js docs
Ruby server-sdk-ruby
Java (Kotlin) server-sdk-kotlin
Python (community) python-sdks
PHP (community) agence104/livekit-server-sdk-php

Tools

Install

Tip

We recommend installing LiveKit CLI along with the server. It lets you access server APIs, create tokens, and generate test traffic.

The following will install LiveKit's media server:

MacOS

brew install livekit

Linux

curl -sSL https://get.livekit.io | bash

Windows

Download the latest release here

Getting Started

Starting LiveKit

Start LiveKit in development mode by running livekit-server --dev. It'll use a placeholder API key/secret pair.

API Key: devkey
API Secret: secret

To customize your setup for production, refer to our deployment docs

Creating access token

A user connecting to a LiveKit room requires an access token. Access tokens (JWT) encode the user's identity and the room permissions they've been granted. You can generate a token with our CLI:

livekit-cli create-token \
    --api-key devkey --api-secret secret \
    --join --room my-first-room --identity user1 \
    --valid-for 24h

Test with example app

Head over to our example app and enter a generated token to connect to your LiveKit server. This app is built with our React SDK.

Once connected, your video and audio are now being published to your new LiveKit instance!

Simulating a test publisher

livekit-cli join-room \
    --url ws://localhost:7880 \
    --api-key devkey --api-secret secret \
    --room my-first-room --identity bot-user1 \
    --publish-demo

This command publishes a looped demo video to a room. Due to how the video clip was encoded (keyframes every 3s), there's a slight delay before the browser has sufficient data to begin rendering frames. This is an artifact of the simulation.

Deployment

Use LiveKit Cloud

LiveKit Cloud is the fastest and most reliable way to run LiveKit. Every project gets free monthly bandwidth and transcoding credits.

Sign up for LiveKit Cloud.

Self-host

Read our deployment docs for more information.

Building from source

Pre-requisites:

  • Go 1.20+ is installed
  • GOPATH/bin is in your PATH

Then run

git clone https://github.com/livekit/livekit
cd livekit
./bootstrap.sh
mage

Contributing

We welcome your contributions toward improving LiveKit! Please join us on Slack to discuss your ideas and/or PRs.

License

LiveKit server is licensed under Apache License v2.0.


LiveKit Ecosystem
Real-time SDKsReact Components · JavaScript · iOS/macOS · Android · Flutter · React Native · Rust · Python · Unity (web) · Unity (beta)
Server APIsNode.js · Golang · Ruby · Java/Kotlin · Python · Rust · PHP (community)
Agents FrameworksPython · Playground
ServicesLivekit server · Egress · Ingress · SIP
ResourcesDocs · Example apps · Cloud · Self-hosting · CLI

client-sdk-flutter's People

Contributors

alex-bluetrain avatar ashellunts avatar cloudwebrtc avatar david-avetikov avatar davidliu avatar davidzhao avatar dsa avatar hiroshihorie avatar jascodes avatar jdde avatar jezell avatar knoapp avatar lambiengcode avatar moham96 avatar mostcute avatar niucho avatar ocupe avatar talksik avatar td-famedly avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

client-sdk-flutter's Issues

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

flutter example can not work with livekit-cli

what happend

flutter example will broken when use livekit-cli publish a h264 file.

2022-02-17-170406_1920x1080_scrot

what did i do

  1. run livekit-server
LIVEKIT_KEYS="<key>: <secret>" ./bin/livekit-server --dev
  1. run flutter example in chrome and connect to server
cd client-sdk-flutter-0.5.6/example
flutter run
  1. use livekit-cli to publish h264 file
livekit-cli join-room --api-key <key> --api-secret <secret> -room room1 --identity 173af7c0-8a50-11ec-af69-af12c83724a1 --publish output.h264

h264 file generated by ffmpeg

ffmpeg -y -re -f lavfi -i testsrc=duration=60:size=720x1080:rate=25:decimals=4 -vcodec libx264 -r:v 25 output.h264

Version

livekit-cli

$ livekit-cli --version
livekit-cli version 0.6.6

livekit-server

$ ./bin/livekit-server --version
livekit-server version 0.15.4

client-sdk-flutter: 0.5.6

Other

i run with client-sdk-js, and it work.

But how can i run flutter example normally with livekit-cli

2022-02-17-172046_1920x1080_scrot

flutter run output

Launching lib/main.dart on Chrome in debug mode...
Waiting for connection from debug service on Chrome...             22.7s
This app is linked to the debug service: ws://127.0.0.1:46627/SMHlp3bbfsA=/ws
Debug service listening on ws://127.0.0.1:46627/SMHlp3bbfsA=/ws

💪 Running with sound null safety 💪

🔥  To hot restart changes while running, press "r" or "R".
For a more detailed help message, press "h". To quit, press "q".

An Observatory debugger and profiler on Chrome is available at: http://127.0.0.1:46627/SMHlp3bbfsA=
The Flutter DevTools debugger and profiler on Chrome is available at: http://127.0.0.1:9100?uri=http://127.0.0.1:46627/SMHlp3bbfsA=
Error: Assertion failed: org-dartlang-sdk:///flutter_web_sdk/lib/_engine/engine/keyboard_binding.dart:352:16
result != null
"Invalid modifier location: Control, 0"
    at Object.throw_ [as throw] (http://localhost:44665/dart_sdk.js:5067:11)
    at Object.assertFailed (http://localhost:44665/dart_sdk.js:4992:15)
    at http://localhost:44665/dart_sdk.js:170075:39
    at _engine.KeyboardConverter.new.[_handleEvent] (http://localhost:44665/dart_sdk.js:170081:25)
    at _engine.KeyboardConverter.new.handleEvent (http://localhost:44665/dart_sdk.js:170168:27)
    at http://localhost:44665/dart_sdk.js:169808:76
    at loggedHandler (http://localhost:44665/dart_sdk.js:169785:18)
Error: Assertion failed: org-dartlang-sdk:///flutter_web_sdk/lib/_engine/engine/keyboard_binding.dart:352:16
result != null
"Invalid modifier location: Control, 0"
    at Object.throw_ [as throw] (http://localhost:44665/dart_sdk.js:5067:11)
    at Object.assertFailed (http://localhost:44665/dart_sdk.js:4992:15)
    at http://localhost:44665/dart_sdk.js:170075:39
    at _engine.KeyboardConverter.new.[_handleEvent] (http://localhost:44665/dart_sdk.js:170081:25)
    at _engine.KeyboardConverter.new.handleEvent (http://localhost:44665/dart_sdk.js:170168:27)
    at http://localhost:44665/dart_sdk.js:169809:74
    at loggedHandler (http://localhost:44665/dart_sdk.js:169785:18)
Connecting with url: ws://localhost:7880, token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDUwOTIxMjgsImlzcyI6IkFQSVZVTDlHSGdZWGdlayIsImp0aSI6IjE3M2FmN2MwLThhNTAtMTFlYy1hZjY5LWFmMTJjODM3MjRkMiIsIm5iZiI6MTY0NTA4ODUyOCwic3ViIjoiMTczYWY3YzAtOGE1MC0xMWVjLWFmNjktYWYxMmM4MzcyNGQyIiwidmlkZW8iOnsicm9vbSI6InJvb20xIiwicm9vbUpvaW4iOnRydWV9fQ.SzndFlvveY1YbCHn1cvEK3KNK4hJtMklBJhaVYyzCX8...
17:03:40: [SignalEvent] Instance of 'SignalConnectedEvent'
17:03:40: onConnected subscriberPrimary: true, serverVersion: 0.15.4, iceServers: [urls: stun:stun.l.google.com:19302
urls: stun:stun1.l.google.com:19302
]
17:03:40: [PCTransport] creating {sdpSemantics: unified-plan, iceServers: [{urls: [stun:stun.l.google.com:19302, stun:stun1.l.google.com:19302]}]}
17:03:40: [PCTransport] creating {sdpSemantics: unified-plan, iceServers: [{urls: [stun:stun.l.google.com:19302, stun:stun1.l.google.com:19302]}]}
17:03:40: EventsListener<SignalEvent>#630597533 event was cancelled by func
17:03:40: Connected to LiveKit server, version: 0.15.4
17:03:40: Waiting to engine connect...
17:03:40: [SignalEvent] Instance of 'SignalOfferEvent'
17:03:40: [Engine#68236561] Received server offer(type: offer, null)
17:03:40: [SignalEvent] Instance of 'SignalTrickleEvent'
17:03:40: [SignalEvent] Instance of 'SignalTrickleEvent'
17:03:40: Created answer
17:03:40: got ICE candidate from peer
17:03:40: pc.getRemoteDescription Instance of 'RTCSessionDescription'
17:03:40: got ICE candidate from peer
17:03:40: pc.getRemoteDescription Instance of 'RTCSessionDescription'
17:03:40: [EngineEvent] Engine#68236561 EngineSubscriberIceStateUpdatedEvent(state: RTCIceConnectionState.RTCIceConnectionStateChecking, isPrimary: true)
17:03:40: subscriber onIceCandidate
17:03:40: subscriber onIceCandidate
17:03:40: [EngineEvent] Engine#68236561 EngineSubscriberIceStateUpdatedEvent(state: RTCIceConnectionState.RTCIceConnectionStateConnected, isPrimary: true)
17:03:40: [EngineEvent] Engine#68236561 Instance of 'EngineConnectedEvent'
17:03:40: EventsListener<EngineEvent>#861366913 event was cancelled by func
17:03:40: Room Connect completed
17:03:41: Server opened DC label: _reliable
17:03:41: Server opened DC label: _lossy
17:03:45: [SignalEvent] Instance of 'SignalConnectionQualityUpdateEvent'
17:03:45: [EngineEvent] Engine#68236561 Instance of 'SignalConnectionQualityUpdateEvent'
17:03:45: [ParticipantEvent] Instance of 'ParticipantConnectionQualityUpdatedEvent', will notifyListeners()
17:03:45: [RoomEvent] Instance of 'ParticipantConnectionQualityUpdatedEvent', will notifyListeners()
17:03:50: [SignalEvent] Instance of 'SignalParticipantUpdateEvent'
17:03:50: [EngineEvent] Engine#68236561 Instance of 'SignalParticipantUpdateEvent'
17:03:50: RemoteParticipant.updateFromInfo(info: sid: PA_TCeYwFpoFVCP
identity: 173af7c0-8a50-11ec-af69-af12c83724d0
state: ACTIVE
joinedAt: 1645088630
10: 6
)
17:03:50: [RoomEvent] Instance of 'ParticipantConnectedEvent', will notifyListeners()
17:03:50: [SignalEvent] Instance of 'SignalConnectionQualityUpdateEvent'
17:03:50: [EngineEvent] Engine#68236561 Instance of 'SignalConnectionQualityUpdateEvent'
17:03:51: [SignalEvent] Instance of 'SignalParticipantUpdateEvent'
17:03:51: [EngineEvent] Engine#68236561 Instance of 'SignalParticipantUpdateEvent'
17:03:51: RemoteParticipant.updateFromInfo(info: sid: PA_TCeYwFpoFVCP
identity: 173af7c0-8a50-11ec-af69-af12c83724d0
state: ACTIVE
tracks: {
  sid: TR_UCAaqMsEmWDW
  type: VIDEO
  name: output.h264
  mimeType: video/H264
12: [48]
}
joinedAt: 1645088630
10: 7
)
17:03:51: RemoteTrackPublication.updateFromInfo sid: TR_UCAaqMsEmWDW muted: false
17:03:51: RemoteTrackPublication.init track: null, info: sid: TR_UCAaqMsEmWDW
type: VIDEO
name: output.h264
mimeType: video/H264
12: [48]

17:03:51: RemoteTrackPublication.updateTrack track: null
17:03:51: [ParticipantEvent] Instance of 'TrackPublishedEvent', will notifyListeners()
17:03:51: [RoomEvent] Instance of 'TrackPublishedEvent', will notifyListeners()
17:03:51: [SignalEvent] Instance of 'SignalOfferEvent'
17:03:51: [Engine#68236561] Received server offer(type: offer, RTCSignalingState.RTCSignalingStateStable)
17:03:51: [WebRTC] pc.onTrack
17:03:51: [EngineEvent] Engine#68236561 Instance of 'EngineTrackAddedEvent'
17:03:51: EngineTrackAddedEvent trackSid:TR_UCAaqMsEmWDW
17:03:51: addSubscribedMediaTrack()
17:03:51: RemoteVideoTrack#270000457.start()
17:03:51: RemoteVideoTrack#270000457.enable() enabling MediaStreamTrackWeb#803177966...
17:03:51: RemoteTrackPublication.updateTrack track: Instance of 'RemoteVideoTrack'
17:03:51: [ParticipantEvent] Instance of 'TrackSubscribedEvent', will notifyListeners()
17:03:51: [RoomEvent] Instance of 'TrackSubscribedEvent', will notifyListeners()
17:03:51: Created answer
17:03:51: [SignalEvent] Instance of 'SignalStreamStateUpdatedEvent'
17:03:51: [EngineEvent] Engine#68236561 Instance of 'SignalStreamStateUpdatedEvent'
video track TR_UCAaqMsEmWDW subscribed true muted false
video track TR_UCAaqMsEmWDW subscribed true muted false
17:03:55: [SignalEvent] Instance of 'SignalConnectionQualityUpdateEvent'
17:03:55: [EngineEvent] Engine#68236561 Instance of 'SignalConnectionQualityUpdateEvent'
17:03:55: [ParticipantEvent] Instance of 'ParticipantConnectionQualityUpdatedEvent', will notifyListeners()
17:03:55: [RoomEvent] Instance of 'ParticipantConnectionQualityUpdatedEvent', will notifyListeners()
video track TR_UCAaqMsEmWDW subscribed true muted false
video track TR_UCAaqMsEmWDW subscribed true muted false

Application finished.

validate uri constructed wrongly

In logs on my livekit server, I just saw a GET request to /validate. The request was made by the flutter client. The bug is that there is no such handler for /validate. If you look in the server at https://github.com/livekit/livekit-server/blob/61655c6ff05625ecd86557711cec38a4a9f7167d/pkg/service/server.go#L91 you see it's /rtc/validate.

Looking at buildUri, the logic going on there seems far from obvious to me, but it looks to me like it could never construct /rtc/validate.

Unfortunately this sort of bug is very hard to spot because of the way Go's http mux works. What will be happening is that the mux finds the health check handler for / and passes the request to that. It would probably be preferable to remove any / handler and instead have a specific /healthcheck so that this sort of bug becomes more obvious.

For now, I've just hacked my local copy of the server to call the validation handler on both uris, because I don't know whether the correct uri should be /rtc/validate or /validate and I've not checked all the other clients.

CocoaPods could not find compatible versions for pod "WebRTC-SDK":

Getting Below error with livekit latest version 0.5.5 in IOS simulator

[!] CocoaPods could not find compatible versions for pod "WebRTC-SDK":
In Podfile:
flutter_webrtc (from .symlinks/plugins/flutter_webrtc/ios) was resolved to 0.7.1, which depends on
WebRTC-SDK (= 93.4577.01)

livekit_client (from `.symlinks/plugins/livekit_client/ios`) was resolved to 0.5.5, which depends on
  WebRTC-SDK (~> 92.4515)

Solution -

Works fine after upgrading flutter webrtc version and changing client pod spec file as below.

pubspec.yml -> flutter_webrtc: ^0.8.1
livekit_client.podspec-> s.dependency 'WebRTC-SDK', '~> 93.4577.01'

So please bump flutter webrtc version .

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 435def8
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

microphone not published on windows build

When building or running on windows, the localAudioTrack (microphone) doesn't get published.

it doesn't show any errors or warnings, it just doesn't work.

I've tried with LocalAudioTrack.create() + localParticipant.publishAudioTrack()
and also with just the localParticipant.setMicrophoneEnabled(true);

same results.

to reproduce: just run or build the example provided in client-sdk-flutter and check the published audio tracks on the room.

tested on 0.5.5

android: example app doesn't show remote participants video track

when running the example app in android, the remote participants can be heard but not seen.
the remote video track appears as if it was muted.

even if the remote participant mutes/unmutes his video or switches camera, it's never seen on the android app.

btw, the chrome version of the app can see the android video stream without problem.

this was tested on
client-sdk-flutter commit 28e7091
livekit-server commit c00d799ac6ebcfbdf32b48c886801f968a4e62c6

Says could not publish video: LiveKit Exception TrackPublishException Failed to publish track

problem

could not publish video: LiveKit Exception TrackPublishException Failed to publish track

version

  1. livekit_client: 0.5.9
  2. iOS 14.4.2
  3. iPhone 12
  4. it was NOT happening on iOS 12.5.5 of iPhone 6

log

2022-04-22 13:33:02.387701+0800 Runner[3250:794315] flutter: could not publish video: LiveKit Exception TrackPublishException Failed to publish track

full log

2022-04-22 13:32:49.261230+0800 Runner[3250:794315] flutter: 13:32:49: Engine ConnectionState disconnected -> connecting
2022-04-22 13:32:49.264811+0800 Runner[3250:794315] flutter: 13:32:49: [EngineEvent] Engine#55839818 EngineConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null)
2022-04-22 13:32:49.272098+0800 Runner[3250:794315] flutter: 13:32:49: SignalClient connecting with url: wss://hidden/rtc?access_token=hidden&auto_subscribe=1&protocol=7&sdk=flutter&version=0.5.9&os=iOS&os_version=14.4.2&device_model=iPhone13%2C2
2022-04-22 13:32:49.272261+0800 Runner[3250:794315] flutter: 13:32:49: SignalClient ConnectionState disconnected -> connecting
2022-04-22 13:32:49.272613+0800 Runner[3250:794315] flutter: 13:32:49: [SignalClient#782359492] cleanUp()
2022-04-22 13:32:49.272708+0800 Runner[3250:794315] flutter: 13:32:49: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: connecting, didReconnect: false, disconnectReason: null)
2022-04-22 13:32:49.273946+0800 Runner[3250:794315] flutter: 13:32:49: [WebSocketIO] Connecting(uri: wss://hidden/rtc?access_token=hidden&auto_subscribe=1&protocol=7&sdk=flutter&version=0.5.9&os=iOS&os_version=14.4.2&device_model=iPhone13%2C2)...
2022-04-22 13:32:49.328255+0800 Runner[3250:794315] flutter: 13:32:49: [WebSocketIO] Connected
2022-04-22 13:32:49.328683+0800 Runner[3250:794315] flutter: 13:32:49: SignalClient ConnectionState connecting -> connected
2022-04-22 13:32:49.329019+0800 Runner[3250:794315] flutter: 13:32:49: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: connected, didReconnect: false, disconnectReason: null)
2022-04-22 13:32:49.341584+0800 Runner[3250:794315] flutter: 13:32:49: [SignalEvent] Instance of 'SignalJoinResponseEvent'
2022-04-22 13:32:49.342976+0800 Runner[3250:794315] flutter: 13:32:49: onConnected subscriberPrimary: true, serverVersion: 0.15.6, iceServers: [urls: turn:hidden?transport=udp
urls: turns:hidden?transport=tcp
username: 2022-04-22T13:32:49.329420348+08:00
credential: xhsowe4BUGZoaYMVHnBibbu8Cv14CEBUXZqNkIeDjkS
]
2022-04-22 13:32:49.344564+0800 Runner[3250:794315] flutter: 13:32:49: [PCTransport] creating {sdpSemantics: unified-plan, iceServers: [{urls: [turn:hidden?transport=udp, turns:hidden?transport=tcp], username: 2022-04-22T13:32:49.329420348+08:00, credential: 2022-04-22T13:32:49.329420348+08:00}]}
2022-04-22 13:32:49.346311+0800 Runner[3250:794315] flutter: 13:32:49: [Engine] Received JoinResponse, serverVersion: 0.15.6
2022-04-22 13:32:49.348136+0800 Runner[3250:794315] flutter: 13:32:49: Room Connect completed
2022-04-22 13:32:49.348374+0800 Runner[3250:794315] flutter: 13:32:49: [ParticipantEvent] ParticipantMetadataUpdatedEvent(participant: LocalParticipant(sid: PA_VbHvhdGGzkmB, identity: player9)), will notifyListeners()
2022-04-22 13:32:49.348530+0800 Runner[3250:794315] flutter: 13:32:49: [RoomEvent] ParticipantMetadataUpdatedEvent(participant: LocalParticipant(sid: PA_VbHvhdGGzkmB, identity: player9)), will notifyListeners()
2022-04-22 13:32:49.348650+0800 Runner[3250:794315] flutter: 13:32:49: [ParticipantEvent] ParticipantPermissionsUpdatedEvent(participant: LocalParticipant(sid: PA_VbHvhdGGzkmB, identity: player9), permissions: Instance of 'ParticipantPermissions'), will notifyListeners()
2022-04-22 13:32:49.348686+0800 Runner[3250:794315] flutter: 13:32:49: [RoomEvent] ParticipantPermissionsUpdatedEvent(participant: LocalParticipant(sid: PA_VbHvhdGGzkmB, identity: player9), permissions: Instance of 'ParticipantPermissions'), will notifyListeners()
2022-04-22 13:32:49.349739+0800 Runner[3250:794315] flutter: 13:32:49: [SignalEvent] Instance of 'SignalTokenUpdatedEvent'
2022-04-22 13:32:49.358074+0800 Runner[3250:794315] flutter: 13:32:49: [PCTransport] creating {sdpSemantics: unified-plan, iceServers: [{urls: [turn:hidden?transport=udp, turns:hidden?transport=tcp], username: 2022-04-22T13:32:49.329420348+08:00, credential: 2022-04-22T13:32:49.329420348+08:00}]}
2022-04-22 13:32:49.363145+0800 Runner[3250:794315] flutter: 13:32:49: EventsListener<SignalEvent>#453412181 event was cancelled by func
2022-04-22 13:32:49.363216+0800 Runner[3250:794315] flutter: 13:32:49: Waiting for engine to connect...
2022-04-22 13:32:49.363335+0800 Runner[3250:794315] flutter: 13:32:49: Server refreshed the token
2022-04-22 13:32:49.476668+0800 Runner[3250:794315] flutter: 13:32:49: [SignalEvent] Instance of 'SignalOfferEvent'
2022-04-22 13:32:49.477488+0800 Runner[3250:794315] flutter: 13:32:49: [Engine#55839818] Received server offer(type: offer, null)
2022-04-22 13:32:49.480574+0800 Runner[3250:794315] flutter: 13:32:49: [SignalEvent] Instance of 'SignalTrickleEvent'
2022-04-22 13:32:49.481080+0800 Runner[3250:794315] flutter: 13:32:49: [SignalEvent] Instance of 'SignalTrickleEvent'
2022-04-22 13:32:49.481528+0800 Runner[3250:794315] flutter: 13:32:49: [SignalEvent] Instance of 'SignalTrickleEvent'
2022-04-22 13:32:49.482780+0800 Runner[3250:794315] flutter: 13:32:49: [SignalEvent] Instance of 'SignalTrickleEvent'
2022-04-22 13:32:49.483374+0800 Runner[3250:794315] flutter: 13:32:49: Created answer
2022-04-22 13:32:49.492582+0800 Runner[3250:794315] flutter: 13:32:49: got ICE candidate from peer
2022-04-22 13:32:49.493864+0800 Runner[3250:794315] flutter: 13:32:49: subscriber onIceCandidate
2022-04-22 13:32:49.494549+0800 Runner[3250:794315] flutter: 13:32:49: subscriber onIceCandidate
2022-04-22 13:32:49.494798+0800 Runner[3250:794315] flutter: 13:32:49: subscriber onIceCandidate
2022-04-22 13:32:49.495029+0800 Runner[3250:794315] flutter: 13:32:49: subscriber onIceCandidate
2022-04-22 13:32:49.495253+0800 Runner[3250:794315] flutter: 13:32:49: subscriber onIceCandidate
2022-04-22 13:32:49.495473+0800 Runner[3250:794315] flutter: 13:32:49: subscriber onIceCandidate
2022-04-22 13:32:49.495874+0800 Runner[3250:794315] flutter: 13:32:49: pc.getRemoteDescription Instance of 'RTCSessionDescription'
2022-04-22 13:32:49.496513+0800 Runner[3250:794315] flutter: 13:32:49: subscriber onIceCandidate
2022-04-22 13:32:49.496973+0800 Runner[3250:794315] flutter: 13:32:49: got ICE candidate from peer
2022-04-22 13:32:49.497626+0800 Runner[3250:794315] flutter: 13:32:49: [EngineEvent] Engine#55839818 EngineSubscriberPeerStateUpdatedEvent(state: RTCPeerConnectionState.RTCPeerConnectionStateConnecting, isPrimary: true)
2022-04-22 13:32:49.498159+0800 Runner[3250:794315] flutter: 13:32:49: pc.getRemoteDescription Instance of 'RTCSessionDescription'
2022-04-22 13:32:49.498533+0800 Runner[3250:794315] flutter: 13:32:49: got ICE candidate from peer
2022-04-22 13:32:49.498952+0800 Runner[3250:794315] flutter: 13:32:49: pc.getRemoteDescription Instance of 'RTCSessionDescription'
2022-04-22 13:32:49.499247+0800 Runner[3250:794315] flutter: 13:32:49: got ICE candidate from peer
2022-04-22 13:32:49.499455+0800 Runner[3250:794315] flutter: 13:32:49: pc.getRemoteDescription Instance of 'RTCSessionDescription'
2022-04-22 13:32:50.840162+0800 Runner[3250:794315] flutter: 13:32:50: [EngineEvent] Engine#55839818 EngineSubscriberPeerStateUpdatedEvent(state: RTCPeerConnectionState.RTCPeerConnectionStateConnected, isPrimary: true)
2022-04-22 13:32:50.841956+0800 Runner[3250:794315] flutter: 13:32:50: EventsEmitter<EngineEvent>#763088599 event was cancelled by func
2022-04-22 13:32:50.842513+0800 Runner[3250:794315] flutter: 13:32:50: Engine ConnectionState connecting -> connected
2022-04-22 13:32:50.860112+0800 Runner[3250:794315] flutter: 13:32:50: [EngineEvent] Engine#55839818 EngineConnectionStateUpdatedEvent(newState: connected, didReconnect: false, disconnectReason: null)
2022-04-22 13:32:50.941994+0800 Runner[3250:794315] flutter: 13:32:50: Server opened DC label: _reliable
2022-04-22 13:32:50.942190+0800 Runner[3250:794315] flutter: 13:32:50: Server opened DC label: _lossy
2022-04-22 13:32:52.331579+0800 Runner[3250:794315] flutter: 13:32:52: setSourceEnabled(source: TrackSource.camera, enabled: true)
2022-04-22 13:32:52.372524+0800 Runner[3250:794315] flutter: 13:32:52: Compute encodings with resolution: VideoDimensions(960x540), options: VideoPublishOptions(videoEncoding: null, simulcast: true)
2022-04-22 13:32:52.373563+0800 Runner[3250:794315] flutter: 13:32:52: using video encoding
2022-04-22 13:32:52.375971+0800 Runner[3250:794315] flutter: 13:32:52: Using encodings: ({active: true, rid: q, maxBitrate: 120000, maxFramerate: 15, scaleResolutionDownBy: 3.0}, {active: true, rid: h, maxBitrate: 300000, maxFramerate: 20, scaleResolutionDownBy: 1.5}, {active: true, rid: f, maxBitrate: 600000, maxFramerate: 25, scaleResolutionDownBy: 1.0})
2022-04-22 13:32:52.377250+0800 Runner[3250:794315] flutter: 13:32:52: Video layers: (quality: LOW
width: 320
height: 180
bitrate: 120000
, quality: MEDIUM
width: 640
height: 360
bitrate: 300000
, quality: HIGH
width: 960
height: 540
bitrate: 600000
)
2022-04-22 13:32:52.382618+0800 Runner[3250:794315] flutter: 13:32:52: SignalClient onSocketDispose ConnectionState.connected
2022-04-22 13:32:52.382688+0800 Runner[3250:794315] flutter: 13:32:52: SignalClient did disconnect ConnectionState.connected
2022-04-22 13:32:52.382729+0800 Runner[3250:794315] flutter: 13:32:52: SignalClient ConnectionState connected -> disconnected
2022-04-22 13:32:52.383331+0800 Runner[3250:794315] flutter: 13:32:52: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
2022-04-22 13:32:52.383762+0800 Runner[3250:794315] flutter: 13:32:52: onDisconnected state:ConnectionState.connected reason:signal
2022-04-22 13:32:52.383819+0800 Runner[3250:794315] flutter: 13:32:52: [Engine] Should attempt reconnect sequence...
2022-04-22 13:32:52.384233+0800 Runner[3250:794315] flutter: 13:32:52: Engine ConnectionState connected -> reconnecting
2022-04-22 13:32:52.384604+0800 Runner[3250:794315] flutter: 13:32:52: Retrying connect sequence remaining 2 tries...
2022-04-22 13:32:52.385164+0800 Runner[3250:794315] flutter: 13:32:52: [EngineEvent] Engine#55839818 EngineConnectionStateUpdatedEvent(newState: reconnecting, didReconnect: false, disconnectReason: null)
2022-04-22 13:32:52.385927+0800 Runner[3250:794315] flutter: 13:32:52: SignalClient connecting with url: wss://hidden/rtc?access_token=hidden&auto_subscribe=1&reconnect=1&protocol=7&sdk=flutter&version=0.5.9&os=iOS&os_version=14.4.2&device_model=iPhone13%2C2
2022-04-22 13:32:52.385978+0800 Runner[3250:794315] flutter: 13:32:52: SignalClient ConnectionState disconnected -> reconnecting
2022-04-22 13:32:52.386041+0800 Runner[3250:794315] flutter: 13:32:52: [SignalClient#782359492] cleanUp()
2022-04-22 13:32:52.386841+0800 Runner[3250:794315] flutter: 13:32:52: [RoomEvent] RoomReconnectingEvent(), will notifyListeners()
2022-04-22 13:32:52.387308+0800 Runner[3250:794315] flutter: 13:32:52: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: reconnecting, didReconnect: false, disconnectReason: null)
2022-04-22 13:32:52.387438+0800 Runner[3250:794315] flutter: 13:32:52: [WebSocketIO] Connecting(uri: wss://hidden/rtc?access_token=hidden&auto_subscribe=1&reconnect=1&protocol=7&sdk=flutter&version=0.5.9&os=iOS&os_version=14.4.2&device_model=iPhone13%2C2)...
2022-04-22 13:32:52.433643+0800 Runner[3250:794315] flutter: 13:32:52: [WebSocketIO] Connected
2022-04-22 13:32:52.433757+0800 Runner[3250:794315] flutter: 13:32:52: SignalClient ConnectionState reconnecting -> connected
2022-04-22 13:32:52.434011+0800 Runner[3250:794315] flutter: 13:32:52: Reconnect: iceConnected: true
2022-04-22 13:32:52.434058+0800 Runner[3250:794315] flutter: 13:32:52: Engine ConnectionState reconnecting -> connected
2022-04-22 13:32:52.434126+0800 Runner[3250:794315] flutter: 13:32:52: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: connected, didReconnect: true, disconnectReason: null)
2022-04-22 13:32:52.434196+0800 Runner[3250:794315] flutter: 13:32:52: Sending syncState
2022-04-22 13:32:52.436454+0800 Runner[3250:794315] flutter: 13:32:52: [EngineEvent] Engine#55839818 EngineConnectionStateUpdatedEvent(newState: connected, didReconnect: true, disconnectReason: null)
2022-04-22 13:32:52.436905+0800 Runner[3250:794315] flutter: 13:32:52: [RoomEvent] RoomReconnectedEvent(), will notifyListeners()
2022-04-22 13:32:52.439325+0800 Runner[3250:794315] flutter: 13:32:52: [SignalEvent] Instance of 'SignalParticipantUpdateEvent'
2022-04-22 13:32:52.439781+0800 Runner[3250:794315] flutter: 13:32:52: [ParticipantEvent] ParticipantPermissionsUpdatedEvent(participant: LocalParticipant(sid: PA_VbHvhdGGzkmB, identity: player9), permissions: Instance of 'ParticipantPermissions'), will notifyListeners()
2022-04-22 13:32:52.439919+0800 Runner[3250:794315] flutter: 13:32:52: [RoomEvent] ParticipantPermissionsUpdatedEvent(participant: LocalParticipant(sid: PA_VbHvhdGGzkmB, identity: player9), permissions: Instance of 'ParticipantPermissions'), will notifyListeners()
2022-04-22 13:32:52.440200+0800 Runner[3250:794315] flutter: 13:32:52: [SignalEvent] Instance of 'SignalOfferEvent'
2022-04-22 13:32:52.440363+0800 Runner[3250:794315] flutter: 13:32:52: [Engine#55839818] Received server offer(type: offer, RTCSignalingState.RTCSignalingStateStable)
2022-04-22 13:32:52.440668+0800 Runner[3250:794315] flutter: 13:32:52: [SignalEvent] Instance of 'SignalTrickleEvent'
2022-04-22 13:32:52.440849+0800 Runner[3250:794315] flutter: 13:32:52: [SignalEvent] Instance of 'SignalTrickleEvent'
2022-04-22 13:32:52.441212+0800 Runner[3250:794315] flutter: 13:32:52: [SignalEvent] Instance of 'SignalTrickleEvent'
2022-04-22 13:32:52.441353+0800 Runner[3250:794315] flutter: 13:32:52: Created answer
2022-04-22 13:32:52.441496+0800 Runner[3250:794315] flutter: 13:32:52: [SignalEvent] Instance of 'SignalTrickleEvent'
2022-04-22 13:32:52.441912+0800 Runner[3250:794315] flutter: 13:32:52: got ICE candidate from peer
2022-04-22 13:32:52.442141+0800 Runner[3250:794315] flutter: 13:32:52: subscriber onIceCandidate
2022-04-22 13:32:52.442342+0800 Runner[3250:794315] flutter: 13:32:52: subscriber onIceCandidate
2022-04-22 13:32:52.442489+0800 Runner[3250:794315] flutter: 13:32:52: subscriber onIceCandidate
2022-04-22 13:32:52.442634+0800 Runner[3250:794315] flutter: 13:32:52: subscriber onIceCandidate
2022-04-22 13:32:52.442784+0800 Runner[3250:794315] flutter: 13:32:52: subscriber onIceCandidate
2022-04-22 13:32:52.442971+0800 Runner[3250:794315] flutter: 13:32:52: subscriber onIceCandidate
2022-04-22 13:32:52.443163+0800 Runner[3250:794315] flutter: 13:32:52: pc.getRemoteDescription Instance of 'RTCSessionDescription'
2022-04-22 13:32:52.448282+0800 Runner[3250:794315] flutter: 13:32:52: got ICE candidate from peer
2022-04-22 13:32:52.448695+0800 Runner[3250:794315] flutter: 13:32:52: pc.getRemoteDescription Instance of 'RTCSessionDescription'
2022-04-22 13:32:52.448990+0800 Runner[3250:794315] flutter: 13:32:52: got ICE candidate from peer
2022-04-22 13:32:52.449212+0800 Runner[3250:794315] flutter: 13:32:52: pc.getRemoteDescription Instance of 'RTCSessionDescription'
2022-04-22 13:32:52.449506+0800 Runner[3250:794315] flutter: 13:32:52: got ICE candidate from peer
2022-04-22 13:32:52.449797+0800 Runner[3250:794315] flutter: 13:32:52: pc.getRemoteDescription Instance of 'RTCSessionDescription'
2022-04-22 13:32:52.451870+0800 Runner[3250:794315] flutter: 13:32:52: subscriber onIceCandidate
2022-04-22 13:32:52.506159+0800 Runner[3250:794315] flutter: 13:32:52: subscriber onIceCandidate
2022-04-22 13:32:54.333805+0800 Runner[3250:794315] flutter: 13:32:54: [SignalEvent] Instance of 'SignalConnectionQualityUpdateEvent'
2022-04-22 13:32:54.337294+0800 Runner[3250:794315] flutter: 13:32:54: [ParticipantEvent] ParticipantConnectionQualityUpdatedEvent(participant: LocalParticipant(sid: PA_VbHvhdGGzkmB, identity: player9), connectionQuality: ConnectionQuality.excellent), will notifyListeners()
2022-04-22 13:32:54.337662+0800 Runner[3250:794315] flutter: 13:32:54: [RoomEvent] ParticipantConnectionQualityUpdatedEvent(participant: LocalParticipant(sid: PA_VbHvhdGGzkmB, identity: player9), connectionQuality: ConnectionQuality.excellent), will notifyListeners()
2022-04-22 13:32:57.329438+0800 Runner[3250:794315] flutter: 13:32:57: SignalClient onSocketDispose ConnectionState.connected
2022-04-22 13:32:57.329774+0800 Runner[3250:794315] flutter: 13:32:57: SignalClient did disconnect ConnectionState.connected
2022-04-22 13:32:57.330014+0800 Runner[3250:794315] flutter: 13:32:57: SignalClient ConnectionState connected -> disconnected
2022-04-22 13:32:57.330736+0800 Runner[3250:794315] flutter: 13:32:57: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
2022-04-22 13:32:57.331730+0800 Runner[3250:794315] flutter: 13:32:57: onDisconnected state:ConnectionState.connected reason:signal
2022-04-22 13:32:57.332015+0800 Runner[3250:794315] flutter: 13:32:57: [Engine] Should attempt reconnect sequence...
2022-04-22 13:32:57.332250+0800 Runner[3250:794315] flutter: 13:32:57: Engine ConnectionState connected -> reconnecting
2022-04-22 13:32:57.332559+0800 Runner[3250:794315] flutter: 13:32:57: Retrying connect sequence remaining 2 tries...
2022-04-22 13:32:57.333524+0800 Runner[3250:794315] flutter: 13:32:57: [EngineEvent] Engine#55839818 EngineConnectionStateUpdatedEvent(newState: reconnecting, didReconnect: false, disconnectReason: null)
2022-04-22 13:32:57.334715+0800 Runner[3250:794315] flutter: 13:32:57: SignalClient connecting with url: wss://hidden/rtc?access_token=hidden&auto_subscribe=1&reconnect=1&protocol=7&sdk=flutter&version=0.5.9&os=iOS&os_version=14.4.2&device_model=iPhone13%2C2
2022-04-22 13:32:57.334912+0800 Runner[3250:794315] flutter: 13:32:57: SignalClient ConnectionState disconnected -> reconnecting
2022-04-22 13:32:57.335305+0800 Runner[3250:794315] flutter: 13:32:57: [SignalClient#782359492] cleanUp()
2022-04-22 13:32:57.335768+0800 Runner[3250:794315] flutter: 13:32:57: [RoomEvent] RoomReconnectingEvent(), will notifyListeners()
2022-04-22 13:32:57.336217+0800 Runner[3250:794315] flutter: 13:32:57: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: reconnecting, didReconnect: false, disconnectReason: null)
2022-04-22 13:32:57.337263+0800 Runner[3250:794315] flutter: 13:32:57: [WebSocketIO] Connecting(uri: wss://hidden/rtc?access_token=hidden&auto_subscribe=1&reconnect=1&protocol=7&sdk=flutter&version=0.5.9&os=iOS&os_version=14.4.2&device_model=iPhone13%2C2)...
2022-04-22 13:32:57.406239+0800 Runner[3250:794315] flutter: 13:32:57: [WebSocketIO] Connected
2022-04-22 13:32:57.406425+0800 Runner[3250:794315] flutter: 13:32:57: SignalClient ConnectionState reconnecting -> connected
2022-04-22 13:32:57.406592+0800 Runner[3250:794315] flutter: 13:32:57: Reconnect: iceConnected: true
2022-04-22 13:32:57.406711+0800 Runner[3250:794315] flutter: 13:32:57: Engine ConnectionState reconnecting -> connected
2022-04-22 13:32:57.406889+0800 Runner[3250:794315] flutter: 13:32:57: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: connected, didReconnect: true, disconnectReason: null)
2022-04-22 13:32:57.407071+0800 Runner[3250:794315] flutter: 13:32:57: Sending syncState
2022-04-22 13:32:57.407466+0800 Runner[3250:794315] flutter: 13:32:57: [EngineEvent] Engine#55839818 EngineConnectionStateUpdatedEvent(newState: connected, didReconnect: true, disconnectReason: null)
2022-04-22 13:32:57.407748+0800 Runner[3250:794315] flutter: 13:32:57: [RoomEvent] RoomReconnectedEvent(), will notifyListeners()
2022-04-22 13:32:57.410926+0800 Runner[3250:794315] flutter: 13:32:57: [SignalEvent] Instance of 'SignalParticipantUpdateEvent'
2022-04-22 13:32:57.411267+0800 Runner[3250:794315] flutter: 13:32:57: [ParticipantEvent] ParticipantPermissionsUpdatedEvent(participant: LocalParticipant(sid: PA_VbHvhdGGzkmB, identity: player9), permissions: Instance of 'ParticipantPermissions'), will notifyListeners()
2022-04-22 13:32:57.411401+0800 Runner[3250:794315] flutter: 13:32:57: [RoomEvent] ParticipantPermissionsUpdatedEvent(participant: LocalParticipant(sid: PA_VbHvhdGGzkmB, identity: player9), permissions: Instance of 'ParticipantPermissions'), will notifyListeners()
2022-04-22 13:32:57.412058+0800 Runner[3250:794315] flutter: 13:32:57: [SignalEvent] Instance of 'SignalOfferEvent'
2022-04-22 13:32:57.412332+0800 Runner[3250:794315] flutter: 13:32:57: [Engine#55839818] Received server offer(type: offer, RTCSignalingState.RTCSignalingStateStable)
2022-04-22 13:32:57.412972+0800 Runner[3250:794315] flutter: 13:32:57: [SignalEvent] Instance of 'SignalTrickleEvent'
2022-04-22 13:32:57.413653+0800 Runner[3250:794315] flutter: 13:32:57: [SignalEvent] Instance of 'SignalTrickleEvent'
2022-04-22 13:32:57.414482+0800 Runner[3250:794315] flutter: 13:32:57: [SignalEvent] Instance of 'SignalTrickleEvent'
2022-04-22 13:32:57.414871+0800 Runner[3250:794315] flutter: 13:32:57: Created answer
2022-04-22 13:32:57.415195+0800 Runner[3250:794315] flutter: 13:32:57: [SignalEvent] Instance of 'SignalTrickleEvent'
2022-04-22 13:32:57.416019+0800 Runner[3250:794315] flutter: 13:32:57: got ICE candidate from peer
2022-04-22 13:32:57.416554+0800 Runner[3250:794315] flutter: 13:32:57: subscriber onIceCandidate
2022-04-22 13:32:57.417016+0800 Runner[3250:794315] flutter: 13:32:57: subscriber onIceCandidate
2022-04-22 13:32:57.417364+0800 Runner[3250:794315] flutter: 13:32:57: subscriber onIceCandidate
2022-04-22 13:32:57.417687+0800 Runner[3250:794315] flutter: 13:32:57: subscriber onIceCandidate
2022-04-22 13:32:57.418007+0800 Runner[3250:794315] flutter: 13:32:57: subscriber onIceCandidate
2022-04-22 13:32:57.418336+0800 Runner[3250:794315] flutter: 13:32:57: pc.getRemoteDescription Instance of 'RTCSessionDescription'
2022-04-22 13:32:57.418581+0800 Runner[3250:794315] flutter: 13:32:57: subscriber onIceCandidate
2022-04-22 13:32:57.419217+0800 Runner[3250:794315] flutter: 13:32:57: got ICE candidate from peer
2022-04-22 13:32:57.419774+0800 Runner[3250:794315] flutter: 13:32:57: pc.getRemoteDescription Instance of 'RTCSessionDescription'
2022-04-22 13:32:57.428253+0800 Runner[3250:794315] flutter: 13:32:57: got ICE candidate from peer
2022-04-22 13:32:57.428580+0800 Runner[3250:794315] flutter: 13:32:57: subscriber onIceCandidate
2022-04-22 13:32:57.429124+0800 Runner[3250:794315] flutter: 13:32:57: pc.getRemoteDescription Instance of 'RTCSessionDescription'
2022-04-22 13:32:57.429623+0800 Runner[3250:794315] flutter: 13:32:57: got ICE candidate from peer
2022-04-22 13:32:57.429951+0800 Runner[3250:794315] flutter: 13:32:57: pc.getRemoteDescription Instance of 'RTCSessionDescription'
2022-04-22 13:32:57.476220+0800 Runner[3250:794315] flutter: 13:32:57: subscriber onIceCandidate
2022-04-22 13:32:57.523107+0800 Runner[3250:794315] flutter: 13:32:57: subscriber onIceCandidate
2022-04-22 13:32:57.524598+0800 Runner[3250:794315] flutter: 13:32:57: subscriber onIceCandidate
2022-04-22 13:32:57.525681+0800 Runner[3250:794315] flutter: 13:32:57: subscriber onIceCandidate
2022-04-22 13:32:57.526599+0800 Runner[3250:794315] flutter: 13:32:57: subscriber onIceCandidate
2022-04-22 13:32:57.527398+0800 Runner[3250:794315] flutter: 13:32:57: subscriber onIceCandidate
2022-04-22 13:32:57.528152+0800 Runner[3250:794315] flutter: 13:32:57: subscriber onIceCandidate
2022-04-22 13:32:59.432153+0800 Runner[3250:794315] flutter: 13:32:59: [SignalEvent] Instance of 'SignalConnectionQualityUpdateEvent'
2022-04-22 13:33:02.373931+0800 Runner[3250:794315] flutter: 13:33:02: SignalClient onSocketDispose ConnectionState.connected
2022-04-22 13:33:02.374373+0800 Runner[3250:794315] flutter: 13:33:02: SignalClient did disconnect ConnectionState.connected
2022-04-22 13:33:02.374718+0800 Runner[3250:794315] flutter: 13:33:02: SignalClient ConnectionState connected -> disconnected
2022-04-22 13:33:02.375763+0800 Runner[3250:794315] flutter: 13:33:02: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: disconnected, didReconnect: false, disconnectReason: null)
2022-04-22 13:33:02.376753+0800 Runner[3250:794315] flutter: 13:33:02: onDisconnected state:ConnectionState.connected reason:signal
2022-04-22 13:33:02.377116+0800 Runner[3250:794315] flutter: 13:33:02: [Engine] Should attempt reconnect sequence...
2022-04-22 13:33:02.377412+0800 Runner[3250:794315] flutter: 13:33:02: Engine ConnectionState connected -> reconnecting
2022-04-22 13:33:02.377970+0800 Runner[3250:794315] flutter: 13:33:02: Retrying connect sequence remaining 2 tries...
2022-04-22 13:33:02.378547+0800 Runner[3250:794315] flutter: 13:33:02: [EngineEvent] Engine#55839818 EngineConnectionStateUpdatedEvent(newState: reconnecting, didReconnect: false, disconnectReason: null)
2022-04-22 13:33:02.379580+0800 Runner[3250:794315] flutter: 13:33:02: SignalClient connecting with url: wss://hidden/rtc?access_token=hidden&auto_subscribe=1&reconnect=1&protocol=7&sdk=flutter&version=0.5.9&os=iOS&os_version=14.4.2&device_model=iPhone13%2C2
2022-04-22 13:33:02.379798+0800 Runner[3250:794315] flutter: 13:33:02: SignalClient ConnectionState disconnected -> reconnecting
2022-04-22 13:33:02.380137+0800 Runner[3250:794315] flutter: 13:33:02: [SignalClient#782359492] cleanUp()
2022-04-22 13:33:02.380486+0800 Runner[3250:794315] flutter: 13:33:02: [RoomEvent] RoomReconnectingEvent(), will notifyListeners()
2022-04-22 13:33:02.380840+0800 Runner[3250:794315] flutter: 13:33:02: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: reconnecting, didReconnect: false, disconnectReason: null)
2022-04-22 13:33:02.381354+0800 Runner[3250:794315] flutter: 13:33:02: [WebSocketIO] Connecting(uri: wss://hidden/rtc?access_token=hidden&auto_subscribe=1&reconnect=1&protocol=7&sdk=flutter&version=0.5.9&os=iOS&os_version=14.4.2&device_model=iPhone13%2C2)...
2022-04-22 13:33:02.386961+0800 Runner[3250:794315] flutter: 13:33:02: EventsListener<SignalEvent>#453412181 event was cancelled by func
2022-04-22 13:33:02.387701+0800 Runner[3250:794315] flutter: could not publish video: LiveKit Exception TrackPublishException Failed to publish track
2022-04-22 13:33:02.462208+0800 Runner[3250:794315] flutter: 13:33:02: [WebSocketIO] Connected
2022-04-22 13:33:02.462333+0800 Runner[3250:794315] flutter: 13:33:02: SignalClient ConnectionState reconnecting -> connected
2022-04-22 13:33:02.462426+0800 Runner[3250:794315] flutter: 13:33:02: Reconnect: iceConnected: true
2022-04-22 13:33:02.462481+0800 Runner[3250:794315] flutter: 13:33:02: Engine ConnectionState reconnecting -> connected
2022-04-22 13:33:02.462575+0800 Runner[3250:794315] flutter: 13:33:02: [SignalEvent] SignalConnectionStateUpdatedEvent(newState: connected, didReconnect: true, disconnectReason: null)
2022-04-22 13:33:02.462668+0800 Runner[3250:794315] flutter: 13:33:02: Sending syncState
2022-04-22 13:33:02.462906+0800 Runner[3250:794315] flutter: 13:33:02: [EngineEvent] Engine#55839818 EngineConnectionStateUpdatedEvent(newState: connected, didReconnect: true, disconnectReason: null)
2022-04-22 13:33:02.463021+0800 Runner[3250:794315] flutter: 13:33:02: [RoomEvent] RoomReconnectedEvent(), will notifyListeners()
2022-04-22 13:33:02.464580+0800 Runner[3250:794315] flutter: 13:33:02: [SignalEvent] Instance of 'SignalParticipantUpdateEvent'
2022-04-22 13:33:02.464717+0800 Runner[3250:794315] flutter: 13:33:02: [ParticipantEvent] ParticipantPermissionsUpdatedEvent(participant: LocalParticipant(sid: PA_VbHvhdGGzkmB, identity: player9), permissions: Instance of 'ParticipantPermissions'), will notifyListeners()
2022-04-22 13:33:02.464767+0800 Runner[3250:794315] flutter: 13:33:02: [RoomEvent] ParticipantPermissionsUpdatedEvent(participant: LocalParticipant(sid: PA_VbHvhdGGzkmB, identity: player9), permissions: Instance of 'ParticipantPermissions'), will notifyListeners()
2022-04-22 13:33:02.469530+0800 Runner[3250:794315] flutter: 13:33:02: [SignalEvent] Instance of 'SignalOfferEvent'
2022-04-22 13:33:02.469687+0800 Runner[3250:794315] flutter: 13:33:02: [Engine#55839818] Received server offer(type: offer, RTCSignalingState.RTCSignalingStateStable)
2022-04-22 13:33:02.473748+0800 Runner[3250:794315] flutter: 13:33:02: [SignalEvent] Instance of 'SignalTrickleEvent'
2022-04-22 13:33:02.475531+0800 Runner[3250:794315] flutter: 13:33:02: [SignalEvent] Instance of 'SignalTrickleEvent'
2022-04-22 13:33:02.476631+0800 Runner[3250:794315] flutter: 13:33:02: Created answer
2022-04-22 13:33:02.476955+0800 Runner[3250:794315] flutter: 13:33:02: [SignalEvent] Instance of 'SignalTrickleEvent'
2022-04-22 13:33:02.478268+0800 Runner[3250:794315] flutter: 13:33:02: got ICE candidate from peer
2022-04-22 13:33:02.478502+0800 Runner[3250:794315] flutter: 13:33:02: [SignalEvent] Instance of 'SignalTrickleEvent'
2022-04-22 13:33:02.478767+0800 Runner[3250:794315] flutter: 13:33:02: subscriber onIceCandidate
2022-04-22 13:33:02.479006+0800 Runner[3250:794315] flutter: 13:33:02: subscriber onIceCandidate
2022-04-22 13:33:02.479517+0800 Runner[3250:794315] flutter: 13:33:02: subscriber onIceCandidate
2022-04-22 13:33:02.479681+0800 Runner[3250:794315] flutter: 13:33:02: subscriber onIceCandidate
2022-04-22 13:33:02.479838+0800 Runner[3250:794315] flutter: 13:33:02: subscriber onIceCandidate
2022-04-22 13:33:02.479992+0800 Runner[3250:794315] flutter: 13:33:02: subscriber onIceCandidate
2022-04-22 13:33:02.480141+0800 Runner[3250:794315] flutter: 13:33:02: pc.getRemoteDescription Instance of 'RTCSessionDescription'
2022-04-22 13:33:02.480809+0800 Runner[3250:794315] flutter: 13:33:02: got ICE candidate from peer
2022-04-22 13:33:02.481125+0800 Runner[3250:794315] flutter: 13:33:02: pc.getRemoteDescription Instance of 'RTCSessionDescription'
2022-04-22 13:33:02.482592+0800 Runner[3250:794315] flutter: 13:33:02: got ICE candidate from peer
2022-04-22 13:33:02.482862+0800 Runner[3250:794315] flutter: 13:33:02: pc.getRemoteDescription Instance of 'RTCSessionDescription'
2022-04-22 13:33:02.483329+0800 Runner[3250:794315] flutter: 13:33:02: got ICE candidate from peer
2022-04-22 13:33:02.483934+0800 Runner[3250:794315] flutter: 13:33:02: pc.getRemoteDescription Instance of 'RTCSessionDescription'
2022-04-22 13:33:02.486181+0800 Runner[3250:794315] flutter: 13:33:02: subscriber onIceCandidate
2022-04-22 13:33:02.554100+0800 Runner[3250:794315] flutter: 13:33:02: subscriber onIceCandidate
2022-04-22 13:33:02.585243+0800 Runner[3250:794315] flutter: 13:33:02: subscriber onIceCandidate
2022-04-22 13:33:02.585654+0800 Runner[3250:794315] flutter: 13:33:02: subscriber onIceCandidate
2022-04-22 13:33:02.585915+0800 Runner[3250:794315] flutter: 13:33:02: subscriber onIceCandidate
2022-04-22 13:33:02.586168+0800 Runner[3250:794315] flutter: 13:33:02: subscriber onIceCandidate
2022-04-22 13:33:02.586405+0800 Runner[3250:794315] flutter: 13:33:02: subscriber onIceCandidate
2022-04-22 13:33:02.586640+0800 Runner[3250:794315] flutter: 13:33:02: subscriber onIceCandidate

Error : Concurrent modification during iteration: _LinkedHashMap len:0.

repeat disconnect, connect, disconnect, connect ............

I/flutter ( 9546): Error :  Concurrent modification during iteration: _LinkedHashMap len:0.
I/flutter ( 9546): StackTrace :  #0      _CompactIterator.moveNext (dart:collection-patch/compact_hash.dart:615:7)
I/flutter ( 9546): #1      RoomPrivateMethods._cleanUp (package:livekit_client/src/core/room.dart:495:45)
I/flutter ( 9546): <asynchronous suspension>
I/flutter ( 9546): #2      new Room.<anonymous closure> (package:livekit_client/src/core/room.dart:100:7)
I/flutter ( 9546): <asynchronous suspension>
I/flutter ( 9546): #3      _Disposer._dispose (package:livekit_client/src/support/disposable.dart:29:11)
I/flutter ( 9546): <asynchronous suspension>
I/flutter ( 9546): #4      DisposableChangeNotifier.dispose (package:livekit_client/src/support/disposable.dart:53:12)
I/flutter ( 9546): <asynchronous suspension>
I/flutter ( 9546): #5      LiveKitClient.connect (package:livekit_client/src/livekit.dart:28:7)

muted mismatch between TrackPublication and its track

When a TrackPublication is muted, I expect it's track to be muted as well

instead I get:
TrackPublication.muted [true]
TrackPublication.track.muted [false]

if that's a normal behaviour, we would need a better documentation on the purpose of track's muted attribute.

tested on v.0.5.3

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!

exception thrown when muting tracks (chrome windows)

I'm running the example from client-sdk-flutter and the mute (either video or audio) throws an exception:

here's the exception for video muting:

FINE: setSourceEnabled(source: TrackSource.camera, enabled: false)
FINE: LocalTrack.mute() muted: false
FINE: LocalVideoTrack#672310356.disable() disabling MediaStreamTrackWeb#787289586...
Error: Unsupported operation: Platform._operatingSystem
    at Object.throw_ [as throw] (http://localhost:54174/dart_sdk.js:5061:11)
    at Function._operatingSystem (http://localhost:54174/dart_sdk.js:54665:17)
    at Function.get operatingSystem [as operatingSystem] (http://localhost:54174/dart_sdk.js:54711:27)
    at get _operatingSystem (http://localhost:54174/dart_sdk.js:54624:27)
    at Function.desc.get [as _operatingSystem] (http://localhost:54174/dart_sdk.js:5552:17)
    at get isWindows (http://localhost:54174/dart_sdk.js:54642:26)
    at Function.desc.get [as isWindows] (http://localhost:54174/dart_sdk.js:5552:17)
    at video$.LocalVideoTrack.__.mute (http://localhost:54174/packages/livekit_client/src/publication/local_track_publication.dart.lib.js:4978:26)
    at mute.next (<anonymous>)
    at http://localhost:54174/dart_sdk.js:38640:33
    at _RootZone.runUnary (http://localhost:54174/dart_sdk.js:38511:59)
    at _FutureListener.thenAwait.handleValue (http://localhost:54174/dart_sdk.js:33713:29)
    at handleValueCallback (http://localhost:54174/dart_sdk.js:34265:49)
    at Function._propagateToListeners (http://localhost:54174/dart_sdk.js:34303:17)
    at _Future.new.[_completeWithValue] (http://localhost:54174/dart_sdk.js:34151:23)
    at async._AsyncCallbackEntry.new.callback (http://localhost:54174/dart_sdk.js:34172:35)
    at Object._microtaskLoop (http://localhost:54174/dart_sdk.js:38778:13)
    at _startMicrotaskLoop (http://localhost:54174/dart_sdk.js:38784:13)
    at http://localhost:54174/dart_sdk.js:34519:9

I'm testing it on latest main commit 3d5e8a7dd846672324ecb476fd854d6557a13379

flutter doctor:

$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, 2.8.0, on Microsoft Windows [Version 10.0.19043.1348], locale es-AR)
[√] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
[√] Chrome - develop for the web
[√] Visual Studio - develop for Windows (Visual Studio Community 2019 16.10.4)
[√] Android Studio (version 4.1)
[√] VS Code (version 1.62.3)
[√] Connected device (3 available)

• No issues found!

flutter pub get failed

Because every version of flutter_test from sdk depends on meta 1.3.0 and livekit_client depends on meta ^1.7.0, flutter_test from sdk is forbidden.
So, because livekit_client depends on flutter_test any from sdk, version solving failed.
Running "flutter pub get" in client-sdk-flutter...                      
pub get failed (1; So, because livekit_client depends on flutter_test any from sdk, version solving failed.)

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 2b37503
livekit-server 0.15.1

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

Missing lines of code in 0.5.6

I include in pubspec.yaml for version 0.5.6 and found that some lines of code were missing when compared to what is in GitHub. (as of Jan 27)

For example, in lib>src>participant>local.dart, these lines (line 326 onwars) are missing:

void setTrackSubscriptionPermissions({
required bool allParticipantsAllowed,
List trackPermissions = const [],
}) =>
room.engine.signalClient.sendUpdateSubscriptionPermissions(
allParticipants: allParticipantsAllowed,
trackPermissions: trackPermissions.map((e) => e.toPBType()).toList(),
);

"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: x

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

[Bug] - When I start example app and ToggleCamera the app crash

Hi master,
Please follow the following instructions before filing a bug:
Step reproduce:

  1. Run app -> Join a room
  2. Touch button (Toggle Camera)
  3. Result App crash
    Expected: Function change font or back of the camera
    Note: I think the problem may be related to policy and permissions for android version 10 and above.

Here the stack trace:
D/FlutterWebRTCPlugin(23368): CameraEventsHandler.onCameraOpening: cameraName=0 D/FlutterWebRTCPlugin(23368): CameraEventsHandler.onCameraError: errorDescription=Camera device has encountered a fatal error. D/FlutterWebRTCPlugin(23368): CameraEventsHandler.onFirstFrameAvailable D/FlutterWebRTCPlugin(23368): CameraEventsHandler.onFirstFrameAvailable E/AndroidRuntime(23368): FATAL EXCEPTION: main E/AndroidRuntime(23368): Process: com.example.applive, PID: 23368 E/AndroidRuntime(23368): java.lang.IllegalArgumentException: supportsCameraApi:2341: Unknown camera ID 0 E/AndroidRuntime(23368): at android.hardware.camera2.CameraManager.throwAsPublicException(CameraManager.java:1004) E/AndroidRuntime(23368): at android.hardware.camera2.CameraManager.getCameraCharacteristics(CameraManager.java:452) E/AndroidRuntime(23368): at org.webrtc.Camera2Session.start(Camera2Session.java:304) E/AndroidRuntime(23368): at org.webrtc.Camera2Session.<init>(Camera2Session.java:296) E/AndroidRuntime(23368): at org.webrtc.Camera2Session.create(Camera2Session.java:274) E/AndroidRuntime(23368): at org.webrtc.Camera2Capturer.createCameraSession(Camera2Capturer.java:35) E/AndroidRuntime(23368): at org.webrtc.CameraCapturer$5.run(CameraCapturer.java:272) E/AndroidRuntime(23368): at android.os.Handler.handleCallback(Handler.java:938) E/AndroidRuntime(23368): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(23368): at android.os.Looper.loop(Looper.java:223) E/AndroidRuntime(23368): at android.os.HandlerThread.run(HandlerThread.java:67) E/AndroidRuntime(23368): Caused by: android.os.ServiceSpecificException: supportsCameraApi:2341: Unknown camera ID 0 (code 3) E/AndroidRuntime(23368): at android.os.Parcel.createExceptionOrNull(Parcel.java:2387) E/AndroidRuntime(23368): at android.os.Parcel.createException(Parcel.java:2357) E/AndroidRuntime(23368): at android.os.Parcel.readException(Parcel.java:2340) E/AndroidRuntime(23368): at android.os.Parcel.readException(Parcel.java:2282) E/AndroidRuntime(23368): at android.hardware.ICameraService$Stub$Proxy.supportsCameraApi(ICameraService.java:906) E/AndroidRuntime(23368): at android.hardware.camera2.CameraManager.supportsCameraApiLocked(CameraManager.java:1057) E/AndroidRuntime(23368): at android.hardware.camera2.CameraManager.supportsCamera2ApiLocked(CameraManager.java:1033) E/AndroidRuntime(23368): at android.hardware.camera2.CameraManager.getCameraCharacteristics(CameraManager.java:425)

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 :)

Full HD resoution

Anyone was able to use this lib using more than 720p resolution? I tried in several ways to setup a 1080p video call but the system never able to use more than 1280x720@30.

Tested using Android, iPhone and Web.

sdk is broken (0.5.9)

The sdk seems to be broken, not even the "example/" would run or compile.

when trying to run the example, there are tons of compilation errors.

Launching lib\main.dart on Chrome in debug mode...
Waiting for connection from debug service on Chrome...
../../../../AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/google_fonts-2.3.0/lib/google_fonts.dart:2881:7: Error: No named parameter with the name 'displayLarge'.
      displayLarge: GoogleFonts.aBeeZee(textStyle: textTheme.displayLarge),
      ^^^^^^^^^^^^
../../../flutter/packages/flutter/lib/src/material/text_theme.dart:81:9: Context: Found this candidate, but the arguments don't match.
  const TextTheme({
        ^^^^^^^^^
../../../../AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/google_fonts-2.3.0/lib/google_fonts.dart:2968:7: Error: No named parameter with the name 'displayLarge'.
      displayLarge: GoogleFonts.abel(textStyle: textTheme.displayLarge),
      ^^^^^^^^^^^^
../../../flutter/packages/flutter/lib/src/material/text_theme.dart:81:9: Context: Found this candidate, but the arguments don't match.
  const TextTheme({
        ^^^^^^^^^
../../../../AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/google_fonts-2.3.0/lib/google_fonts.dart:3083:7: Error: No named parameter with the name 'displayLarge'.
      displayLarge: GoogleFonts.abhayaLibre(textStyle: textTheme.displayLarge),
      ^^^^^^^^^^^^
      (..... over 1000 errors like these....)

---- snip ----

lib/exts.dart:165:35: Error: The getter 'name' isn't defined for the class 'SimulateScenarioResult'.
 - 'SimulateScenarioResult' is from 'package:livekit_example/exts.dart' ('lib/exts.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'name'.
                    child: Text(e.name),
                                  ^^^^
../lib/src/utils.dart:82:37: Error: The getter 'name' isn't defined for the class 'TargetPlatform'.
 - 'TargetPlatform' is from 'package:flutter/src/foundation/platform.dart' ('../../../flutter/packages/flutter/lib/src/foundation/platform.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'name'.
          os: defaultTargetPlatform.name,
                                    ^^^^
../lib/src/core/signal_client.dart:408:29: Error: The getter 'name' isn't defined for the class 'ConnectionState'.
 - 'ConnectionState' is from 'package:livekit_client/src/types/other.dart' ('../lib/src/types/other.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'name'.
        '${_connectionState.name} -> ${newValue.name}');
                            ^^^^
../lib/src/core/signal_client.dart:408:49: Error: The getter 'name' isn't defined for the class 'ConnectionState'.
 - 'ConnectionState' is from 'package:livekit_client/src/types/other.dart' ('../lib/src/types/other.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'name'.
        '${_connectionState.name} -> ${newValue.name}');
                                                ^^^^
../lib/src/internal/events.dart:106:59: Error: The getter 'name' isn't defined for the class 'ConnectionState'.
 - 'ConnectionState' is from 'package:livekit_client/src/types/other.dart' ('../lib/src/types/other.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'name'.
  String toString() => '$runtimeType(newState: ${newState.name}, '
                                                          ^^^^
../lib/src/core/engine.dart:507:73: Error: The getter 'name' isn't defined for the class 'DisconnectReason'.
 - 'DisconnectReason' is from 'package:livekit_client/src/types/other.dart' ('../lib/src/types/other.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'name'.
        .info('onDisconnected state:${_connectionState} reason:${reason.name}');
                                                                        ^^^^
../lib/src/core/engine.dart:637:29: Error: The getter 'name' isn't defined for the class 'ConnectionState'.
 - 'ConnectionState' is from 'package:livekit_client/src/types/other.dart' ('../lib/src/types/other.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'name'.
        '${_connectionState.name} -> ${newValue.name}');
                            ^^^^
../lib/src/core/engine.dart:637:49: Error: The getter 'name' isn't defined for the class 'ConnectionState'.
 - 'ConnectionState' is from 'package:livekit_client/src/types/other.dart' ('../lib/src/types/other.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'name'.
        '${_connectionState.name} -> ${newValue.name}');
                                                ^^^^

Please adapt webrtc_interface-1.0.3

non-abstract class 'RTCDataChannelNative' is missing implementations for these members:

  • RTCDataChannel.bufferedAmount
  • RTCDataChannel.id
    Try to either
  • provide an implementation,
  • inherit an implementation from a superclass or mixin,
  • mark the class as abstract, or
  • provide a 'noSuchMethod' implementation.

class RTCDataChannelNative extends RTCDataChannel {
^^^^^^^^^^^^^^^^^^^^
../../fvm/versions/2.10.0/.pub-cache/hosted/pub.flutter-io.cn/webrtc_interface-1.0.3/lib/src/rtc_data_channel.dart:79:12: Context: 'RTCDataChannel.bufferedAmount' is defined here.
int? get bufferedAmount;
^^^^^^^^^^^^^^
../../fvm/versions/2.10.0/.pub-cache/hosted/pub.flutter-io.cn/webrtc_interface-1.0.3/lib/src/rtc_data_channel.dart:74:12: Context: 'RTCDataChannel.id' is defined here.
int? get id;
^^

FAILURE: Build failed with an exception.

  • Where:
    Script '/Users/lwj/fvm/versions/2.10.0/packages/flutter_tools/gradle/flutter.gradle' line: 1102

  • What went wrong:
    Execution failed for task ':app:compileFlutterBuildDebug'.

Process 'command '/Users/lwj/fvm/versions/2.10.0/bin/flutter'' finished with non-zero exit value 1

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 38s
Exception: Gradle task assembleDebug failed with exit code 1

App Crash on IOS

The example flutter app works on Android but it crashes on IOS. This is from debug terminal:

2022-03-05 18:00:56.492630+0300 Runner[8965:4657915] flutter: Connecting with url: , token: ...
2022-03-05 18:02:37.624834+0300 Runner[8965:4657931] [VERBOSE-3:platform_message_handler_ios.mm(106)] Check failed: task_runners_.GetPlatformTaskRunner()->RunsTasksOnCurrentThread().
dyld4 config: DYLD_LIBRARY_PATH=/usr/lib/system/introspection DYLD_INSERT_LIBRARIES=/Developer/usr/lib/libBacktraceRecording.dylib:/Developer/usr/lib/libMainThreadChecker.dylib:/Developer/Library/PrivateFrameworks/DTDDISupport.framework/libViewDebuggerSupport.dylib
2022-03-05 18:02:45.051701+0300 Runner[8965:4657918] [VERBOSE-2:profiler_metrics_ios.mm(203)] Error retrieving thread information: (os/kern) invalid argument
dyld4 config: DYLD_LIBRARY_PATH=/usr/lib/system/introspection DYLD_INSERT_LIBRARIES=/Developer/usr/lib/libBacktraceRecording.dylib:/Developer/usr/lib/libMainThreadChecker.dylib:/Developer/Library/PrivateFrameworks/DTDDISupport.framework/libViewDebuggerSupport.dylib

FlutterEventChannel setStreamHandler:

->  0x10bee8338 <+140>: mov    x20, x0     signaling_thread 0x0x105c156e0 (24): signal SIGABRT

The breakpoint line in FlutterRTCPeerConnection
[eventChannel setStreamHandler:dataChannel];

Versions:
Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel dev, 2.11.0-0.1.pre, on macOS 11.4 20F71 darwin-arm, locale en-GB) [✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0) [✓] Xcode - develop for iOS and macOS (Xcode 13.2.1) [✓] Chrome - develop for the web [✓] Android Studio (version 2020.3) [✓] VS Code (version 1.60.0) [✓] Connected device (3 available) [✓] HTTP Host Availability

s.dependency 'WebRTC-SDK', '~> 97.4692.02'

From pubspecyaml :
`version: 1.0.0+1

environment:
sdk: ">=2.12.0 <3.0.0"

dependencies:
permission_handler: ^9.2.0
livekit_client: ^0.5.6
`

from Podfile :
`post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)

target.build_configurations.each do |config|
  config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.1'
  #
  # Make it compile with M1 macs
  #
  config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = 'arm64'`

Please help i couldn't understand what the problem is, at first i thought it was about giving permissions but my app has permissions for microphone and camera, so i don't know why it's crashing like this on ios.

no speaker setup

hello, i have a request for a speaker, but i can't find it in the sdk

Can't successfully transfer audio when join an existing room for the first time after app open (iPhone)

Describe bug

When app is opened and the client joins an existing room for the first time,
the client can't transfer audio.
The track is published and the client can receive and hear other participants' tracks,
but the client's track can't be received by other participants and localParticipant.isSpeaking is always false.

And if the client disconnect and then connect again,
the above problem won't occur.
Also, if the client creates a room, the above problem won't occur either.

Version

client: flutter, 0.5.8
server: k8s, 0.15.5

How to reproduce

Use flutter example app.
Create a room on a device or emulator.
On an iphone 13 mini emulator, join the same room and publish audio.

This problem won't occur on Android.
It seems to be that the microphone won't get activated for the first time.

Screenshots

open app for the first time and joins an existing room

image

disconnect once and joins the same room again

image

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

Is there a listener for video freezing?

Good Day.

Thank you for this plugin, best webrtc implementation yet so far. However, I am running issues of client video freezes due to lag. Is there any listener for video freezing? I have already used RoomReconnectingEvent and RoomReconnectedEvent. I even tried using ParticipantConnectionQualityUpdatedEvent for both publisher and local participant to show loading, whenever connection drops to poor. However, I am still seeing cases wherein connection is good, but video freezes due to lag.

Thank you.

Unhandled Exception: type 'int' is not a subtype of type 'String'

In the example app, this shows up in the logs.

[VERBOSE-2:ui_dart_state.cc(209)] Unhandled Exception: type 'int' is not a subtype of type 'String'
#0      RTCDataChannelNative.eventListener (package:flutter_webrtc/src/native/rtc_data_channel_impl.dart:54:42)
#1      _rootRunUnary (dart:async/zone.dart:1434:47)
#2      _CustomZone.runUnary (dart:async/zone.dart:1335:19)
#3      _CustomZone.runUnaryGuarded (dart:async/zone.dart:1244:7)
#4      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:341:11)
#5      _DelayedData.perform (dart:async/stream_impl.dart:591:14)
#6      _StreamImplEvents.handleNext (dart:async/stream_impl.dart:706:11)
#7      _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:663:7)
#8      _rootRun (dart:async/zone.dart:1418:47)
#9      _CustomZone.run (dart:async/zone.dart:1328:19)
#10     _CustomZone.runGuarded (dart:async/zone.dart:1236:7)
#11     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1276:23)

#12     _rootRun (dart:async/zone.dart:1426:13)
#13     _CustomZone.run (dart:async/zone.dart:1328:19)
#14     _CustomZone.runGuarded (dart:async/zone.dart:1236:7)
#15     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1276:23)
#16     _microtaskLoop (dart:async/schedule_microtask.dart:40:21)
#17     _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)

Where does it come from?
Can it be ignored?

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 flutter and server logs.

flutter_SUCCESS.txt
server_SUCCESS.txt

publication.dimension not working

when I print out the publication.dimension for every participant, it always returns width:0 height:0
I've tried it on web and android, both have the same behavior.

I think it used to work fine in previous versions.

testing it with:
livekit-server 0.14.2
client-sdk-flutter 0.5.4

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?

[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!

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.

"integrity check failed " only on flutter

Bug report

I deployed a k8s cluster, and the example web application works fine without server error.

The connection test is passed.
image

However, when I used the flutter client sdk, the server gave the following error when connected.

2022-04-05T11:26:00.725Z        INFO    livekit rtc/room.go:225 new participant joined  {"room": "X8tGxiZ8jWlqLsEVzK1p", "roomID": "RM_PhMoAXQadoDE", "pID": "PA_K9oUjdYTFegz", "participant": "w44qrxPC2Ud2UVSGc7WbFMcW1ZX2", "protocol": 7, "options": {"AutoSubscribe":true}}
2022-04-05T11:26:00.981Z        ERROR   livekit.turn    [email protected]/server.go:184 error when handling datagram: failed to handle Allocate-request from 125.199.219.228:64247: integrity check failed
github.com/pion/turn/v2.(*Server).readLoop
        /go/pkg/mod/github.com/pion/turn/[email protected]/server.go:184
github.com/pion/turn/v2.NewServer.func1
        /go/pkg/mod/github.com/pion/turn/[email protected]/server.go:85

I connected the server using the sample code like below

room = await LiveKitClient.connect(
          LIVEKIT_SERVER,
          _token,
          roomOptions: options,
        );

client sdk version: 0.5.8
server version: 0.15.5

Would you please help me to solve this problem ?
I have been stuck in this for 3 days.

App crashes after connected on iOS with Flutter 3.0 stable

Problem

After upgraded Flutter to 3.0 stable, the app crashes each time after connected to the server.
This occurred on iphoneX device with iOS 15.4.

Log

flutter: 09:22:15: [EngineEvent] Engine#1052307608 EngineSubscriberPeerStateUpdatedEvent(state: RTCPeerConnectionState.RTCPeerConnectionStateConnecting, isPrimary: true)
flutter: 09:22:15: pc.getRemoteDescription Instance of 'RTCSessionDescription'
flutter: 09:22:16: [EngineEvent] Engine#1052307608 EngineSubscriberPeerStateUpdatedEvent(state: RTCPeerConnectionState.RTCPeerConnectionStateConnected, isPrimary: true)
flutter: 09:22:16: EventsEmitter<EngineEvent>#211189967 event was cancelled by func
flutter: 09:22:16: Engine ConnectionState connecting -> connected
flutter: 09:22:16: [EngineEvent] Engine#1052307608 EngineConnectionStateUpdatedEvent(newState: connected, didReconnect: false, disconnectReason: null)
[VERBOSE-3:platform_message_handler_ios.mm(106)] Check failed: task_runners_.GetPlatformTaskRunner()->RunsTasksOnCurrentThread().
* thread #24, name = 'signaling_thread 0x0x155f28300', stop reason = signal SIGABRT
    frame #0: 0x00000001bbf79bbc libsystem_kernel.dylib`__pthread_kill + 8
libsystem_kernel.dylib`__pthread_kill:
->  0x1bbf79bbc <+8>:  b.lo   0x1bbf79bd8               ; <+36>
    0x1bbf79bc0 <+12>: stp    x29, x30, [sp, #-0x10]!
    0x1bbf79bc4 <+16>: mov    x29, sp
    0x1bbf79bc8 <+20>: bl     0x1bbf7560c               ; cerror_nocancel
Target 0: (Runner) stopped.
Lost connection to device.

How to reproduce

Use the example app and build with Flutter 3.0 stable.

flutter doctor

flutter doctor -v
[✓] Flutter (Channel stable, 3.0.0, on macOS 12.3.1 21E258 darwin-x64, locale zh-Hans-JP)
    • Flutter version 3.0.0 at /Users/aldin/development/flutter
    • Upstream repository [email protected]:flutter/flutter.git
    • Framework revision ee4e09cce0 (6 天前), 2022-05-09 16:45:18 -0700
    • Engine revision d1b9a6938a
    • Dart version 2.17.0
    • DevTools version 2.12.2

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/aldin/Library/Android/sdk
    • Platform android-31, build-tools 31.0.0
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 13.3)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • 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.12+0-b1504.28-7817840)

[✓] VS Code (version 1.67.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.40.0

VideoParameters not exported

There are no VideoParameters (or VideoParametersPresets) available in the package.

It's missing an export 'src/types/video_parameters.dart'; on livekit_client.dart
note there are other src/types files not being exported, but I'm not sure if they all need to

tested on v0.5.9 (main doesn't seem to have it either)

Failed to run ios simulator: No such module 'WebRTC'

Swift Compiler Error (Xcode): No such module 'WebRTC'
/Users/xxxxx/Development/flutter/.pub-cache/hosted/pub.flutter-io.cn/livekit_client-1.0.0/ios/Classes/LiveKitPlugin.swift:0:7

Uncategorized (Xcode): Command CompileSwiftSources failed with a nonzero exit code

Could not build the application for the simulator.
Error launching application on iPhone 12 Pro Max.

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.0.1, on macOS 11.3.1 20E241 darwin-arm, locale zh-Hans-CN)
[✓] Android toolchain - develop for Android devices (Android SDK version 32.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 13.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2021.2)
[✓] VS Code (version 1.67.2)
[✓] Proxy Configuration
[✓] Connected device (4 available)
[✓] HTTP Host Availability

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.