We document all notable release changes to the Browser SDK on this page. We base the format on Keep a Changelog, and this project adheres to Semantic Versioning.
Release Process
We release all changes to beta first before updating to a stable release at least two weeks later, and we update all changes on this page. All past releases are URI accessible from links below and immutable, unless explicitly stated.
You can subscribe to get notified of all changelog updates via email or RSS feeds.
Added: A new event named onCallConnected has been introduced, which is triggered when the PSTN callee starts ringing. Note: The event is not applicable for MPC and Conference based calls.
Fixed: Fixed the issue causing a mismatch between local machine time and actual time.
Fixed: Fixed issues where the speech recognition engine would enter an endless loop when mute is performed on two tabs using the same engine
Features:
Added: Added support for connecting and registering the SDK independently: If the stopAutoRegisterOnConnect flag is set to true, the login() method will only connect the SDK to Plivo servers. Default is set to false.
Added: Introduced a new register() method, which registers the SDK when called.
Added: Introduced the captureSDKCrashOnly flag, which, when set to true, captures and syncs only SDK-related crash logs. Default is false.
Added: Introduced the redirect(uri) method, which redirects the call to other SDK clients when invoked.
Added: Added helper methods such as:
disconnect(): Disconnects the SDK.
unregister(): Unregisters the SDK.
getCurrentSession(): Returns the current active session, if any.
Added: Added support to send more call-related information and statistics to the call-insights service
Fixed: Improved error handling by emitting “LoginFailed” event upon unsuccessful creation of User Agent (UA).
Fixed: Added a check to prevent sending DTMF signals when there is no internet connection, which was causing call disconnections.
Fixed: Enhanced WebSocket connection optimization and improved fallback mechanisms to reduce delays in establishing a connection.
Fixed: Streamlined the process for reconnecting active calls during network changes for improved stability and reliability.
Fixed: Improved SDK reconnection logic to prevent redundant WebSocket connections and optimize login scenarios during active sessions.
Fixed: Implemented a fix for the graceful disconnection of calls when a network switch occurs while the call is in the ring state, addressing call quality issues.
Fixed: Implemented an internet access check prior to registration.
Fixed: Limited the Logout() function to execute only during active sessions.
Fixed: Other minor bug fixes and improvements.
Features:
Added: Enhanced the callinfo object by introducing new attributes: Reason, Protocol, ErrorCode, and Originator, providing more detailed statistics.
Added: Implemented Plivo STUN Servers to enhance reliability. This modification is now customizable through the ‘usePlivoStunServer’ flag which defaults to false.
Added: The reason for disconnection/connection is now published with the onConnectionChange event.
Added: Introduced helper methods (isRegistered, isConnecting, and isConnected) for checking the client connection status.
Added: Introduced a new event ‘remoteAudioStatus’ that signifies the reception status of audio packets from the remote caller. Note: This feature works only in case of conference and MPC
Added: Introduced a noise suppression feature to enhance audio quality by eliminating unwanted background noise during active calls. This feature can be enabled or disabled using the enableNoiseReduction flag, which is set to false by default. Additionally, a new event, onNoiseReductionReady, is triggered when the noise reduction is ready to commence. Note: This functionality is not compatible with Safari.
Added: onMediaPermission event will be triggered when media permission is revoked.
Added: Users will receive a mediaMetric event when speaking while the SDK is muted. Note: This functionality is not compatible with Firefox.
Added:Implemented new local hangup reasons to provide additional insights into the cause of call hangups.
Bug Fixes:
Fixed:Resolved a race condition that led to unexpected results when emitting the ‘onLoginFailed’ event.
Fixed:Graceful disconnection of the websocket before emitting “onLoginFailed”.
Fixed:Resolved a type error issue resulting in: “Cannot assign to read-only property ‘uri’ of object”.
Fixed:Preventing the establishment of a new websocket connection if there is an ongoing connection. Note: The “errorCode” in the callinfo object has been renamed to “code”.
Added:Enhanced the callinfo object by introducing new attributes: Reason, Protocol, ErrorCode, and Originator, providing more detailed statistics. Note: The previous attribute remoteCancelReason has been removed.
Added:Implemented Plivo STUN Servers to enhance reliability. This modification is now customizable through the ‘usePlivoStunServer’ flag which defaults to false. Note: The Google STUN server has been eliminated.
Bug Fixes:
Fixed:Fixed a type error that previously resulted in “getheader is not a function” when attempting to access a non-existent call.
Fixed:Implemented a fix for the graceful disconnection of calls when a network switch occurs while the call is in the ring state, addressing call quality issues
Added: Introduced a new event ‘remoteAudioStatus’ that signifies the reception status of audio packets from the remote caller.
Note: This feature works only in case of conference and MPC
Added: A new property remoteCancelReason under the CallInfo object, which indicates the reason for call termination for both incoming and outgoing calls. Note:remoteCancelReason will be none during call state: ringing, answered.
Added: Included noise suppression feature to enhance audio quality, which effectively eliminates unwanted background noise during active calls. You can enable or disable this feature using the enableNoiseReduction flag. Note: This functionality is not compatible with Safari.
Added:Trigger an event when media permission is revoked.
Added: Notify users when they speak while muted. Note: This functionality is not compatible with Firefox.
Bug Fixes:
Fixed: Call mutes when input/output devices change.
Fixed: An “Invalid State” error that occurred during call hang-up.
Fixed: Addressed a Type error encountered when configuring output media devices.
Fixed: Limited the Logout() function to execute only during active sessions.
Added: A new useDefaultAudioDevice flag, which allows the SDK to use either the system’s default audio device or the recently added device for both input and output on Windows platform.
Bug Fixes:
Fixed: Removed support for the getStats API, as it is no longer available in Chrome versions 117 and beyond.
Fixed: Removed the predetectOWA functionality.
Fixed: Issue on audio input/output device mismatch on windows platform.
Added: A refreshRegistrationTimer flag for user-configurable periodic re-registration by the SDK.
Added: An onDtmfReceived event triggered when the SDK receives DTMF tones.
Added: Enhanced remote debugging with the collection and transmission of logs to Plivo servers.
Added: Plivo STUN servers to ensure stable connections.
Added: A CALL_RINGING event signaling the initiation of incoming/outgoing call ringing to Plivo.
Bug Fixes:
Fixed: Corrected the handling of stir-verification in incoming call headers.
Fixed: Fixed audio level discrepancies that occurred when changing input/output devices, ensuring accurate device settings.
Fixed: Removed DOMError to support latest Typescript versions.
Fixed: Restored functionality for incoming calls with PCMU codec.
Fixed: Prevented SDK from logging out when re-registration timed out.
Fixed: Reduced the time for firing the onConnectionChange event with a disconnected state to within 10 seconds when the SDK disconnects from Plivo servers, previously occurring within a 2-minute interval.
Fixed: Issue with audio input/output device toggle on Windows platform.
Fixed: Issue where non-default behavior was not maintained when Bluetooth was added over Headphones in Electron.
Features:
Added: Attribute called ‘callerName’ to the onIncoming call event. This attribute contains the name of the caller (if set by the initiator of the call) and can be displayed on the user interface.
Added: Ability to identify custom modifications to the officially released SDK versions.
Added: Capture audio input/output device toggle events during an active call.
Added: Ability to select between Inband and Outband DTMF during initialization. For more information, refer to the Configuration Parameters section in the detailed reference.
Added: Attribute called ‘callerName’ to the onIncoming call event. This attribute contains the name of the caller (if set by the initiator of the call) and can be displayed on the user interface.
Fixed: Issue with audio input/output device toggle on Windows platform.
Features:
Added: Ability to identify custom modifications to the officially released SDK versions.
Added: Capture audio input/output device toggle events during an active call
Added: Ability to select between Inband and Outband DTMF during initialization. For more information, refer to the Configuration Parameters section in the detailed reference.
Fixed: Issue, where one-way audio was observed for the next call after a custom device for input and output, was removed.
Fixed: Issue where the call-summary event was not getting sent reliably under unstable network connections.
Fixed: Issue where an error message was being published (setremotedescriptionfailed) when an outgoing PSTN call is rejected by the destination.
Fixed: Issue where one-way audio was observed if an external Bluetooth device was first connected and then disconnected whilst the Browser SDK was on an active call.
Fixed: An issue where under unstable network conditions, Browser SDK keeps sending media metrics events even after a call has been hung up from the other end.
Fixed: Issue where audio was getting picked up from both the external and internal microphones when the Bluetooth device was disconnected during a call and then added back during the next call.
Fixed: Issue where audio output did not flow through an external Bluetooth device if one was added to a Windows machine.
Fixed: Issue where audio was getting picked up from both the external and internal microphones when the Bluetooth device was disconnected during a call and then added back during the next call.
Fixed: Issue where one-way audio was observed if an external Bluetooth device was first connected and then disconnected while the Browser SDK was on an active call.
Fixed: An issue where under unstable network conditions, Browser SDK keeps sending MediaMetrics events even after a call has been hung up from the other end.
Fixed: Missing information in call summary event when the browser is closed during an ongoing call.
Fixed: Issue where, for the first call post initialization of the SDK, input audio was getting picked from the device microphone even if an external Bluetooth device was added before calling.
Fixed: Missing Information in call summary event when the browser is closed during an ongoing call.
Fixed: Issue where, for the first call post initialization of the SDK, input audio was getting picked from the device microphone even if an external Bluetooth device was added before calling.
Fixed: Incoming calls were not ringing in desktop browsers or when the tab with the call was in the background. While this is the expected behavior in mobile browsers, it should not occur on the desktop.
Fixed: Ongoing browser calls faced a one-way audio issue (remote user unable to hear the browser app user) if the Bluetooth audio device being used by the browser app user got disconnected and switched to another audio input device.
Fixed: Issue where incoming calls were not ringing in desktop browsers as well when the tab with the call was in the background. This is the expected behavior in mobile browsers but not desktop ones.
Fixed: Issue where an ongoing browser call would face a one-way audio issue (remote user won’t be able to hear the browser app user) if the Bluetooth audio device being used by the browser app user got disconnected and switched to another audio input device.
Fixed: Issue where client name was being sent as “Chrome” as part of Call, Answered, and Call Summary events even for calls made from Microsoft Edge browser. Now the value sent will be “Edge.”
Fixed: Issue where setting the configuration parameter “dscp” as true was not behaving as intended and all UDP packets were still being set with DSCP Class CS0 (default class) instead of DSCP class EF (Expedited Forwarding), which is the expected behavior. Being set with EF ensures packets being tagged as high priority by network routers, leading to lower chances of these packets being dropped and minimum per-hop delays.
Fixed: Issue where on receiving an incoming mobile browser call with the browser in the background, the phone would start ringing despite a visual notification not possible (due to limitations imposed from browsers) and the customer having no way to find out which app is making the phone ring. Now the phone won’t ring either.
Fixed: Issue where a “TypeError” was being emitted if audio devices were toggled during an ongoing call. While this error did not affect any functionality, it was unnecessary and hence will not be emitted anymore.
Fixed: Issue where client name was being sent as “Chrome” as part of Call, Answered, and Call Summary events even for calls made from Microsoft Edge browser. Now the value sent will be “Edge.”
Fixed: Issue where setting the configuration parameter “dscp” as true was not behaving as intended and all UDP packets were still being set with DSCP Class CS0 (default class) instead of DSCP class EF (Expedited Forwarding), which is the expected behavior. Being set with EF ensures packets being tagged as high priority by network routers leading to lower chances of these packets being dropped and minimum per-hop delays.
Fixed: Issue where on receiving an incoming mobile browser call with the browser in the background, the phone would start ringing despite a visual notification not possible (due to limitations imposed from browsers) and the customer having no way to find out which app is making the phone ring. Now the phone won’t ring either.
Fixed: Issue where a “TypeError” was being emitted if audio devices were toggled during an ongoing call. While this error did not affect any functionality, it was unnecessary and hence will not be emitted anymore.
Fixed: Issue where onConnectionChange event was not getting triggered in the following scenarios:
normal endpoint logout
abrupt socket disconnection due to changed network conditions
Features:
Added: New flag to selectively enable local or remote call quality tracking for Browser SDK. The old flag, which could only toggle both of these together, is to be deprecated in the next major release.
Added: New flag to selectively enable local or remote call quality tracking for Browser SDK. The old flag, which could only toggle both of these together, is to be deprecated in the next major release.
Fixed: Issue where the incorrect audio level was getting printed if the audio input device (mic) is switched from one input source to another (Eg: from Bluetooth mic to internal mic) during an ongoing call.
Fixed: Issue where one-way audio was being observed on calls made from the Safari browser if the audio input device (mic) is switched from one input source to another (Eg: from Bluetooth mic to internal mic) during an ongoing call.
Fixed: Issue where playback tone (incoming call ringtone) was getting played on device speakers if the keyboard/headphones ‘play’ button is pressed with the device in idle state.
Features:
Added: Buffer mechanism for temporarily storing Call Insights stats in the Browser before being sent to the Plivo server in case of unstable network conditions.
Fixed: Issue where the incorrect audio level was getting printed if the audio input device (mic) is switched from one input source to another (Eg: from Bluetooth mic to internal mic) during an ongoing call.
Fixed: Issue where one-way audio was being observed on calls made from the Safari browser if the audio input device (mic) is switched from one input source to another (Eg: from Bluetooth mic to internal mic) during an ongoing call.
Fixed: Issue where playback tone (incoming call ringtone) was getting played on device speakers if the keyboard/headphones ‘play’ button is pressed with the device in idle state.
Features:
Added: Buffer mechanism for temporarily storing Call Insights stats in the Browser before being sent to the Plivo server in case of unstable network conditions.
RTPStats fix for Firefox. The response structure of RTP Stream Stats has changed in the latest version of Firefox(v75). This change was breaking RTPStats parsing and propagation to Plivo Call Insights back-end. We applied this fix to adapt to the changed response from the Firefox browser.
An extra option “actionOnOtherIncomingCalls” is added for answer(callUUID, actionOnOtherIncomingCalls) function. During a multiple incoming call scenario, if “letring” is passed for actionOnOtherIncomingCalls, the call with callUUID passed to answer function will be answered and other calls will ring silently. If no values are passed for actionOnOtherIncomingCalls, the other incoming calls will be rejected.
An extra option “actionOnOtherIncomingCalls” is added for answer(callUUID, actionOnOtherIncomingCalls) function. During a multiple incoming call scenario, if “letring” is passed for actionOnOtherIncomingCalls, the call with callUUID passed to answer function will be answered and other calls will be ringing silently. If no values are passed for actionOnOtherIncomingCalls, the other incoming calls will be rejected.
set was setting deviceIds without removing the old deviceId, which is fixed.
Added extra header to the call info object which is sent to some event callbacks
Log in with the endpoint which is currently logged in will not be allowed.
Login with a different endpoint during an ongoing call will throw an error saying “Cannot log in when there is an ongoing call”. [CSDK-87]
Workaround for Chrome bug where incoming call ringtone file was not loading properly sometimes which leads to incoming calls without ringtone [SUP-272].
Removed media metrics’ dependency on callstats.io and used our call insights data [CSDK-109].
If the call UUID passed in the answer function does not match any of the incoming calls, an error message will be logged and false will be returned.
Workaround for Firefox bug where 180’s SDP during the outbound call should have a=mid line.
Features:
New option to allow multiple incoming calls.
The new method ignore() to take action on the incoming call.
Call insights data are collected for the insights enabled accounts.
Made project publishable to npmjs -> npm install plivo-browser-SDK –save
getPeerConnection() will return the RTCPeerConnection object even when the outbound call is in the ringing state.
Added support for ‘-‘ in extra headers’ keys.
An extra option “actionOnOtherIncomingCalls” is added for answer(callUUID, actionOnOtherIncomingCalls) function. During a multiple incoming call scenario, if “ignore” is passed for actionOnOtherIncomingCalls, the call with callUUID passed to answer function will be answered and other calls will be ignored. If no values are passed for actionOnOtherIncomingCalls, the other incoming calls will be rejected.
Version 2.1.0-beta.12 Nov 09, 2018
Workaround for firefox bug where 180’s SDP during the outbound call should have a=mid line.
Version 2.1.0-beta.11 Nov 02, 2018
If the call UUID passed in the answer function does not match any of the incoming calls, an error message will be logged and false will be returned.
Version 2.1.0-beta.10 Oct 26, 2018
An extra option “actionOnOtherIncomingCalls” is added for answer(callUUID, actionOnOtherIncomingCalls) function. During a multiple incoming call scenario, if “ignore” is passed for actionOnOtherIncomingCalls, the call with callUUID passed to answer function will be answered and other calls will be ignored. If no values are passed for actionOnOtherIncomingCalls, the other incoming calls will be rejected.
Version 2.1.0-beta.9 Oct 23, 2018
Bug Fix:
set was setting deviceIds without removing the old deviceId, which is fixed.
Version 2.1.0-beta.8 Oct 17, 2018
Bug Fix:
Added extra header to the call info object which is sent to some event callbacks
Version 2.1.0-beta.6 Sep 24, 09-2018
Made project publishable to npmjs -> npm install plivo-browser-SDK –save
getPeerConnection() will return the RTCPeerConnection object even when the outbound call is in the ringing state.
Added support for ‘-‘ in extra headers’ keys.
Version 2.1.0-beta.2 Sep 24, 2018
Bug Fix:
Log in with the endpoint which is currently logged in will not be allowed.
Login with a different endpoint during an ongoing call will throw an error saying “Cannot log in when there is an ongoing call”. [CSDK-87]
Workaround for Chrome bug where incoming call ringtone file was not loading properly sometimes which leads to incoming call without ringtone [SUP-272].
Removed media metrics’ dependency on callstats.io and used our call insights data [CSDK-109].
Version 2.1.0-beta.1 Sep 06, 2018
Features:
New option to allow multiple incoming calls.
The new method ignore() to take action on the incoming call.
Version 2.1.0-beta.0 Aug 27, 2018
Features:
Call insights data are collected for the insights enabled accounts.
Browser SDK V2.0
You can check the documentation for Browser SDK v2.0 here
Version 2.0.21 Aug 23, 2018
JsSIP v3.2.11 Upgrade Bug Fixes
reduced ice gathering timeout to 2 secs
removed dependency with ‘_is_confirmed’ variable
io version upgraded to v3.53.1
Switched off pre-call-test of callstats.io
endpoint registration status fix
Version 2.0.21-beta.0
Bug Fix:
is_confirmed is changed to _is_confirmed in JsSIP so using isEstablished function which is documented instead of using the _is_confirmed private variable (Bug introduced when JsSIP version is upgraded )
ice gathering timeout patch was not ported to when JsSIP version is upgraded, added the patch functionality back using the JsSIP’s icecandidate version instead of patching JsSIP itself.
Version 2.0.20 Jul 07, 2018 [YANKED]
Bug Fix:
Fixed: Early Media playback on Firefox
Added:
Features: WebSocket Connection change event listener . Detects abrupt websocket disconnection / connection / reconnection and notifies once per change.
Upgrade Better logging for exception and unexpected behavior
Optimize and upgrade npm dependencies such as Gulp and associated modules
RTCSession: emit ‘SDP’ event before creating offer/answer etc
Unit test cases with linphonec
Version 2.0.19
Bug Fix:
Optimize local storage values
Added:
Features: WebSocket Connection change event listener. Detects abrupt WebSocket disconnection and notifies one time per 30 seconds.
GDPR upgrade in Callstats
Version 2.0.18
Bug Fix:
Extra header length increased to 120, earlier it was 48
Added:
Add extra custom header
Version 2.0.9 Oct 05, 2017
Bug Fix:
Fixed: Twilio webRTC API gets overridden by Plivo SDK, Don’t alter URL.createObjectURL native code.
Added:
Features: a config param preDetectOwa with true/false, Detect one-way audio before answering/sending the call. Default value false
Features: audioDeviceChange event to listen for USB audio device changes. This event will emit an object with two properties change and device. change - “added” or “removed” device - device-specific properties
Collect Application logs in the callstats dashboard under the “logs” menu. A call summary log will get added to each callUUID.
Callstats lib updated to 3.19.12, which gives callback-based getStats once again in chrome 58
Version 2.0.8 Apr 13, 2017
deprecated
Removed: predetect OWA is taking 15sec in case of double Natted system Refer: 894bcac0-1fc4-11e7-8451-8dbf96fbabce
Version 2.0.7 Apr 12, 2017
Bug Fix:
Packet loss was not emitted properly. values will be in decimals. Multiply by 100 to convert to %, Eg: packet loss of 2% will be emitted in value as 0.02
Added:
Feature added: clientRegion property in initialization options to set and route calls to specific MediaServer POPs. Allowed regions are [“usa_west”,”usa_east”,”australia”,”europe”,”asia”,”south_america”].
Feature added: Pre-detect One-way audio. Before accepting Inbound call and before making an Outbound call. Make local peerConnection in the loop and check for mic issues. This happens every first call on browser reload and then in 1 hr interval.
Feature added: Call Terminated by caller, Callee details. nCallTerminated event will have an object {‘originator’:’local’} if caller ends or {‘originator’:’remote’} if receiver ends
Feature added: sendQualityFeedback() will now allow custom comments with a cap of 200 characters max.
Feature added: debug:”ALL-PLAIN” in Options to turn off colour mode debug: “DEBUG” will show all logs except SIP trace debug: “ALL” will show all logs including SIP trace , Colour mode ON debug: “ALL-PLAIN” will show all logs including SIP trace, Colour mode OFF
Version 2.0.6 Apr 04, 2017
Bug Fix:
n logout() - use stop() instead of unregister(‘all’);
createObjectURL(stream) is deprecated! Use elem.srcObject = stream instead!
reject () - only if call is not answered.
Patch in JsSIP
@line:1538 patch included, The moment we get one Public IP from ICE just send out INVITE. File path sipLib/RTCSession.js
Added:
Feature added: Even if users don’t set enableTracking in options, we should set enableTracking=true
Feature added: mediaMetrics Alert if ICE gathering takes more than 2 sec either for outgoing call invite or incoming call answer. Event name ice_timeout
Feature added: setConnectTone(true), Dial beep will play till we get an 18X response from the server. setting false will not play a beep tone.
Version 2.0.5 Feb 27, 2017
Bug Fix:
Terminate ICE gathering in 2 sec. After upgrading to JsSIP 3.0.0 this gatheringTimeout was removed.