Releases: daily-co/react-native-daily-js
Releases · daily-co/react-native-daily-js
0.45.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.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 theinputSettings
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.
- Make it so that using
0.44.0
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
andvideoSource
can befalse
. - Fixed type definitions to include
persistentTrack
in React Native track fields; see the participanttracks
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 callinggetUserMedia()
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 todailyConfig
to allow users to opt into or out of it.
- 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
- 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.43.0
Features
- Added an optional
sendSettings
field to the Daily iframe options, which takes a media send settings object (seeupdateSendSettings()
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.
- 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
, 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 thequality-optimized
andbandwidth-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
Bugfixes
- Fixed an issue where simulcast encodings set within
dailyConfig
were not respected.
0.42.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 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.
- 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 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
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 afterload()
(orstartCamera()
, orjoin()
) that you had no processors specified, until the firstinput-settings-updated
event fired. This could occur even if you specified one in the preload cache via a constructor argument, or a previous call toupdateInputSettings()
. - 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
orerror 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
Features
- The event
cpu-load-change
has a new propertycpuLoadStateReason
, with possible valuesENCODE, DECODE, SCHEDULE_DURATION, NONE
, to describe why the event has been triggered. The methodgetCpuLoadStats()
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 invokesdestroy()
, whether or not they everjoin()
ed.
There is one side effect of this change: now, afterdestroy()
is run, the call object will always be left withmeetingState()
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
andDailyCameraErrorObject
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 markcomposition_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 inlive-streaming-started
events.
0.39.0
Bugfixes
- Fixed TypeScript definitions for streaming layouts to remove
composition_id
from the object passed to theupdateRecording()
function (where it is not allowed), while keeping it instartRecording()
, wherecomposition_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
Features
- Added a
strictMode
flag to cause daily-js to throw anError
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 typestring
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
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
andMUTE_REMOVE_VIDEO
from non-owner participants. - Removed a long deprecated path to set the local
owner
flag.