49 Commits

Author SHA1 Message Date
CloudWebRTC 7b72721560 fix SpeakerPhone switch for mobile. (#312)
* fix SpeakerPhone switch for mobile.

* update.
2023-06-30 14:47:49 +08:00
CloudWebRTC 272484ce7e feat: Stats monitor for Track. (#290)
* feat: Stats monitor for Track.

* fix analyze.

* fix.

* import sorter.

* add monitor layer for example.

* update.

* update.

* fix import sorter.

* update.

* import sorter.

* fix typo for filename.

* revert changes for VideoPublishOptions.videoCodec.

* chore: improve code.

* update.
2023-06-01 16:15:37 +08:00
CloudWebRTC 4f697ca867 fix bluetooth device enumerate. (#281)
* fix bluetooth device enumerate.

* update README.md

* dart format.

* revert pubspec.yaml.

* fix analyzer.
2023-05-11 17:29:33 +08:00
CloudWebRTC 26947e96d6 e2ee. (#226)
* chore: e2ee.

* update.

* update.

* update.

* update.

* chore: Use feat/frame-encryption branch of flutter-webrtc.

* chore: Add E2EEKEY defines for dart environment, and e2ee switch.

* Add encodedInsertableStreams to RTCConfiguration.

* update.

* feat: Add e2ee indicator for Participant.

* feat: add e2ee worker js for flutter web.

* dart format.

* remove unused file.

* fix flutter analyze .

* update.

* update.

* add: indicate for decryption failure, and string key.

* remove .lock files.

* update.

* update.

* update e2ee.worker for web.

* feat: support setCodecPreferences.

* state TrackE2EEStateEvent.

* fix wrong import interface from dart_webrtc.

* update.

* update.

* update.

* update.

* update pubspec.lock.

* chore: update protocol and add EncryptionType for Participant.

* Update lib/src/e2ee/options.dart

Co-authored-by: Théo Monnom <theo.monnom@outlook.com>

* fix typo.

* revert changes for internal import.

* Add _cleanUp() for previous room.

* Add e2ee supports detection method for native/web.

* Remove redundant overriding methods.

* dart format.

* Add e2ee.worker code and deployment docs.

* chore: remove duplicate words.

* chore: using Pbkdf2 derive the key.

* Update pubspec.yaml

* fix e2ee for safari.

* fix key length.

* update e2ee.worker.dart.js.

* fix.

* update proto.

* update.

* chore: add simulate for rachetKey.

* update.

* chore: key ratchet for flutter web.

* update.

* update.

* update.

* chore: key ratchet export for web.

* bump version for xframeworks.

* update.

* chore: some changes for key safety ratcheting.

* update.

* fix typo.

* update.

* rename.

* magic bytes for web.

* bump version for flutter-webrtc.

* fix analyzer.

---------

Co-authored-by: Théo Monnom <theo.monnom@outlook.com>
2023-04-27 17:54:32 +08:00
CloudWebRTC 59ee3105fb feat: Support setVideoFPS for subscribe. (#258)
* feat: Support setVideoFPS for subscribe.

* Update lib/src/publication/remote.dart

Co-authored-by: David Zhao <dz@livekit.io>

* Add comment for setVideoFPS.

---------

Co-authored-by: David Zhao <dz@livekit.io>
2023-03-15 15:51:15 +08:00
CloudWebRTC db2e25d424 feat: web/native device consistency management (#243)
* fix: Force audio settings to be consistent.

* chore: applyAudioSettings for onUnpublish.

* revert audio output select for web.

* add RoomHardwareManagementMethods to Room.

* update.

* fix analyze.

* update.

* update.

* chore: Reset sinkId for web when remoteTrack replays.

* rename setAudioOutput to setSinkId for flutter web.

* chore: Make sure AudioElement has `setSinkId` method.
2023-03-07 17:54:06 +08:00
CloudWebRTC 70e6589981 feat: audio output select for web. (#247)
* feat: audio output select for web.

* chore: Add comments for VideoTrackRenderer.

* update.
2023-03-06 10:53:45 +08:00
CloudWebRTC 5c4761bc7c Fix: re-publish tracks after re connect (#238)
* fix republish local tracks after reconnect.

* update flutter-webrtc.

* remove unused import.

* add dart_webrtc.

* cleanup.

* fix: Fix sendSyncState timing error, when reconnecting is sending.

* Adjust the re-connect logic to ensure that the publisher negotiates and reconnects correctly.

* Update room.dart
2023-02-17 09:04:56 +08:00
CloudWebRTC 5d727bee5d [Android] fix screen sharing crash on first boot (#203)
* fix screen sharing crash on first boot.

* update.

* update.

* Update controls.dart
2023-02-03 14:59:49 +08:00
cloudwebrtc 06783cad5c release: 1.1.9. 2022-11-28 11:20:56 +08:00
CloudWebRTC 27ea869443 fix: stop audio track on mute. (#207)
* fix: stop audio track on mute.

* chore: Let audioBitrate preset to music.

* update.

* update depends.

* update.
2022-11-14 19:13:48 +08:00
CloudWebRTC 0d8441ebfb e2e: fix resume/full-reconnect. (#194)
* fix: full re-connect.

* chore: Reset fullReConnect state after ConnectionState is emitted.

* Support full reconnect, fix Migration, NodeFailure, FullReconnect test cases.

* revert Timeouts.connection.

* update.

* Refactor the resume/reconnect implementation.

* more changes.

* update.

* Changed to simpler reconnect/recovery logic.

* update.

* update.

* code format.

* tidy.

* bump version for flutter-webrtc.

* chore: Remove unused exception class (SignalReconnectError).

* chore: rename `fullReconnectOnNext` to `fullReconnect`.

* update.

* chore: Revert changes for `unpublishTrack`.

* chore: Reconnect signalClient when resumeConnection.

* revert `rethrow` in engine.connect.

* Use removePublishedTrack instead of unpublishTrack (RemoteParticipant).

* chore: Correctly handle PeerConnectionState for resume/full-reconnect.

* tidy.
2022-11-08 16:06:09 +08:00
CloudWebRTC a60a2e861c chore: Add simulate for candidate protocol switch. (#176) 2022-09-20 17:47:38 +08:00
CloudWebRTC cbdfa634a3 feat: Support for capturing audio for chrome tab. (#158)
* feat: Support for capturing audio for chrome tab.

* Update code comments.
2022-09-07 15:15:11 +08:00
CloudWebRTC 82e8a9eedf fix: close issue #154. (#155) 2022-09-07 10:13:32 +08:00
CloudWebRTC 1d621501f7 Add hardware api for camera, audio input/output selection. (#147)
* chore: Add hardware api for device settings dialog, camera preview, audio input/output selection.

* update.

* update flutter-webrtc.

* chore: add popupmenu for audio/video selection.

* chore: Improve menu tooltip text.

* Removed hardware settings dialog, added it to experimental branch.

* remove unused code.

* Respond to device changes.

* fixed `flutter analyze`.

* update.

* bump verion to v1.1.1.
2022-08-24 12:41:11 +08:00
CloudWebRTC a554d92543 screen sharing for desktop. (#135)
* screen sharing for desktop (WIP).

* use git repo for testing.

* update.

* Add sourceId/frameRate to ScreenShareCaptureOptions.

* Compatible with flutter web.

* Rendering of camera and screenshare video tracks at same time.

* Remote screen sharing is shown first, and fixed sub/unsub button for screenshare widget.

* resolved conflict.

* modify flutter-webrtc to pub version.

* remove unused import.

* chore: Common params for Camera and ScreenShare.
2022-08-02 11:17:09 +08:00
Hiroshi Horie ead3a7ea6a move sendSimulateScenario 2022-03-06 14:06:39 +09:00
davidliu 9bd546b9a2 tests and mocks for e2e testing (#78)
* tests and mocks for e2e testing

* formatting

* fix analyze errors
2022-02-06 20:36:42 +09:00
Hiroshi Horie 224047c31f Session migration (#72)
* impl

* retry logic

* simulate

* pass checks

* adjust log level

* retry condition

* fix simulate scenario params

* format

* use `RTCPeerConnectionState` instead of `RTCIceConnectionState`

* adjust retry

* additional check for completer

* more logging

* fix id

* pub

* change package

* doc update

* retry tests

* format

* apply suggestions
2022-01-25 00:53:18 +07:00
Hiroshi Horie aef1fd8804 Subscription permission API (#68)
* signal

* request

* implement

* rename event

* ref

* adjustments based on review

* override subscribed

* move events emit

* fix subscription state

* minor change

* update example for permissions demo

* format & subscriptionState as computed property

* prepare macos build

* unsubscribed event when subscription not allowed
2022-01-10 23:48:44 +07:00
Hiroshi Horie 44a42eafea name field for participant 2022-01-02 01:38:54 +07:00
Hiroshi Horie 38328c5e0d Fix: Visibility Optimization randomly not working (#65)
* use widget id instead of state id

* ignore local video view events

* switch remote view visibility also

* use Key for a reliable id

* remove local check

* clean up

* redesign

* check mounted

* remove mount check

* more optimization

* quick wake up

* mark internal

* rename to adaptiveStream
2022-01-01 12:59:24 +07:00
Hiroshi Horie 94b4b07e92 fix reconnect logic 2021-12-23 01:50:58 +07:00
Hiroshi Horie b91c822fba more docs 2021-12-12 19:09:38 +07:00
Artur Shellunts b6b48ea310 Fix rendering of remote shared screen (#50)
Fix activeVideoTrack to return any unmuted stream, not only first one in the list.
2021-12-07 11:28:25 +01:00
Hiroshi Horie 0f5a758cd4 Create room without connecting (#49)
* initial commit

* fix example compile

* format

* clean up

* fix check

* missing import
2021-12-07 17:02:58 +07:00
Hiroshi Horie d20a6e2ddb fix compiling since VideoQuality moved to another file 2021-12-07 12:30:46 +07:00
Hiroshi Horie 5ce12dae85 use setScreenShareEnabled for example 2021-12-07 02:04:08 +07:00
Hiroshi Horie 01902ef7eb example clean up 2021-12-02 14:28:59 +07:00
Hiroshi Horie 64a243a312 update example (no casting) 2021-12-02 14:21:41 +07:00
Hiroshi Horie 44864ff525 Type-aware Publication etc (static typing) (#43)
* implemented

* format

* add missing type
2021-12-01 12:15:09 +07:00
Hiroshi Horie 8037d80674 Release camera/mic when muted, restartTrack when unmuted (#39)
* re-structure tracks

* publication.track is now a LocalTrack or RemoteTrack

* restartTrack when unmute

* stop/start on restartTrack

* move to mute/unmute

* format

* remove comment
2021-11-30 15:58:19 +07:00
David Zhao 66dbc94c1a Use high level track APIs in example app & docs (#36) 2021-11-26 23:51:37 -08:00
Hiroshi Horie 4f0973ce66 Match muted behavior with JS SDK (#32)
* attempt 1

* implement

* clean up

* clean up

* cleaner code

* mute was opposite

* fix suggestion

* fix local pub muted

* update example

* update pubs

* format
2021-11-20 02:39:52 +07:00
davidliu 4a59a1e6d5 android screenshare example and touch ups (#31) 2021-11-17 17:11:46 +09:00
Hiroshi Horie 88799f8b76 simplified api example 2021-11-11 22:00:26 +09:00
Hiroshi Horie b2b7d86800 example: turn off autocorrect 2021-11-10 01:31:22 +09:00
Hiroshi Horie d31daa5d8e Connection quality (#27)
* update protos

* signal event

* implemented

* format

* implement example

* protocol 5

* icon size
2021-11-06 17:36:47 +09:00
Hiroshi Horie 16910cae25 Video optimizations (#18)
* use events for `VideoTrackRenderer`

* logger

* implemented visibility detection

* optimize code with 1 param debounce func

* stop pending visibility event when disposed

* clean up

* mark internal

* report to track

* call dispose on pub and track

* use internal events to receive visibility events

* clean up visibility for disposed track

* listen to track visibility events on pub

* re-design

* quickly re-enable

* clean up

* clean up
2021-10-25 18:34:02 +09:00
Hiroshi Horie d065c2eb97 example app design update & show active speaker 2021-10-25 02:08:26 +09:00
Hiroshi Horie 4b29534e95 remove mute/unmute from example 2021-10-22 03:06:24 +09:00
Hiroshi Horie 6bba6b4006 Improve example for better feature testing (#21)
* fixed

* format

* set track to null

* rearrange

* toggle subscribed

* clean

* `RemoteTrackPublicationMenuWidget` for mute/unmute subscribe/unsubscribe
2021-10-21 21:11:25 +09:00
Hiroshi Horie 48e03b84cb Create android & web plugins (#15)
* create android & web plugins

* apply `flutter format .`
2021-10-02 15:20:41 +09:00
Hiroshi Horie b67c807fd5 Organize events (#13)
* move internal events & remove unused events

* `TrackUnpublishedEvent` for local tracks

* update example since we have local track unpublish events

* use flutter_webrtc 0.6.9
2021-10-01 16:56:36 +09:00
Hiroshi Horie 001f688729 Better audio management (#10)
* add audio_session package

* `AudioManager` initial design

* try to integrate audio manager

* configure audio session

* `DisposeAware`

disposing if already published causes exception.

* organize

* guard flutter_webrtc calls

* websocket async fix

* use `ConnectionState` instead of `_isClosed` and `isReconnecting`

* change create audio track defaults

* update protos

* protocol 3 speaker updates

* fix exception

* emit `RoomDisconnectedEvent` only once

* fix exception

* keep track of local / remote audio tracks

* explicit types

* manage track state

* re-structure audio management

* change defaults

* unpublish all

* use experimental build

* change defaults

* configuring is optional

* call native `RTCAudioSession.setConfiguration`

* defaults adjustment

* iOS only for now

* use lib 92.4515.07

* clean up

* revert audio options for now

* remove pod source

* rename apple related audio

* `createListener` method

* organize native audio

* `SpeakingChangedEvent` only on `Participant`

* refactoring

* fix ios compile

* fix configure audio only for iOS logic

* minor fix & clean up

* change dispose logic

* format protos

* fix unpublishTrack

* `createListener` into a mixin

* simplify

* use flutter_webrtc master

* unpublish for example

* update ios icon

* android icon

* web icon

* favicon
2021-10-01 02:47:18 +09:00
Hiroshi Horie 6445b8d2a8 Switch to new event system (#9)
* `SignalEvents` and `synchronized` mode for `EventsListenable`

* cascade syntax

* clean up

* `RoomEvents`

* `ParticipantEvents`

* all events implemented

* make it compile with M1 macs

* dispose logic

* cleaner connect logic

* ask to publish

* fix initial EngineTrackAddedEvent glitch

* fix unpublishTrack bug

* clean up

* better events docs

* organize event types

* clean up

* cleaner wait logic

* wait for event instead of using Completer

* notifyListeners
2021-09-24 23:37:26 +09:00
Hiroshi Horie f4bd82a919 Subscriber as primary (#8)
* Update protos

* Signal client

* Improve transport

* First implementation

* Fix publish

* Update `PCTransport` for debounce negotiation

* debounce func

* reconnect & events

* Update debounce func

* engine events

* make sure events don't emit after dispose

* prefix flutter_webrtc

* Cleaner `iceServers` update

* don't mutate user provided params

* fix tests

* event manager

* Fix: `Room.onDisconnected` gets fired multiple times

* data publish in example

* cleaner logic

* safer events

* un-prefix with LK

* organize imports

* Clean up

* remove `Tuple`

* `EventsEmitter` can now be directly listened to

`EventsEmitter` extends `EventsListenable`
2021-09-18 00:10:16 +09:00
Hiroshi Horie 50f56c5e1e Simulcast, Screen sharing & Various improvements (#4)
* Respect `RTCIceTransportPolicy` enum and organize

* Simplify syntax where possible etc.

* Combine `VideoPreset` and `VideoPresets`

* Default values for `ConnectOptions`

* Build URI instead of String manipulation

* Slight modifications to Exception

* `LiveKitTheme` for example

* `VideoEncoding` class

* Organize imports

* First simulcast implementation

* Remove unnecessary try-catches

* Update Android settings

* Remember uri and token

* example improvements

* `fit` parameter for VideoTrackRenderer

* Simulcast option for example

* Pass `defaultPublishOptions`

* Show only `VideoQuality`

* Pass tests

* Better buildUri logic

* Named parameter to positional

* Explicit imports

* `VideoParameter` instead of `VideoPreset`

* Use `mediaTrack.getSettings` when possible

* Safer dispose logic

* Safer `PCTransport`

Update transport.dart

* Synchronized events for `SignalClient`

* Use logger instead of print

* Make example compile for iOS

* First screen share implementation

* Make example work with screen share

* Example improvement

* Code optimization

* Don't depend on web_socket_channel

* Fix: Unpublish track bug

* Show participant mute state & identity

* Update protos

* Remote mute/unmute

* iOS Background mode

* Separate `createCameraTrack` and `createScreenTrack`

* Clean up

* PB fix

* format

* Fix analyzer warning

* Android clean up

* Update README.md

* Clean up
2021-09-11 03:14:14 +09:00