Releases: daily-co/daily-js
Releases · daily-co/daily-js
0.51.1
Bugfixes
- Fixed an error encountered in some development environments, where tracks being muted reported that
MediaStreamTrack
is non-extensible.
0.51.0
Features
- Allowed use of the
proxyUrl
setting when loading Prebuilt in aniframe
.
Bugfixes
- Fixed the advanced firewall control feature case where custom iceServers are used in addition to Daily-provided ones.
- Fixed a bug on Firefox 117 where, once you turned off your camera, turning it back on wouldn't restore your video for remote participants.
- Fixed an issue where an iOS user receiving a GSM phone call (e.g. from a landline) while on a Daily call would not have their video re-appear locally or remotely after waiting at least six seconds to decline the call.
Other improvements
- Added type definitions for custom tracks in DailyParticipant track objects.
- Added average jitter values to the result of
getNetworkStats()
. - Updated daily-js dependencies to close vulnerabilities.
0.50.0
Features
- Enhanced
sendAppMessage()
to add the ability to specify an array of participants to send to, e.g.callObject.sendAppMessage({ message: 'Hello, World!' }, ['participant-id-1', 'participant-id-2']);
Bugfixes
- Added validations to prevent against sending empty
encodings
objects viasendSettings
orupdateSendSettings()
, which resulted in unexpected behavior of browser-default encodings being used. - Fixed an issue on Chrome where sometimes a remote screenshare could briefly appear as interrupted when the sender muted or unmuted an unrelated track.
Other improvements
- Updated
threshold
andquality
values in thenetwork-quality-change
event to use the overall send-side packet loss values rather than relying on video send-side only. - Video-processors (bg-blur, bg-replacement) no longer rely on JSdeliver and use Daily's CDN instead, making network setup for customers simpler.
- Added
alwaysIncludeCamInPermissionPrompt
andalwaysIncludeMicInPermissionPrompt
to our TypeScript definitions. - Version bumps of oldest supported and nearing-end-of-support daily-js versions.
0.49.1
Features
- Add an API to expose local and remote participant audio levels. It work in both SFU or P2P modes while
v2CamAndMic
is enabled (which is the default setting in daily-js 0.49.0). See the documentation for more information: - Add
testNetworkConnectivity()
andabortTestNetworkConnectivity()
methods to daily-js. - Add
testConnectionQuality()
andstopTestConnectionQuality()
to daily-js. - Add audio stats to
DailyNetworkStats
returned fromgetNetworkStats()
. Today we have video stats and total stats (which takes audio into account) but do not provide specific audio stats. This release adds fieldsaudioRecvBitsPerSecond
,audioRecvPacketLoss
,audioSendBitsPerSecond
,audioSendPacketLoss
,worstAudioRecvPacketLoss
, andworstAudioSendPacketLoss
to the stats object, and includes improvements on how the packet loss calculations are done.
Bugfixes
- Fixed
eject_after_elapsed
type in tokenConfig fromboolean
to anumber
. - Fixed a permission issue which would occur when attempting to activate a wake lock from embedded Prebuilt.
- Fixed the return type of
getCpuLoadStats()
when the call is not in a joined state. - Fixed an issue where on occasion, a screenshare track state would get stuck in 'loading' and appear to be on locally and remotely after it was stopped.
Other improvements
v2CamAndMic
will be enabled by default in Call Object apps beginning with this release.- Reiterating from earlier release notes: We've implemented a complete refactor of our internal logic that deals with gathering and updating a client's local media (unmuting, changing devices, etc) in order to resolve a number of longstanding issues.
- This new logic has already rolled out to all Prebuilt users, and with this release it is becoming the default for Call Object usage, too.
- If you think you're facing issues as a result of this change, you can opt out of the new code path using
dailyConfig: { v2CamAndMic: false }
wherever you provide your call options. - Note that in an upcoming release (version to be determined) you will no longer be able to opt out, so please report any issues you believe may have been introduced.
- Allowed passing in
Array
s in addition toSet
s forcanSend
andcanAdmin
permissions in theupdateParticipant()
andupdateParticipants()
methods. - Added handling for additional URLs with
proxyUrl
. In particular, noise cancellation (powered by Krisp) is now supported when usingproxyUrl
. - Linter cleanup and general housekeeping.
- Redux dispatcher cleanup of unnecessary async calls and unused variables.
- Added additional log info for video-processors to includes the expected FPS.
- Removed workaround for
targetBitrate
issue targeting Chrome 117 or later, because it's no longer needed. - Added Brazilian Portuguese support to daily-js types for Daily Prebuilt configuration
- Marked
cam_info
,screen_info
, andDailyVideoElementInfo
as deprecated in the daily-js and react-native-daily-js type declaration files.
0.48.0
Features
- Added a new
canAdmin
key to theparticipant.permissions
object, which expresses which types of administrative tasks a participant is able to perform. This feature allows specification of which participants are allowed to take which administrative actions in specific areas, like streaming, transcription, and participant moderation. For more information, see our docs (link coming soon). - Related to the above canAdmin feature, participants with a suitable administrative role can now also modify their own permissions, for instance to remove their own presence in a call. There are some caveats, for instance: a meeting owner cannot revoke their own participant administration privileges. For more detailed information, please see the documentation (link coming soon).
- New advanced firewall control add-on features:
- These provide advanced mechanisms allowing end-users to join Daily-powered calls when they cannot connect directly to Daily servers and Daily TURN servers. For example, when restrictive firewall policies are in use. These mechanisms are enabled via the new frame properties
proxyUrl
andiceConfig
and the corresponding methodssetProxyUrl
andsetIceConfig
. - This is currently a beta release; please reach out to support to enable these features. Additional charges apply.
- Full documentation links are coming soon. In summary:
proxyUrl
, if defined, will cause connections that would normally be made to Daily’s https and websocket endpoints to instead be sent to the proxy server, with the Daily endpoint appended to theproxyUrl
. For example, ifproxyUrl = "https://my-proxy:8080/proxyDaily"
, then a call tohttps://gs.daily.co/something
would becomehttps://my-proxy:8080/proxyDaily/gs.daily.co/something
.- Note:
proxyUrl
must be a valid URI, with no query or fragment components.
- Note:
iceConfig
, if defined, will allow customers to specify their own TURN servers rather than only using ours.iceConfig
is an object containing the following keys:iceServers
, an array of objects specifying urls and credentials.placement
, a string controlling how the providediceServers
are used relative to the Daily-provided servers, allowing values"front"
,"back"
, or"replace"
, defaulting to"front"
, meaning “use the custom servers first”.iceTransportPolicy
, a string with possible values"all"
or"relay"
, controlling whether to use all or only relay candidates. Defaults to"all"
.
- These provide advanced mechanisms allowing end-users to join Daily-powered calls when they cannot connect directly to Daily servers and Daily TURN servers. For example, when restrictive firewall policies are in use. These mechanisms are enabled via the new frame properties
- Allowed specifying recording parameters in a new
start_cloud_recording_opts
key in the join token. These will take effect when automatically starting recordings using the relatedstart_cloud_recording
key. See the documentation for more information. - Added
testWebsocketConnectivity()
andabortTestWebsocketConnectivity()
methods, which respectively begin and abort a connectivity test to various regions Daily operates in. Each returns an object with a keyresult
, corresponding to a string with a value of"passed"
,"failed"
, or"aborted"
, and with keysabortedRegions
,failedRegions
, andpassedRegions
, each of which is an array of string region names. Calling abort before the test completes will return the same object.
Bugfixes
- Fixed an issue where
sendSettings
would not apply when supplied as a property toDailyIframe.createFrame()
. - Fixed an issue where certain ICE candidate information could be missing from logs.
- Fixed an issue where on Chrome we were erroneously categorizing screen video tracks as 'interrupted' when their content was not changing.
- Prevented an unwanted websocket warning after leave when we've manually closed the websocket channel.
- Make the encodings other than 'low' in DailyVideoSendSettings optional.
v2CamAndMic
fixes (these only apply if you havev2CamAndMic
enabled in your app):- Fix an issue where muting the cam wouldn't pause the producer on the server, which would result (probably among other things) in pause states not showing up properly in recordings.
- Fixed a bug where enabling noise cancellation via inputSettings could lead to processed audio always coming through silent if there wasn't a user gesture on the page by a certain time.
- Fixed an issue where, on certain browser and platform combinations, the SDK could attempt to unmute and send a null track from blocked devices, which caused errors to be logged despite nothing actually being broken.
Other improvements
- For users on Safari 16+ (the vast majority of Daily's Safari users) we now do a better job of avoiding attempting to obtain permission for a single-device if we can tell that the user has already explicitly hit "Deny" on a prompt for both cam and mic.
- Added logic to improve our ability to bill for media processor use.
- Bumped warnings for oldest supported versions of daily-js to 0.40.0.
0.47.0
Bugfixes
- Fixed an issue where Chrome would not respect
maxBitrate
when just a single layer is enabled, which resulted in unexpectedly hightargetBitrate
values. - Fixed an issue where an attempt to optimistically load a fallback url could cause an unhandled error when certain security settings were enabled.
- Fixed an issue where send settings were not respected when received as a frame property.
Other improvements
- Log user's local timezone during client setup.
- Made the
DailySendSettings
andDailyVideoSendSettings
interfaces public. - Added several new log codes specific to the prebuilt breakout rooms feature.
- Removed dead code related to a defunct feature for public avatars.
- Modified type definitions and validations for some experimental room and domain properties.
- Cleaned up calculations around packet loss which were working around long-deleted code and features.
- As described in the README, with the 0.46.0 release we've added a config flag to allow developers to opt into
v2CamAndMic
behavior. Changes in this release which only apply to this new code path are all gathered below:- Make it so that using
updateInputSettings()
or theinputSettings()
call options to enable noise cancelation causes the Krisp processor to immediately "warm up", even if the mic is still muted. - Sped up first mic unmute when cam and mic initially both begin off.
- Fixed an issue where not giving permission to a device could result in remote users seeing the blocked track repeatedly attempt to start and fail.
- Make it so that using
0.46.0
Features
- Added more control over how screenshares are sent. See the updated
updateSendSettings
documentation andstartScreenshare
documentation for more information.
Bugfixes
- Fixed handling of a case where a live-streaming-error is fired before the live stream starts.
- Fixed active speaker detection in p2p calls.
- As described in the README, with this release we've added a config flag to allow developers to opt into
v2CamAndMic
behaviour. Changes in this release which only apply to this new code path are all gathered below:- Makes it so that custom cam track constraints that were provided via
setBandwidth()
survive operations that require a call togetUserMedia
for a new camera track. - Handles
deviceID
values set tofalse
, such that thedeviceID
is stored correctly, the corresponding input is muted, and can not be unmuted unless the id is updated to something valid. - Now correctly removes the track when
deviceID
changes to false. - Fixed issues where noise cancelling could be delayed or could have audio glitches on a newly unmuted audio track.
- Fixed an issue where a processed track (e.g. background blur enabled) would not end properly when its source track ended, which could cause a frozen black frame.
- Added support for custom cam and mic source tracks in
v2CamAndMic
. - Added
v2CamAndMic
boolean flag (defaulting to false in 0.46.0) todailyConfig
to allow users to trial opting into this code path.
- Makes it so that custom cam track constraints that were provided via
Other improvements
- Added support for reading audio processor settings that were previously set on a given domain, for example, to automatically re-enable noise cancellation if it was previously selected.
- Improved logic for selecting alternate wss uris after having connection issues, adding capacity to store and immediately favor successful uris in future calls.
- Marked legacy participant track and track state fields as deprecated.
- Instead of the field on the left, use the field on the right:
audioTrack
->tracks.audio.persistentTrack
videoTrack
->tracks.video.persistentTrack
screenAudioTrack
->tracks.screenAudio.persistentTrack
screenVideoTrack
->tracks.screenVideo.persistentTrack
audio
->participant.tracks.audio.state
video
->participant.tracks.video.state
screen
->participant.tracks.screenVideo.state
- So for example, instead of
participant.audioTrack
, useparticipant.tracks.audio.persistentTrack
- See the participant
tracks
properties documentation for more information.
- Instead of the field on the left, use the field on the right:
0.45.0
Features
- Added an optional
sendSettings
field to the Daily iframe options, which takes a media send settings object (see updateSendSettings() for details). Specifies the send settings to use right away upon joining the call.
Bugfixes
- Fixed an issue where dial-in users could attempt to guess at valid dial-in PINs for rooms that should not allow dial-in access at all.
- Fixed a case where a client moved between SFUs could miss that an ongoing recording was stopped while they were in-process for the move.
- Fixed an issue where
transcription-started
events could fail to be omitted for participants joining after a transcription had already begun. - Fixed an issue where calling join within 2 seconds of preAuth using a non-canonical url (i.e. the case in the url provided didn't match the case of the room's name in our database) would result in an "expired sigauthz token error".
- Fixed a case where properties provided to startCamera after a preAuth or load could be ignored.
- Fixed an issue where network quality reports could provide bogus quality data, due to real changes in the amount of data being sent between metrics reports, for instance when
screenVideo
tracks were started or stopped. - Fixed how we handle rtp encoding layers in Firefox, which keeps them in the opposite order from Chrome and Safari.
- Fixed a bundle of audio+device issues, where:
- unplugging a system-default device that is not currently in use could trigger a change of device in use to the new system-default
- For example: when using laptop speakers while wired headphones are the default output device, unplugging the headphones could cause a new system default device to be chosen, which would trigger a change to use that device in Daily, despite the chosen device (laptop speakers) not being affected.
- when unplugging a device which combines output and input, if either of its devices was the system default for that device type, the in-use device of the other type could change to the system default.
- For example: using wired headphones while laptop speakers are the default output device and an iPhone Continuity Camera is plugged in, set as the default microphone, and in use, unplugging the Continuity Camera could lead to the output device switching to the laptop speakers, despite the chosen device (wired headphones) not being affected.
- unplugging a selected non-default output device could result in no output device in use at all
- disconnecting a non-default device that was in use could require a long time (~7ish seconds) before switching over to a new device.
- unplugging a system-default device that is not currently in use could trigger a change of device in use to the new system-default
Other improvements
- Flipped the default value of
strictMode
. daily-js will now throw an error when multiple call objects are detected or state-altering calls are made on an instance that has already beendestroy()
ed. - Added a new send settings bandwidth preset
bandwidth-and-quality-balanced
, and set it as the default bandwidth setting. This preset gives a medium between thequality-optimized
andbandwidth-optimized
settings. The new default encoding values on desktop are:
desktop: {
maxQuality: 'high',
encodings: {
low: {
maxBitrate: 90000,
scaleResolutionDownBy: 4,
maxFramerate: 15
},
medium: {
maxBitrate: 200000,
scaleResolutionDownBy: 2,
maxFramerate: 15,
},
high: {
maxBitrate: 680000,
scaleResolutionDownBy: 1,
maxFramerate: 30,
},
},
}
- Updated send settings bandwidth presets for mobile browsers. The new default encoding values on mobile browsers are:
mobileBrowser: {
maxQuality: 'medium',
encodings: {
low: {
maxBitrate: 110000,
scaleResolutionDownBy: 4,
maxFramerate: 15
},
medium: {
maxBitrate: 520000,
scaleResolutionDownBy: 2,
maxFramerate: 30,
},
},
},
- Improved validation for camSimulcastEncodings when passed in via
dailyConfig
, so that many common invalid encoding configurations can be identified immediately. - Added a new
'call-instance-destroyed'
event which is emitted at the point the_destroy
flag is set, to allow e.g. react components holding on to references of the call instance to be notified and update those references. - Added more information to the logs when
updateParticipants
is called on a single participant, to help in call quality debugging. - Improved how the sources of websocket connection errors are bubbled up to logs and error handlers.
- Added a mechanism to fallback on websocket failures to a server using only one level of subdomain nesting (e.g. http://x-y.daily.co, to work around a potential issue with some regional DNS resolvers when encountering nested subdomains like http://x.y.daily.co. If you have users that receive an “Unable to join call” error when they try to join any Daily call, you can direct them to our Network Test page at https://network-test.daily.co/index.html. Have them save a screenshot (or at least copy the Test ID at the top of the page), and get in touch with us at [email protected].
0.44.1
Bugfixes
- Fixed an issue where simulcast encodings set within
dailyConfig
were not respected.
0.44.0
Features
- Updated our default simulcast settings and provided new methods to read and modify simulcast settings within a call. We provide two presets which match most needs,
'bandwidth-optimized'
and'quality-optimized'
, but developers can specify custom settings as well for advanced usage. Documentation will be published soon after release.- Related to the above work, we have changed the default send resolution when using daily-js in mobile browsers:
- Android: before the resolution was 720x1280. Now, the default resolution is 360x640.
- iOS: before the resolution was 480x640. Now, the default resolution is 360x640.
- iPads now use mobile resolution and layer defaults. Previously, some iPads were using defaults intended for desktops.
- Related to the above work, we have changed the default send resolution when using daily-js in mobile browsers:
- Added participant selection for recording and streaming layouts.
Bugfixes
- Fixed an issue where switching mic after starting camera video processing could cause the cam processor to go away.
- Fixed an issue where quickly calling
updateInputSettings()
multiple times in succession could lead to a video or audio processor not being applied.
Other improvements
- Improved the behavior of recordings when a meeting is moved from one SFU to another, e.g. due to a networking issue or a new version of the server being deployed. A recording error is now thrown in those cases, allowing developers or end users to restart the recording or otherwise respond.
- Improved handling of call logs during disconnect to ensure logs are properly flushed during a disconnect.