diff --git a/.changes/add-agents-md b/.changes/add-agents-md deleted file mode 100644 index f0435cc89..000000000 --- a/.changes/add-agents-md +++ /dev/null @@ -1 +0,0 @@ -patch type="docs" "Add AGENTS.md with agent/contributor guidelines" diff --git a/.changes/add-certificate-pinning b/.changes/add-certificate-pinning deleted file mode 100644 index 764682c31..000000000 --- a/.changes/add-certificate-pinning +++ /dev/null @@ -1 +0,0 @@ -minor type="added" "Add native certificate pinning for SDK-owned connections" diff --git a/.changes/add-rpc-v2 b/.changes/add-rpc-v2 deleted file mode 100644 index 59675d828..000000000 --- a/.changes/add-rpc-v2 +++ /dev/null @@ -1 +0,0 @@ -minor type="added" "Add RPC v2 (data-stream-based payloads) with v1 fallback" diff --git a/.changes/agp9-built-in-kotlin b/.changes/agp9-built-in-kotlin deleted file mode 100644 index bb0857676..000000000 --- a/.changes/agp9-built-in-kotlin +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Android plugin compatibility with AGP 9 built-in Kotlin" diff --git a/.changes/android-media-routing b/.changes/android-media-routing deleted file mode 100644 index ce41071ba..000000000 --- a/.changes/android-media-routing +++ /dev/null @@ -1,3 +0,0 @@ -patch type="fixed" "Apply Android media audio attributes during WebRTC initialization" -patch type="fixed" "Use initialization audio options as the default Android session policy" -patch type="fixed" "Avoid sticky Android speaker routing when updating route preference" diff --git a/.changes/audio-engine-availability b/.changes/audio-engine-availability deleted file mode 100644 index 278cf7c3a..000000000 --- a/.changes/audio-engine-availability +++ /dev/null @@ -1 +0,0 @@ -minor type="added" "Audio engine availability and externalCallSystem mode for CallKit" diff --git a/.changes/audio-manager-api b/.changes/audio-manager-api deleted file mode 100644 index 2fd918ba1..000000000 --- a/.changes/audio-manager-api +++ /dev/null @@ -1 +0,0 @@ -minor type="added" "AudioManager audio session options with engine-driven native lifecycle and platform routing controls" diff --git a/.changes/audio-processing-create-cleanup b/.changes/audio-processing-create-cleanup deleted file mode 100644 index 780bd0711..000000000 --- a/.changes/audio-processing-create-cleanup +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Clean up local audio tracks when recording start fails" diff --git a/.changes/audio-processing-platform-gate b/.changes/audio-processing-platform-gate deleted file mode 100644 index 82d744616..000000000 --- a/.changes/audio-processing-platform-gate +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Throw platformUnavailable when runtime audio processing is unsupported" diff --git a/.changes/audio-processing-start-flow b/.changes/audio-processing-start-flow deleted file mode 100644 index 0ad50dd92..000000000 --- a/.changes/audio-processing-start-flow +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Apply create-time audio processing when local recording is prepared" diff --git a/.changes/broadcast-picker-private-selector b/.changes/broadcast-picker-private-selector deleted file mode 100644 index e1415c5dd..000000000 --- a/.changes/broadcast-picker-private-selector +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Remove non-public buttonPressed: selector from broadcast picker activation" diff --git a/.changes/connection-check b/.changes/connection-check deleted file mode 100644 index 015f81ce8..000000000 --- a/.changes/connection-check +++ /dev/null @@ -1 +0,0 @@ -minor type="added" "Add ConnectionCheck utility for diagnosing connection issues (port of the client-sdk-js connection helper)" diff --git a/.changes/desktop-audio-renderer b/.changes/desktop-audio-renderer deleted file mode 100644 index 5d7d4e392..000000000 --- a/.changes/desktop-audio-renderer +++ /dev/null @@ -1 +0,0 @@ -patch type="added" "Audio frame capture on Linux/Windows" diff --git a/.changes/fix-android-select-audio-output b/.changes/fix-android-select-audio-output deleted file mode 100644 index 4bcbe94a9..000000000 --- a/.changes/fix-android-select-audio-output +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Allow selectAudioOutput on Android" diff --git a/.changes/macos-video-platform-view b/.changes/macos-video-platform-view deleted file mode 100644 index 090f6c705..000000000 --- a/.changes/macos-video-platform-view +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Support platform video rendering on macOS" diff --git a/.changes/microphone-mute-mode b/.changes/microphone-mute-mode deleted file mode 100644 index 4809beca8..000000000 --- a/.changes/microphone-mute-mode +++ /dev/null @@ -1 +0,0 @@ -minor type="added" "Microphone mute mode control on iOS/macOS" diff --git a/.changes/render-platformview b/.changes/render-platformview deleted file mode 100644 index 88f82f802..000000000 --- a/.changes/render-platformview +++ /dev/null @@ -1 +0,0 @@ -patch type="changed" "Default VideoTrackRenderer renderMode to auto, which currently resolves to texture rendering" diff --git a/.changes/runtime-audio-options b/.changes/runtime-audio-options deleted file mode 100644 index f4a43122d..000000000 --- a/.changes/runtime-audio-options +++ /dev/null @@ -1 +0,0 @@ -minor type="added" "Runtime audio processing controls for local audio tracks" diff --git a/.changes/single-disconnect-event b/.changes/single-disconnect-event deleted file mode 100644 index f5f54f66c..000000000 --- a/.changes/single-disconnect-event +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Emit a single disconnected event when connecting fails" diff --git a/.changes/track-render-placeholder b/.changes/track-render-placeholder deleted file mode 100644 index aeb0b1ef9..000000000 --- a/.changes/track-render-placeholder +++ /dev/null @@ -1 +0,0 @@ -minor type="added" "Widget Placeholder added for VideoTrackRenderer" diff --git a/.changes/video-degradation-default b/.changes/video-degradation-default deleted file mode 100644 index f3edc2c76..000000000 --- a/.changes/video-degradation-default +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Use maintain-resolution as the default video degradation preference for local video publishing" diff --git a/.changes/video-render-mode-switch b/.changes/video-render-mode-switch deleted file mode 100644 index 3fe14c9a5..000000000 --- a/.changes/video-render-mode-switch +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Handle switching video render modes without stale renderers" diff --git a/.version b/.version index 834f26295..c8e38b614 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -2.8.0 +2.9.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f1778128..2feddf058 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,36 @@ # CHANGELOG +## 2.9.0 + +* Added: Add native certificate pinning for SDK-owned connections +* Added: Add RPC v2 (data-stream-based payloads) with v1 fallback +* Added: Audio engine availability and externalCallSystem mode for CallKit +* Added: AudioManager audio session options with engine-driven native lifecycle and platform routing controls +* Added: Add ConnectionCheck utility for diagnosing connection issues (port of the client-sdk-js connection helper) +* Added: Audio frame capture on Linux/Windows +* Added: Microphone mute mode control on iOS/macOS +* Added: Runtime audio processing controls for local audio tracks +* Added: Widget Placeholder added for VideoTrackRenderer +* Changed: Default VideoTrackRenderer renderMode to auto, which currently resolves to texture rendering +* Fixed: Apply Android media audio attributes during WebRTC initialization +* Fixed: Use initialization audio options as the default Android session policy +* Fixed: Avoid sticky Android speaker routing when updating route preference +* Fixed: Clean up local audio tracks when recording start fails +* Fixed: Throw platformUnavailable when runtime audio processing is unsupported +* Fixed: Apply create-time audio processing when local recording is prepared +* Fixed: Remove non-public buttonPressed: selector from broadcast picker activation +* Fixed: Allow selectAudioOutput on Android +* Fixed: Support platform video rendering on macOS +* Fixed: Emit a single disconnected event when connecting fails +* Fixed: Handle switching video render modes without stale renderers +* Docs: Add AGENTS.md with agent/contributor guidelines + +## 2.8.1 + +* Added: Add agent deployment targeting to token source options +* Fixed: Android plugin compatibility with AGP 9 built-in Kotlin +* Fixed: Use maintain-resolution as the default video degradation preference for local video publishing + ## 2.8.0 * Added: Session API support for simpler E2EE setup diff --git a/README.md b/README.md index 5adcddd3b..5f8cc62e8 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ Include this package to your `pubspec.yaml` ```yaml --- dependencies: - livekit_client: ^2.8.0 + livekit_client: ^2.9.0 ``` ### iOS @@ -161,7 +161,7 @@ await AudioManager.instance.setAudioSessionOptions( ); ``` -See the [audio session guide](https://github.com/livekit/client-sdk-flutter/blob/main/docs/audio.md) for more. +See the [audio session guide](https://github.com/livekit/client-sdk-flutter/blob/main/doc/audio.md) for more. ### Desktop support @@ -411,7 +411,7 @@ Widget build(BuildContext context) { Audio tracks are played automatically as long as you are subscribed to them. -LiveKit owns the platform audio session through `AudioManager`. A call is managed automatically with no setup. Speaker routing and, when you need it, manual session control go through the same object. See the [audio session guide](https://github.com/livekit/client-sdk-flutter/blob/main/docs/audio.md) for examples covering the automatic and manual modes, speaker routing, per platform overrides, and migration from the older `Hardware` APIs. +LiveKit owns the platform audio session through `AudioManager`. A call is managed automatically with no setup. Speaker routing and, when you need it, manual session control go through the same object. See the [audio session guide](https://github.com/livekit/client-sdk-flutter/blob/main/doc/audio.md) for examples covering the automatic and manual modes, speaker routing, per platform overrides, and migration from the older `Hardware` APIs. ```dart // A call is managed automatically. Route to the speaker when you want. diff --git a/docs/audio.md b/doc/audio.md similarity index 100% rename from docs/audio.md rename to doc/audio.md diff --git a/ios/livekit_client.podspec b/ios/livekit_client.podspec index 004152ca5..ce265d3b6 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.8.0' + s.version = '2.9.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 c50ede2f8..e498006d8 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.8.0'; + static const version = '2.9.0'; /// Initialize the WebRTC plugin. /// diff --git a/macos/livekit_client.podspec b/macos/livekit_client.podspec index d96841f45..938cf4389 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.8.0' + s.version = '2.9.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 1dc6e6240..62f33f52e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,9 +15,13 @@ 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.8.0 +version: 2.9.0 homepage: https://github.com/livekit/client-sdk-flutter +# Test fixture keys for certificate pinning tests, not real secrets. +false_secrets: + - /test/support/certificate_pinning_io_test.dart + environment: sdk: ">=3.6.0 <4.0.0" flutter: ">=3.27.0"