Skip to content

Releases: daily-co/react-native-daily-js

0.45.0

29 Jun 20:39
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.44.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 option 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.44.0

08 Jun 15:10
Compare
Choose a tag to compare

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.
  • Updated React-Core pod to support use_frameworks.
  • Fixed DailyCallOptions type definition to express that the audioSource and videoSource can be false.
  • Fixed type definitions to include persistentTrack in React Native track fields; see the participant tracks properties documentation for more information.
  • 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 calling 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 have audio glitches on a newly unmuted audio track.
    • Added support for custom cam and mic source tracks in v2CamAndMic.
    • Added v2CamAndMic boolean flag to dailyConfig to allow users to opt into or out of it.

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

0.43.0

18 May 20:13
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 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, so that when multiple call objects are detected, daily-js will now throw an error by default.
  • 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 react-native are:
reactNative: {
  maxQuality: 'medium',
  encodings: {
    low: {
      maxBitrate: 220000,
      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-object-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

0.42.1

28 Apr 21:21
Compare
Choose a tag to compare

Bugfixes

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

0.42.0

26 Apr 16:00
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 you 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 publishing encodings weren't always respected on React Native for Android.
  • Fixed an issue where a websocket error would be logged after leaving a call using React Native for Android.

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.

0.41.0

12 Apr 22:42
Compare
Choose a tag to compare

Features

  • Daily JS now allows HIPAA organizations to use raw tracks recordings.

Bugfixes

  • Fixed an issue where calculation of CPU metrics could throw an error on react native.
  • Fixed a bug where getInputSettings() could erroneously report after load() (or startCamera(), or join()) that you had no processors specified, until the first input-settings-updated event fired. This could occur even if you specified one in the preload cache via a constructor argument, or a previous call to updateInputSettings().
  • Fixed an issue where a non-default device could be selected automatically as though it were the default.
  • Fixed an issue where leaving soon after joining could result in attempt to send to closed socket or error connecting to the sfu errors to be logged.
  • Fixed a longstanding issue where back-to-back available-devices-updated events (with identical payloads) would fire in the case of a combination input/output device (i.e. a headset) being plugged in or unplugged.
  • Fixed some out of date type definitions for DailyInputVideoSettings.
  • Fixed DailyEventObjectFatalError types to resolve correctly in typescript codebases.

Other improvements

  • Updated several libraries with security issues reported by npm audit to versions without reported vulnerabilities.
  • Improved device detection code to use devicechange event wherever available rather than polling.

0.40.0

30 Mar 21:48
Compare
Choose a tag to compare

Features

  • The event cpu-load-change has a new property cpuLoadStateReason, with possible values ENCODE, DECODE, SCHEDULE_DURATION, NONE, to describe why the event has been triggered. The method getCpuLoadStats() also has multiple new properties.

Bugfixes

  • Fixed a small typo in the React Native Typescript definitions.
  • Fixed an issue with default audio output change detection, as well as an issue where the device returned by call.getInputDevices().speaker would often be a microphone.
  • Fixed a problem where setInterval() intervals that the call object starts are never cleaned up if the user doesn't end up join()ing a call first. Intervals should be cleaned up when the user invokes destroy(), whether or not they ever join()ed.
    There is one side effect of this change: now, after destroy() is run, the call object will always be left with meetingState() as either 'left-meeting' or 'error', whereas previously the call object could also be left in a number of other states.
  • Fixed an issue where if you join a meeting with mic on, your audio sometimes doesn't play for the other person.
  • Fixed the DailyEventObjectCameraError and DailyCameraErrorObject type definitions to resolve to their defined camera error types, allowing developers to handle the different types of camera errors ergonomically in a TypeScript codebase.
  • Fixed an issue in our TypeScript definitions of custom layout properties passed to startRecording() / startLiveStreaming(), to mark composition_id as optional.
  • Fixed an issue where, in P2P mode, toggling the camera off and back on would disable background effects.

Other improvements

  • Increased the number of internal call quality statistics we record, for example the number of pauses and freezes in a video track or audio track.
  • Made some meeting errors in connection failure cases more informative.
  • Made a change to ensure that instanceid should always be included in live-streaming-started events.

0.39.0

15 Mar 21:31
Compare
Choose a tag to compare

Bugfixes

  • Fixed TypeScript definitions for streaming layouts to remove composition_id from the object passed to the updateRecording() function (where it is not allowed), while keeping it in startRecording(), where composition_id is required.

Improvements

  • Updated mediasoup-client to version 3.6.80, which among other things, adds unified plan support for React Native, allowing our library to update react-native-webrtc to 106.0.6.
  • Updated react-native-webrtc to 106.0.6, which drops support for Plan B and adds support for Unified Plan in react-native-daily-js. Caution: As a consequence of the above, be careful not to use this version of react-native-webrtc with any earlier versions of react-native-daily-js, or any earlier versions of react-native-webrtc with this version of react-native-daily-js, as they will not be able to communicate.

0.38.0

22 Feb 00:04
Compare
Choose a tag to compare

Features

  • Added a strictMode flag to cause daily-js to throw an Error if more than one call-object is detected in use, before this behavior becomes the default beginning in react-native-daily-js 0.41.0
  • Added a getCallInstance() method, which can get a handle to your call instance from anywhere in case you lost track of it.
  • Added a new type field to track events, which can be any of 'video', 'audio', 'screenVideo', 'screenAudio', 'rmpVideo', 'rmpAudio', or other values of type string for custom tracks
  • Livestreams can now emit update events, including for errors and interruptions.

Bugfixes

  • Fixed an issue where background setting and camera stream changes at the same time could conflict, and cause errors
  • Fixed an issue where background settings could not be applied if the camera had never been enabled
  • Fixed an issue where 403 Forbidden could be hit while downloading daily-js components if accessed during new code deployments

0.36.0

25 Jan 23:48
Compare
Choose a tag to compare

Bugfixes

  • Fixed a bug where an error could be thrown accessing an undefined object when unmuting while a device is not found.
  • Fixed an issue where one blocked device being blocked could cause both devices to appear as blocked.
  • Fixed an issue where a blocked device could appear to have a (blank) track, and be unmuted.
  • Updated TypeScript definitions for DailyTrackSubscriptionOptions

Other improvements

  • Reduced the memory footprint of video processor URL object once they’re no longer needed.
  • Improved prevention of MUTE_REMOTE_AUDIO and MUTE_REMOVE_VIDEO from non-owner participants.
  • Removed a long deprecated path to set the local owner flag.