Skip to content

Latest commit

 

History

History
624 lines (314 loc) · 39 KB

File metadata and controls

624 lines (314 loc) · 39 KB

client-sdk-android

2.28.1

Patch Changes

  • Bumped protobuf-javalite to 3.25.9, which fixes the unbounded parser recursion reported as CVE-2024-7254. - #1002 (@adrian-niculescu)

  • Fix CachingTokenSource treating a JWT with no exp as still valid, so a token that never expires stays cached forever. Require exp; keep nbf optional. - #1008 (@SashaMIT)

2.28.0

Minor Changes

  • Add TokenSource.fromDevelopmentTokenServer, the new name for the now-deprecated TokenSource.fromSandboxTokenServer (SandboxTokenServerOptions is likewise deprecated in favor of DevelopmentTokenServerOptions) - #994 (@MaxHeimbrock)

Patch Changes

  • Use source-specific default video degradation preferences: camera tracks default to maintaining framerate, screen share tracks default to maintaining resolution, and other video sources default to balanced. This matches client-sdk-js. Video tracks published with an explicit source other than camera or screen share now use balanced rather than WebRTC's implicit choice; set degradationPreference on the publish options to override. - #991 (@xianshijing-lk)

    The resolved preference is now also applied to the backup codec's sender. Previously only the primary encoder was configured and the backup encoder let libwebrtc derive a preference implicitly, so the two encoders could adapt along different axes off the same video source.

  • Add SDK size documentation to README explaining multi-architecture native libraries and how to measure actual size impact - #981 (@xianshijing-lk)

  • Fix ScreenAudioCapturer crashing the audio thread when its MediaProjection is revoked (for example via the system "stop sharing" chip) before the first microphone buffer arrives. initAudioRecord now returns false when the AudioRecord cannot be created instead of throwing inside WebRTC's audio record thread, where an unhandled exception kills the process; only startRecording() was guarded before. AudioRecord.read failures are also handled now: the return value was ignored, so once the projection died the buffer's stale contents (the last captured frame) were mixed into the microphone track on every callback, an audible loop until the callback was detached. On a read error the capturer releases its AudioRecord and degrades to mic-only audio. - #982 (@adrian-niculescu)

    releaseAudioResources is also safe to call while initAudioRecord is still running. It runs on the app's thread while init runs on the audio record thread, and it used to observe a null audioRecord and do nothing, so the recorder that init went on to publish stayed running until finalization. Leaked recorders hold the playback capture input open, and later capture attempts fail once enough of them accumulate.

  • Fix ScreenCaptureService staying bound when screen share setup is cancelled. ScreenCaptureConnection recorded a binding only once onServiceConnected arrived, so a coroutine cancelled before connect() returned left the ServiceConnection registered, and BIND_AUTO_CREATE kept the service alive for the lifetime of the context. LocalParticipant.setScreenShareEnabled awaits the bind internally and abandons the track it just created if cancelled, so nothing reached stop() on that path. A cancelled connect now releases the binding itself once no caller is left waiting on it, and stop() unbinds on the same wider condition. Callers stay tracked until connect() actually returns, so a cancellation landing after the service connected but before the caller resumed releases the binding too. This also covers the documented case where bindService leaves a connection registered while reporting failure or throwing. - #983 (@adrian-niculescu)

    Two paths that could leave connect() suspended forever are fixed as well. stop() racing a connect no longer strands the caller, since requesting the bind and registering the waiter now happen under one lock, and a failed bindService no longer leaves the state claiming a bind is in flight for the next caller to wait on.

  • Fixed setTrackEnabled leaking track resources when cancelled before the track is published, including the sender negotiated for a failed publish, and LocalScreencastVideoTrack leaking its SurfaceTextureHelper on dispose. - #986 (@adrian-niculescu)

  • Fix silent mic race between Room.connect audio publish and setMicrophoneEnabled - #988 (@MaxHeimbrock)

  • Fix custom RTCConfigurations not picking up server-provided ice servers when user-provided list is empty - #993 (@davidliu)

  • Fix: only latch WebRTC initialization after PeerConnectionFactory.initialize succeeds, so a failed native library load stays retryable and surfaces as a catchable exception instead of poisoning the process and crashing on the next LiveKit.create() call. - #992 (@shivanshu877)

2.27.0

Minor Changes

  • Add LocalAudioTrack.applyOptions, which allows updating the audio track options on the fly. - #974 (@davidliu)

Patch Changes

  • 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 backing VideoSource, 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 its RtpTransceiver, 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)

2.26.1

Patch Changes

  • Fix audio output getting stuck on the earpiece after reconnecting on a reused Room (Android 12+). AudioSwitchHandler.stop() now clears its audioSwitch reference synchronously (and the field is @Volatile) so a subsequent start() 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 TrackSubscriptionFailed events through Room and RemoteParticipant when the server detects a subscription failure - #959 (@davidliu)

  • Clarified documentation regarding data stream receivers and errors - #965 (@davidliu)

2.26.0

Minor Changes

  • Allow customizing maxRoundTripLatency on LocalParticipant.performRpc for high-latency networks - #953 (@1egoman)

  • Add support for RPC V2 - #946 (@1egoman)

Patch Changes

  • 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.publishData to 65535 bytes (64KB - 1) - #948 (@1egoman)

2.25.3

Patch Changes

  • docs(audio): clarify that AudioSwitchHandler.selectDevice() is sticky and overrides preferredDeviceList. Document that callers who only need a different priority order should set preferredDeviceList instead, and that selectDevice(null) clears a sticky selection. - #941 (@daxiondi)

  • Update libwebrtc to 144.7559.05 - #936 (@davidliu)

  • 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)

2.25.2

Patch Changes

  • 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)

2.25.1

Patch Changes

  • Add convenience constructor to E2EEOptions for shared key encryption - #917 (@davidliu)

2.25.0

Minor Changes

  • AudioOptions: Added disableAudioPrewarming flag - #912 (@davidliu)

Patch Changes

  • 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)

2.24.1

Patch Changes

  • Fix LocalParticipant.publishData throwing exception for packets over 15KB - #902 (@xianshijing-lk)

2.24.0

Minor Changes

Patch Changes

  • 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)

2.23.5

Patch Changes

2.23.4

Patch Changes

  • Make selfie segmenter work better - #861 (@Deneath)

  • 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)

2.23.3

Patch Changes

  • Optimised connection params building - #852 (@pulakdp)

  • 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)

2.23.2

Patch Changes

  • 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 CameraEventsDispatchHandler by using CopyOnWriteArraySet for 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 screen sharing with VP9/AV1 codecs - #828 (@pblazej)

  • Proguard rule optimizations - #803 (@davidliu)

2.23.1

Patch Changes

  • Fixed non-local return in onConnectionQuality that 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 ConcurrentModificationException in LocalAudioTrack.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.

2.23.0

Minor Changes

  • Change TokenSource.fetch methods to return Result to explicitly handle exceptions - #802 (@davidliu)

  • Add support for multiple listeners on AudioSwitchHandler - #802 (@davidliu)

  • Rename AgentState to AgentSdkState - #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)

Patch Changes

  • Fix crash when cleaning up local participant - #802 (@davidliu)

  • Fix crash when creating audio track for communication mode workaround - #805 (@davidliu)

2.22.1

Patch Changes

  • Fixed camera indicator remaining on after network disconnection by disposing orphaned tracks from failed reconnection attempts (#296) - #798 (@adrian-niculescu)

2.22.0

Minor Changes

Patch Changes

2.21.1

Patch Changes

2.21.0

Minor Changes

  • 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)

Patch Changes

  • Increase RPC method max roundtrip time to 7s - #775 (@davidliu)

2.20.3

Patch Changes

  • Switch to using header based auth bearer token - #770 (@davidliu)

2.20.2

Patch Changes

  • 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)

2.20.1

Patch Changes

  • Fix crash caused by extra simulcast layers equal to original resolution - #749 (@davidliu)

  • Wrap exceptions thrown in sendText and sendFile into Result - #749 (@davidliu)

2.20.0

Minor Changes

  • Update libwebrtc to 137.7151.03 - #742 (@davidliu)

  • Return streamInfo from datastream send helper methods - #741 (@davidliu)

  • Add simulcastLayers to VideoTrackPublishOptions for directly specifying the resolutions to use - #746 (@davidliu)

  • Add H265 as a supported codec - #742 (@davidliu)

Patch Changes

  • 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)

2.19.1

Patch Changes

  • Fixed ProGuard rules to keep JniInit class for WebRTC native registration (#735) - #736 (@adrian-niculescu)

2.19.0

Minor Changes

Patch Changes

  • 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)

2.18.3

Patch Changes

  • Move audio handling to background thread to avoid UI freezes. - #715 (@davidliu)

2.18.2

Patch Changes

  • Properly return Result on ByteStreamSender convenience methods - #709 (@davidliu)

2.18.1

Patch Changes

  • Fix not being able to publish immediately after connecting - #706 (@davidliu)

2.18.0

Minor Changes

  • Refactor some internal data message sending methods to use Result instead of throwing Exceptions to - #703 (@davidliu) fix crashes.

2.17.1

Patch Changes

2.17.0

Minor Changes

  • Change isMicrophoneEnabled, isCameraEnabled, isScreenshareEnabled to FlowObservable variables - #685 (@davidliu)

Patch Changes

  • 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)

2.16.0

Minor Changes

  • Unorder the lossy data channel - #665 (@bcherry)

  • 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 Participant.State and related events - #666 (@davidliu)

Patch Changes

2.15.0

Minor Changes

  • Add VirtualBackgroundVideoProcessor and track-processors package - #660 (@davidliu)

2.14.3

Patch Changes

2.14.2

Patch Changes

  • 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)

2.14.1

Patch Changes

  • Fix ConcurrentModificationException in IncomingDataStreamManager - #642 (@davidliu)

  • Dedupe supported codecs to provide valid SDP - #643 (@davidliu)

2.14.0

Minor Changes

Patch Changes

  • 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)

2.13.0

Minor Changes

Patch Changes

  • 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)

2.12.3

Patch Changes

2.12.2

Patch Changes

2.12.1

Patch Changes

  • Fix documented default of preferredDeviceList in AudioSwitchHandler - #584 (@davidliu)

  • Allow access to participant field in ParticipantAttributesChanged event - #591 (@binkos)

2.12.0

Minor Changes

Patch Changes

  • Add publishDTMF method for Sending DTMF signals to SIP Participant - #576 (@dipak140)

2.11.1

Patch Changes

  • Fix maxFps not applying for very low framerates - #573 (@davidliu)

2.11.0

Minor Changes

  • Add use cases to CameraX createCameraProvider - #536 (@KasemJaffer)

  • Detect rotation for screenshare tracks - #552 (@davidliu)

  • Default to scaling and cropping camera output to fit desired dimensions - #558 (@davidliu)

    • This behavior may be turned off through the VideoCaptureParams.adaptOutputToDimensions
  • Add separate default capture/publish options for screenshare tracks - #552 (@davidliu)

Patch Changes

  • Add AudioPresets and increase default audio max bitrate to 48kbps - #551 (@davidliu)

  • Fix crash when setting publishing layers - #559 (@davidliu)

  • Added VideoFrameCapturer for pushing video frames directly - #538 (@davidliu)

  • Fix surface causing null pointer exception on some devices - #544 (@KasemJaffer)

  • Update Kotlin dependency to 1.9.25 - #552 (@davidliu)

2.10.0

Minor Changes

2.9.0

Minor Changes

  • Implement LocalAudioTrack.addSink to receive audio data from local mic - #516 (@davidliu)

  • Implement client metrics - #511 (@davidliu)

Patch Changes

2.8.1

Patch Changes

  • 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)

2.8.0

Minor Changes

  • Implement LocalTrackSubscribed event - #489 (@davidliu)

  • Add first and last received times to TranscriptionSegment - #485 (@davidliu)

Patch Changes

  • More guarding of rtc api usages to prevent crashes - #488 (@davidliu)

2.7.1

Patch Changes

  • Noisily log when a VideoRenderer is used without initializing it first - #482 (@davidliu)

  • Fix NPE in RegionProvider when host can't be determined - #482 (@davidliu)