NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #2921 most downloaded on pub.dev
Flutter WebRTC plugin for iOS/Android/Destkop/Web, based on GoogleWebRTC.
Last release 1 months ago
03 Sep 2026
Ships fairly regularly
a new release about every 3 weeks
Nearly every release is documented
notes for 39 of 42 stable releases
2 versions withdrawn
withdrawn after publishing
2 years old
45 releases · first in 2024
One column per month.
feat: encription manager bridge + webrtc m145.16.0 bump by @Brazol in #83
Full Changelog: stream_webrtc_flutter-v3.1.0...stream_webrtc_flutter-v3.2.0
feat: Audio device module level mute channel method added by @Brazol in #79
NativePeerConnectionFactory.setMicrophoneMuted (appleAdmSetMicrophoneMuted method channel): mutes microphone capture at the audio-device-module level while the audio engine keeps running. Mutes inside the Voice-Processing I/O unit, arming Apple's muted-talker detection so the plugin emits onSpeechActivityChanged events while the user speaks muted.NativePeerConnectionFactory.isMicrophoneMuted (appleAdmIsMicrophoneMuted method channel): reads the ADM's own mute state.setMicrophoneMuted calls could previously be applied out of order, leaving the microphone in the wrong state indefinitely.suspendAudioPeerConnectionFactory / resumeAudioPeerConnectionFactory are now idempotent. A second suspend used to re-snapshot the already-stopped ADM as "was neither playing nor recording", so the following resume restored nothing and audio stayed dead.RTCVideoPlatformView now renders through RTCVideoRenderingView on the shared-Metal backend, mirroring the Swift SDK's VideoRenderer configuration, instead of converting frames and enqueuing them onto an AVSampleBufferDisplayLayer by hand. This also drops the hand-rolled rotation transform, whose 270° case divided by zero and produced an invalid transform.FlutterRTCVideoPlatformViewController.setVideoTrack had its detach condition inverted, so it removed the renderer only when there was no previous track - switching tracks left the old one still rendering into the view.fix(iOS): remove private api use from broadcast picker by @Brazol in #80
RPSystemBroadcastPickerView) via public APIs instead of the private buttonPressed: selector.CI: add least-privilege permissions to GitHub Actions workflows by @peter-matkovski in #76
Full Changelog: stream_webrtc_flutter-v3.0.0...stream_webrtc_flutter-v3.0.1
android.builtInKotlin=false), set the JVM target through the kotlin { compilerOptions {} } DSL when available, and fall back to the legacy kotlinOptions DSL for apps still on Kotlin Gradle Plugin 1.8.x. (#2075)fix missing result callback in video effects method by @Brazol in #70
Per-call peer connection factory architecture
This release introduces a fully isolated per-call PC factory model: each call now owns its own PeerConnectionFactory. This eliminates cross-call audio interference and gives every call independent lifecycle control over its media resources. Apps integrating directly against this fork must migrate to the new NativePeerConnectionFactory API.
Breaking changes
createPeerConnection, getUserMedia, getDisplayMedia, createLocalMediaStream, getRtp*Capabilities, requestCapturePermission, startLocalRecording, stopLocalRecording) now require a NativePeerConnectionFactory instance on Android/iOS/macOS.factoryId return an error.getRtpSenderCapabilities / getRtpReceiverCapabilities are deprecated - call them on a NativePeerConnectionFactory instead.WebRTC.initialize: replaced options['reinitialize'] with bool refresh = false. Re-initialization no longer disposes existing PeerConnections, tracks, or streams. It refreshes build defaults for the next factory.FlutterWebRTCPlugin.peerConnectionFactory. Use factories[factoryId], resolveFactoryForId(), or resolveFactoryForStreamId().MethodCallHandlerImpl no longer lazily creates a default AudioProcessingController. Register one via FlutterWebRTCPlugin.sharedSingleton.setAudioProcessingFactoryProvider(...) if you need an external APM.frameCryptorFactory getter now throws UnimplementedError. FrameCryptor will be re-added in a future release.New
NativePeerConnectionFactory — representing one native factory with an isolated ADM per call.stream-video-swift-webrtc 145.9.0).Audio lifecycle
AudioProcessingFactory providers (e.g. noise cancellation) - only one non-suspended factory may hold the process-global APM at a time. Call suspendAudio() on the current holder to transfer.Fixes
setAppleAudioConfiguration now uses the atomic setCategory API, preventing Bluetooth route drops during mid-transition category changes.[iOS] Fixed missing result callback in video effects method.
fix: fixed audioPlayout pause on iOS by @Brazol in #69
Full Changelog: stream_webrtc_flutter-v2.2.5...stream_webrtc_flutter-v2.2.6
feat: audio configuration reinitialization, stereo support on Android and iOS by @Brazol in #66
Helper.setiOSStereoPlayoutPreferred(), Helper.isiOSStereoPlayoutEnabled(), and Helper.refreshiOSStereoPlayoutState() to enable and manage stereo audio playout. When enabled, the native layer configures the ADM for stereo output, bypasses voice processing, and automatically re-evaluates stereo state on audio route changes.WebRTC.initialize(options: {'reinitialize': true}) to allow reconfiguring audio and video parameters (e.g., audioSampleRate, audioOutputSampleRate) at runtime without requiring an app restart.samsung noise cancelation tweaks by @Brazol in #58
Full Changelog: stream_webrtc_flutter-v2.2.3...stream_webrtc_flutter-v2.2.4
Fix concurency issuse on local tracks by @Brazol in #57
Full Changelog: stream_webrtc_flutter-v2.2.2...stream_webrtc_flutter-v2.2.3
feat: android screen share audio by @Brazol in #55
Full Changelog: stream_webrtc_flutter-v2.2.1...stream_webrtc_flutter-v2.2.2
chore: sync with flutter_webrtc 1.2.1 by @Brazol in #53
chore: added webrtc versions consts by @Brazol in #49
Helper.pauseAudioPlayout() / Helper.resumeAudioPlayout() to mute and restore remote playback with platform-specific handling for iOS/macOS and Android.handleCallInterruptionCallbacks). It now uses AudioSwitch and won't trigger unwanted interaction detections when focus is requested.
androidAudioAttributesUsageType and androidAudioAttributesContentType parameters in handleCallInterruptionCallbacks are now not needed and deprecated.regainAndroidAudioFocus method that requests audio focus in case it was lost with no automatic regain.[iOS] Added Swift Package Manager (SPM) support to iOS.
[Android] Fixed the camera device facing mode detection.
Nothing published for this version
Exposed eventStream in MediaDevices.
eventStream in MediaDevices.[Android] Changed the configuration used when creating EGL rendering context to one that supports alpha channel to fix an issue with Impeller blending
[Android] Added option to configure Android audio attributes in AudioFocusManager
[Linux/Windows] added missing cloneTrack method
[Android] fix: disable software encoding for certain codecs.
ConstraintsMap.[Android] Fix getLocalDescription throwing an exception when it's null
getLocalDescription throwing an exception when it's nullAdded handleCallInterruptionCallbacks method to provide an option to handle system audio interruption like incoming calls, or other media playing
handleCallInterruptionCallbacks method to provide an option to handle system audio interruption like incoming calls, or other media playing[iOS] Added native audio route picker for iOS
[iOS] Bumped StreamWebRTC version to 125.6422.070
[1.0.4] retracted - 2025-04-29
Nothing published for this version
Reverted to using onSurfaceDestroyed in SurfaceTextureRenderer for compatibility with Flutter 3.27.
onSurfaceDestroyed in SurfaceTextureRenderer for compatibility with Flutter 3.27.[Android] Fixed orientation aware screen sharing to work with landscape-first devices
clearAndroidCommunicationDevice call blocking.Fixed the dart_webrtc version constraint
Bumped StreamWebRTC version to 125.6422.065
Replaced deprecated onSurfaceDestroyed with onSurfaceCleanup in SurfaceTextureRenderer
onSurfaceDestroyed with onSurfaceCleanup in SurfaceTextureRenderer[Android] feat: Migrate to the new Surface API.
[web] downgrade dart_webrtc dependency
[Android] fix: fixed video not rendered after resume from background.
[iOS] feat: Add option to start capture without broadcast picker
[iOS] Added helper method configureIOSMultitaskingCameraAccess to enable/disable Multitasking Camrea Access on iOS
configureIOSMultitaskingCameraAccess to enable/disable Multitasking Camrea Access on iOS[Dart] feat: expose rtc video value
[Android] Fixed clone method for screenshare tracks
[Web] Added missing setVideoEffects() method to factory_impl.dart. (not supported for now)
setVideoEffects() method to factory_impl.dart. (not supported for now)[iOS/Android] Added clone() method to MediaStreamTrack.
Nothing published for this version
Nothing published for this version
[iOS/Android] Added video effects support
Nothing published for this version
Add support for macOS (channel dev).
Your coding agent can read these notes before it upgrades. Set up the MCP server →