diff --git a/.changes/android-prewarm-recording-non-fatal b/.changes/android-prewarm-recording-non-fatal deleted file mode 100644 index 20466d158..000000000 --- a/.changes/android-prewarm-recording-non-fatal +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Android: a failed local recording pre-warm no longer aborts microphone capture with AudioProcessingException(applyFailed)" diff --git a/.changes/audio-engine-error-mapping b/.changes/audio-engine-error-mapping deleted file mode 100644 index 56f911842..000000000 --- a/.changes/audio-engine-error-mapping +++ /dev/null @@ -1 +0,0 @@ -patch type="changed" "Microphone permission and audio session failures now throw TrackCreateException / AudioSessionException instead of AudioProcessingException" diff --git a/.changes/audio-session-exception b/.changes/audio-session-exception deleted file mode 100644 index a6d8645fe..000000000 --- a/.changes/audio-session-exception +++ /dev/null @@ -1 +0,0 @@ -patch type="added" "Add AudioSessionException for iOS audio session failures" diff --git a/.changes/caching-token-source-await b/.changes/caching-token-source-await deleted file mode 100644 index 3e8546c02..000000000 --- a/.changes/caching-token-source-await +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "CachingTokenSource.fetch now awaits its result, so errors surface and the in-flight entry is cleared correctly" diff --git a/.changes/json-serializable-unpin b/.changes/json-serializable-unpin deleted file mode 100644 index d17c6dc68..000000000 --- a/.changes/json-serializable-unpin +++ /dev/null @@ -1 +0,0 @@ -patch type="changed" "Update json_annotation to 4.12 and regenerate serialization code with json_serializable 6.14" diff --git a/.changes/key-provider-discard-frame-option b/.changes/key-provider-discard-frame-option deleted file mode 100644 index d5777b429..000000000 --- a/.changes/key-provider-discard-frame-option +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "BaseKeyProvider.create now honors the discardFrameWhenCryptorNotReady option instead of always using the default" diff --git a/.changes/linux-taskrunner-use-after-free b/.changes/linux-taskrunner-use-after-free deleted file mode 100644 index f3066b634..000000000 --- a/.changes/linux-taskrunner-use-after-free +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Fix use-after-free crash in TaskRunnerLinux::EnqueueTask when the runner is destroyed before the main loop dispatches a queued task" diff --git a/.changes/mic-permission-before-capture b/.changes/mic-permission-before-capture deleted file mode 100644 index 5c53625c7..000000000 --- a/.changes/mic-permission-before-capture +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "iOS/macOS: request microphone permission before audio capture starts, failing fast with TrackCreateException while the app is not in the foreground" diff --git a/.changes/native-audio-session-preset b/.changes/native-audio-session-preset deleted file mode 100644 index 5b6e51de8..000000000 --- a/.changes/native-audio-session-preset +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "iOS: the audio session is configured from engine state even before a policy is pushed (pre-connect audio, pre-join mic, playout-only), fixing audio engine error -9001" diff --git a/.changes/preconnect-buffer-cleanup b/.changes/preconnect-buffer-cleanup deleted file mode 100644 index 53a6596af..000000000 --- a/.changes/preconnect-buffer-cleanup +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Pre-connect audio buffer returns to a reusable state when recording fails to start, instead of ignoring retries and leaking the agent timeout" diff --git a/.changes/raise-floor-flutter-338 b/.changes/raise-floor-flutter-338 deleted file mode 100644 index c8697e9ea..000000000 --- a/.changes/raise-floor-flutter-338 +++ /dev/null @@ -1 +0,0 @@ -minor type="changed" "Raise minimum supported versions to Flutter 3.38 / Dart 3.10, the floor for stable native assets support" diff --git a/.changes/subscriber-dc-state-events b/.changes/subscriber-dc-state-events deleted file mode 100644 index 896e2155c..000000000 --- a/.changes/subscriber-dc-state-events +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Subscriber data channel state events now report the subscriber channel state and correct reliability type, and no longer leak listeners" diff --git a/.changes/utf8-send-text b/.changes/utf8-send-text deleted file mode 100644 index 95ac1e142..000000000 --- a/.changes/utf8-send-text +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "sendText declares the UTF-8 byte length in the stream header, fixing rejected text streams containing non-ASCII characters" diff --git a/.version b/.version index 46b81d815..d8b698973 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -2.11.0 +2.12.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index 66d7294a4..84161fc05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,21 @@ # CHANGELOG +## 2.12.0 + +* Added: Add AudioSessionException for iOS audio session failures +* Changed: Microphone permission and audio session failures now throw TrackCreateException / AudioSessionException instead of AudioProcessingException +* Changed: Raise minimum supported versions to Flutter 3.38 / Dart 3.10, the floor for stable native assets support +* Changed: Update json_annotation to 4.12 and regenerate serialization code with json_serializable 6.14 +* Fixed: BaseKeyProvider.create now honors the discardFrameWhenCryptorNotReady option instead of always using the default +* Fixed: Pre-connect audio buffer returns to a reusable state when recording fails to start, instead of ignoring retries and leaking the agent timeout +* Fixed: Subscriber data channel state events now report the subscriber channel state and correct reliability type, and no longer leak listeners +* Fixed: CachingTokenSource.fetch now awaits its result, so errors surface and the in-flight entry is cleared correctly +* Fixed: sendText declares the UTF-8 byte length in the stream header, fixing rejected text streams containing non-ASCII characters +* Fixed: Android: a failed local recording pre-warm no longer aborts microphone capture with AudioProcessingException(applyFailed) +* Fixed: iOS: the audio session is configured from engine state even before a policy is pushed (pre-connect audio, pre-join mic, playout-only), fixing audio engine error -9001 +* Fixed: iOS/macOS: request microphone permission before audio capture starts, failing fast with TrackCreateException while the app is not in the foreground +* Fixed: Fix use-after-free crash in TaskRunnerLinux::EnqueueTask when the runner is destroyed before the main loop dispatches a queued task + ## 2.11.0 * Added: New DisconnectReason members for newer server disconnect reasons, previously reported as unknown diff --git a/README.md b/README.md index e9a6b01c0..a7b1955cc 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ Include this package to your `pubspec.yaml` ```yaml --- dependencies: - livekit_client: ^2.11.0 + livekit_client: ^2.12.0 ``` ### iOS diff --git a/ios/livekit_client.podspec b/ios/livekit_client.podspec index 31f817fb4..e4b3795bc 100644 --- a/ios/livekit_client.podspec +++ b/ios/livekit_client.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'livekit_client' - s.version = '2.11.0' + s.version = '2.12.0' s.summary = 'Open source platform for real-time audio and video.' s.description = 'Open source platform for real-time audio and video.' s.homepage = 'https://livekit.io/' diff --git a/lib/src/livekit.dart b/lib/src/livekit.dart index c8f5e2fc6..6f73d284d 100644 --- a/lib/src/livekit.dart +++ b/lib/src/livekit.dart @@ -23,7 +23,7 @@ import 'support/webrtc_initialize_options.dart'; /// Main entry point to connect to a room. /// {@category Room} class LiveKitClient { - static const version = '2.11.0'; + static const version = '2.12.0'; /// Initialize the WebRTC plugin. /// diff --git a/macos/livekit_client.podspec b/macos/livekit_client.podspec index bccde255c..e96b9ca24 100644 --- a/macos/livekit_client.podspec +++ b/macos/livekit_client.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'livekit_client' - s.version = '2.11.0' + s.version = '2.12.0' s.summary = 'Open source platform for real-time audio and video.' s.description = 'Open source platform for real-time audio and video.' s.homepage = 'https://livekit.io/' diff --git a/pubspec.yaml b/pubspec.yaml index 1fb555319..82dc7e81b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ name: livekit_client description: Flutter Client SDK for LiveKit. Build real-time video and audio into your apps. Supports iOS, Android, and Web. -version: 2.11.0 +version: 2.12.0 homepage: https://github.com/livekit/client-sdk-flutter # Test fixture keys for certificate pinning tests, not real secrets.