Skip to content

Releases: daily-co/daily-js

0.51.1

20 Sep 19:14
Compare
Choose a tag to compare

Bugfixes

  • Fixed an error encountered in some development environments, where tracks being muted reported that MediaStreamTrack is non-extensible.

0.51.0

13 Sep 19:48
Compare
Choose a tag to compare

Features

  • Allowed use of the proxyUrl setting when loading Prebuilt in an iframe.

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

31 Aug 13:51
Compare
Choose a tag to compare

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 via sendSettings or updateSendSettings(), 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 and quality values in the network-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 and alwaysIncludeMicInPermissionPrompt to our TypeScript definitions.
  • Version bumps of oldest supported and nearing-end-of-support daily-js versions.

0.49.1

17 Aug 22:02
Compare
Choose a tag to compare

Features

Bugfixes

  • Fixed eject_after_elapsed type in tokenConfig from boolean to a number.
  • 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 Arrays in addition to Sets for canSend and canAdmin permissions in the updateParticipant() and updateParticipants() methods.
  • Added handling for additional URLs with proxyUrl. In particular, noise cancellation (powered by Krisp) is now supported when using proxyUrl.
  • 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, and DailyVideoElementInfo as deprecated in the daily-js and react-native-daily-js type declaration files.

0.48.0

25 Jul 21:34
Compare
Choose a tag to compare

Features

  • Added a new canAdmin key to the participant.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  and iceConfig and the corresponding methods setProxyUrl  and setIceConfig.
    • 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 the proxyUrl. For example, if proxyUrl = "https://my-proxy:8080/proxyDaily", then a call to https://gs.daily.co/something would become https://my-proxy:8080/proxyDaily/gs.daily.co/something.
        • Note: proxyUrl must be a valid URI, with no query or fragment components.
      • 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 provided iceServers 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".
  • 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 related start_cloud_recording key. See the documentation for more information.
  • Added testWebsocketConnectivity() and abortTestWebsocketConnectivity() methods, which respectively begin and abort a connectivity test to various regions Daily operates in. Each returns an object with a key result, corresponding to a string with a value of "passed", "failed", or "aborted", and with keys abortedRegions, failedRegions, and passedRegions, 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 to DailyIframe.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 have v2CamAndMic 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

29 Jun 17:29
Compare
Choose a tag to compare

Bugfixes

  • Fixed an issue where Chrome would not respect maxBitrate when just a single layer is enabled, which resulted in unexpectedly high targetBitrate 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 and DailyVideoSendSettings 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 the inputSettings() 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.

0.46.0

08 Jun 13:44
Compare
Choose a tag to compare

Features

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 to getUserMedia for a new camera track.
    • Handles deviceID values set to false, such that the deviceID 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) to dailyConfig to allow users to trial opting into this code path.

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, use participant.tracks.audio.persistentTrack
    • See the participant tracks properties documentation for more information.

0.45.0

18 May 19:02
Compare
Choose a tag to compare

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.

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 been destroy()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 the quality-optimized and bandwidth-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

28 Apr 21:01
Compare
Choose a tag to compare

Bugfixes

  • Fixed an issue where simulcast encodings set within dailyConfig were not respected.

0.44.0

26 Apr 15:38
Compare
Choose a tag to compare

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