- Add
LocalAudioTrack.applyOptions, which allows updating the audio track options on the fly. - #974 (@davidliu)
-
Fix custom LocalAudioTrackOptions not applying correctly - #974 (@davidliu)
-
Properly update the server info after reconnect - #962 (@davidliu)
-
Scoped the protobuf consumer keep rule to the SDK's generated messages and the well-known types they embed, instead of every GeneratedMessageLite subclass in the consuming app. - #975 (@adrian-niculescu)
-
Fix native memory leaks on video track publish/unpublish cycles (#521).
LocalVideoTrack.dispose()now disposes its backingVideoSource, which was previously left undisposed and leaked for the lifetime of the process (only the track and capturer were released). Unpublishing a video track now also stops itsRtpTransceiver, along with any extra transceivers added for backup codecs; since a new transceiver is created on every publish, removing the track from its sender alone left them retained until the connection closed. - #971 (@adrian-niculescu)
-
Fix audio output getting stuck on the earpiece after reconnecting on a reused
Room(Android 12+).AudioSwitchHandler.stop()now clears itsaudioSwitchreference synchronously (and the field is@Volatile) so a subsequentstart()reliably observes the teardown and re-creates the switch, instead of racing the posted teardown runnable and reusing a stale, already-stopped switch. - #967 (@YashJainSC) -
Emit
TrackSubscriptionFailedevents throughRoomandRemoteParticipantwhen the server detects a subscription failure - #959 (@davidliu) -
Clarified documentation regarding data stream receivers and errors - #965 (@davidliu)
-
Allow customizing
maxRoundTripLatencyonLocalParticipant.performRpcfor high-latency networks - #953 (@1egoman)
-
Change proguard rule for protobufs to official recommended rule, allowing unused protobuf classes to be removed with minification - #946 (@1egoman)
-
Increased max data packet size for
LocalParticipant.publishDatato 65535 bytes (64KB - 1) - #948 (@1egoman)
-
docs(audio): clarify that
AudioSwitchHandler.selectDevice()is sticky and overridespreferredDeviceList. Document that callers who only need a different priority order should setpreferredDeviceListinstead, and thatselectDevice(null)clears a sticky selection. - #941 (@daxiondi) -
fix: resume joinContinuation when LEAVE received during reconnect handshake to avoid reconnection loop hanging issue - #934 (@YashJainSC)
-
Fixed silent loss of reliable data when DataChannel.send returned false and when buffered items were replayed across multiple resumes. - #921 (@adrian-niculescu)
-
Fix byte streams not sending the name of the bytestream - #939 (@davidliu)
-
Update AudioSwitch to handle potential exception when unregistering audio device listeners - #944 (@davidliu)
-
Fix Room.connect not properly throwing ConnectException for websocket connection failures during Room.join() - #926 (@davidliu)
-
Fix reconnect potentially getting cancelled by websocket failure - #926 (@davidliu)
-
Fixed RTCEngine.addTrack leaking pendingTrackResolvers entries on timeout or caller cancellation, which previously caused subsequent publishes of the same track to fail with DuplicateTrackException until the connection was torn down. - #920 (@adrian-niculescu)
-
Fix exception when resending data channel messages after a resume - #923 (@davidliu)
-
Fix potential leak for StreamSender caused by exceptions - #913 (@davidliu)
-
Update audio handling to use AudioManager communication device APIs on S and above - #910 (@davidliu)
-
Rethrow cancellation exceptions for coroutines - #913 (@davidliu)
-
Implement changing preferred audio device list on AudioSwitchHandler mid-call - #910 (@davidliu)
- Fix LocalParticipant.publishData throwing exception for packets over 15KB - #902 (@xianshijing-lk)
-
Fix resume not working sometimes after connection loss/gain - #894 (@davidliu)
-
Fix transcription attributes not converting correctly - #889 (@davidliu)
-
Specifically keep native libwebrtc methods from being obfuscated - #893 (@davidliu)
-
Properly cancel jobs awaiting on DataChannel low buffer instead of completing on dispose - #897 (@davidliu)
-
Fix exception not being caught when using LocalParticipant.publishData - #897 (@davidliu)
-
Ensure child jobs are cleaned up on ICE reconnect timeout - #870 (@davidliu)
-
Cancel websocket when join coroutine is cancelled - #871 (@davidliu)
-
Concurrency fixes for SignalClient connection - #871 (@davidliu)
-
Fixed ScreenCaptureConnection suspending forever when bindService fails and crashing when resuming canceled continuations. - #838 (@adrian-niculescu)
-
Migrate from Klaxon decoding to kotlinx-serialization for AgentAttribute deserialization - #851 (@davidliu)
-
perf: Skip Klaxon parsing for empty agent attribute maps - #849 (@YashJainSC)
-
Fix exception when parsing AgentAttribute inputs and outputs - #847 (@davidliu)
-
Properly reset network callback manager after disconnect - #841 (@davidliu)
-
Fixed audio focus not being abandoned on pre-O devices due to mismatched listener instance. - #837 (@adrian-niculescu)
-
Fixed file descriptor leak in ByteStreamSender where Source was not closed after reading. - #839 (@adrian-niculescu)
-
Fixed data race in
CameraEventsDispatchHandlerby usingCopyOnWriteArraySetfor thread-safe iteration. - #822 (@adrian-niculescu) -
Fixed Room getting stuck in CONNECTING state after failed connect attempts. - #836 (@adrian-niculescu)
-
Fix thread visibility issues in SignalClient that could cause messages to be silently dropped. - #819 (@adrian-niculescu)
-
Fix race condition when sending sync state before tracks are subscribed - #831 (@davidliu)
-
Don't throw on invalid values for Agent enum types - #847 (@davidliu)
-
Add overload for TokenSource.fromEndpoint that accepts a string for the url - #844 (@davidliu)
-
Fixed non-local return in
onConnectionQualitythat caused lost connection quality updates for remaining participants when one participant was not found in the list. - #817 (@adrian-niculescu) -
Fixed impossible empty streams check in Room.onAddTrack that could crash if WebRTC called onAddTrack with an empty streams array. - #816 (@adrian-niculescu)
-
Improve thread-safety and reconnection reliability for hasPublished flag. - #814 (@adrian-niculescu)
-
Fixed
ConcurrentModificationExceptioninLocalAudioTrack.dispose()when sinks are registered. - #820 (@adrian-niculescu) -
Fix LocalParticipant jobs map clean-up when unpublishing tracks. - #807 (@adrian-niculescu)
-
Fixed PeerConnectionTransport coroutine scope not being cancelled on close. - #818 (@adrian-niculescu)
-
Improve reconnection reliability by hardening state flags and synchronizing data channel receive state. - #806 (@adrian-niculescu)
-
Remove reference to internal OkHttp method - #811 (@davidliu)
-
Increase RTC negotiation reliability by dropping outdated sdp answers and forwarding offer ids - #813 (@davidliu)
-
Fixed ProGuard/R8 minification crash in release builds when using AgentAttributes. Added @Keep annotations to Klaxon-based data classes and updated ProGuard rules to prevent obfuscation of reflection-based JSON parsing classes. #808 - #809 (@adrian-niculescu)
-
Update WebRTC-SDK to 137.7151.05. - #824 (@davidliu)
- Fixes echo cancellation and noise suppression failing to enable.
- Fixes microphone not shutting off when muted.
-
Change TokenSource.fetch methods to return Result to explicitly handle exceptions - #802 (@davidliu)
-
Add support for multiple listeners on AudioSwitchHandler - #802 (@davidliu)
-
Deprecate Room.withPreconnectAudio method. - #802 (@davidliu)
- Set AudioTrackPublishDefaults.preconnect = true on the RoomOptions instead to use the preconnect buffer.
-
Expose agentAttributes as a value on Participant - #802 (@davidliu)
-
Expose the server info of the currently connected server on Room - #802 (@davidliu)
-
Fix crash when cleaning up local participant - #802 (@davidliu)
-
Fix crash when creating audio track for communication mode workaround - #805 (@davidliu)
- Fixed camera indicator remaining on after network disconnection by disposing orphaned tracks from failed reconnection attempts (#296) - #798 (@adrian-niculescu)
- Extract CameraXProvider and expose it. - #754 (@KasemJaffer)
- Fix camera lookup to check physicalId - #792 (@KasemJaffer)
- #721 Fixed publisher negotiation race condition causing ICE timeouts. - #789 (@adrian-niculescu)
-
End to end encryption for data channels option - #762 (@davidliu)
- Added EncryptionType fields to DataReceived events and StreamInfo objects to indicate the encryption status.
-
Add TokenSource implementation for use with token servers - #769 (@davidliu)
-
Remove unneeded suspend modifier from registerRpcMethod - #757 (@davidliu)
-
Fix crash when publishing disposed tracks - #758 (@davidliu)
-
Fix race condition when releasing Room object - #756 (@davidliu)
-
Fix VirtualBackgroundVideoProcessor not responding to changes in backgroundImage - #752 (@davidliu)
-
Ensure room is disconnected before releasing resources - #756 (@davidliu)
-
Fix crash caused by extra simulcast layers equal to original resolution - #749 (@davidliu)
-
Wrap exceptions thrown in sendText and sendFile into Result - #749 (@davidliu)
-
Return streamInfo from datastream send helper methods - #741 (@davidliu)
-
Add simulcastLayers to VideoTrackPublishOptions for directly specifying the resolutions to use - #746 (@davidliu)
-
E2E reliability for data channels with resending after reconnects - #738 (@davidliu)
-
Fix default simulcast layers using a lower than intended resolution - #746 (@davidliu)
-
Properly use screenShareTrackPublishDefaults when manually publishing a screenshare track - #746 (@davidliu)
- Fixed ProGuard rules to keep JniInit class for WebRTC native registration (#735) - #736 (@adrian-niculescu)
-
Fix IllegalStateException when switchCamera of localVideoTrack - #725 (@binkos)
-
Make blurRadius in the VirtualBackgroundTransformer variable to allow for dynamically changing the value. - #731 (@binkos)
-
Add sendText and sendFile helper methods to LocalParticipant for ease of use - #732 (@davidliu)
-
Add default name of "unknown" for StreamByteOptions to allow for no-arg construction - #732 (@davidliu)
- Refactor some internal data message sending methods to use Result instead of throwing Exceptions to - #703 (@davidliu) fix crashes.
-
Avoid a crash on reconnection when a track is disposed - #691 (@jeankruger)
- Change isMicrophoneEnabled, isCameraEnabled, isScreenshareEnabled to FlowObservable variables - #685 (@davidliu)
-
Fix switchCamera not working if the camera id is physical id - #676 (@KasemJaffer)
-
Fix sending pre-connect audio data when byte buffer has backing array - #678 (@davidliu)
-
Specify default values for StreamTextOptions and streamText - #688 (@davidliu)
-
Add pre-connect audio for use with agents - #666 (@davidliu)
See Room.withPreconnectAudio for details.
-
CameraX: support for selecting cameras by their physical id - #668 (@KasemJaffer)
-
Add rpc handler methods to Room class for convenience. - #663 (@davidliu)
-
Fix outgoing datastreams incorrectly padding data - #666 (@davidliu)
- Fixes disconnect issue - #656 (@jeankruger)
-
Fix CameraXSession not setting the target capture format correctly - #652 (@davidliu)
-
Improved handling of track publication failures by introducing a new TrackPublicationFailed event and fixing a broken state issue where the track remained active but inaccessible, causing the microphone or camera to stay on without a published track and leading to unreliable republishing. - #637 (@jeankruger)
-
Fix ConcurrentModificationException in IncomingDataStreamManager - #642 (@davidliu)
-
Dedupe supported codecs to provide valid SDP - #643 (@davidliu)
- Unpublish the screen sharing track on stop and introduce ScreenCaptureParams to be able to define the notification and set a callback for onStop - #626 (@jeankruger)
-
Fix publish deadlock when no response from server - #618 (@davidliu)
-
Add SCREEN_SHARE_AUDIO as a Track.Source.Type - #610 (@davidliu)
-
Surface canPublishSources, canUpdateMetadata, and canSubscribeMetrics on ParticipantPermission - #610 (@davidliu)
-
Fast fail attempts to publish without permissions - #618 (@davidliu)
- Fixes deadlock on publish track - #604 (@jeankruger)
-
Fix documented default of preferredDeviceList in AudioSwitchHandler - #584 (@davidliu)
-
Allow access to participant field in ParticipantAttributesChanged event - #591 (@binkos)
-
Default prioritizing speaker over earpiece - #579 (@davidliu)
-
Explicitly expose AudioSwitchHandler from Room for easier audio handling - #579 (@davidliu)
-
Add use cases to CameraX createCameraProvider - #536 (@KasemJaffer)
-
Default to scaling and cropping camera output to fit desired dimensions - #558 (@davidliu)
- This behavior may be turned off through the
VideoCaptureParams.adaptOutputToDimensions
- This behavior may be turned off through the
-
Add separate default capture/publish options for screenshare tracks - #552 (@davidliu)
-
Add AudioPresets and increase default audio max bitrate to 48kbps - #551 (@davidliu)
-
Added VideoFrameCapturer for pushing video frames directly - #538 (@davidliu)
-
Fix surface causing null pointer exception on some devices - #544 (@KasemJaffer)
-
Properly dispose peer connection on RTC thread - #506 (@davidliu)
-
Documentation updates for LocalParticipant methods - #510 (@davidliu)
-
Fix local video tracks not rendering processed frames - #495 (@davidliu)
-
Add utility class NoDropVideoProcessor to force video processing while not connected - #495 (@davidliu)
-
More fixes for crashes caused by using disposed track - #497 (@davidliu)