Releases: daily-co/react-native-daily-js
0.34.0
Features
- Improved logging to include pre-join logs and added new logs for identifying cases when we detect multiple daily instances are connected simultaneously (multiple daily instances is unsupported and leads to unexpected issues).
- Added server-side support for properly detecting and warning clients when they are using a version that is nearing end of support, unsupported or nearing end of life as well as a means to reject a client from joining if using a version that is end of life’d.
Bugfixes
- Bumped the version of react-native-webrtc to get various fixes for Samsung devices.
0.33.1
Bugfixes
- Fix a case where a warning log may throw an exception.
0.33.0
Features
- Added detection of playback interruptions in remote media.
Bugfixes
- Fixed an issue where changing a device while the media type published by that device is disabled would not take effect. For example, changing from user to environment-facing camera while the camera is off.
Other Improvements
- Cleaned up debug logging to reduce log noise.
0.32.0
Features
-
Added a
maxDuration
option when starting a recording. The max recording duration is 3 hours if not specified. It is recommended you don’t touch this setting unless you’re planning on particularly long recorded meetings.callObject.startRecording({ maxDuration: 4 * 60 * 60 });
-
Pre-beta (early access customers only): Introduced a new meeting session data system, where you can set arbitrary data on a meeting that is synced to all participants. Some limits apply (see below, after code blocks).
To add data to a meeting:
callObject.setMeetingSession({ foo: 'bar' }); // or, with all options specified... // replace the previous meeting session data with the new data (the default behavior) callObject.setMeetingSession({ foo: 'bar' }, 'replace'); // merge top-level keys in the new data on top of the previous data callObject.setMeetingSession({ foo: 'bar' }, 'shallow-merge');
To access meeting session data:
callObject.meetingSessionState().data;
To get notified when the meeting session data changed:
// note: this event fires when anything in meetingSessionState() changes callObject.on('meeting-session-state-updated', (event) => { console.log(event.meetingSessionState.data); });
To get notified when there’s been an error updating meeting session data:
callObject.on('meeting-session-data-error', (event) => { console.log(event.errorMsg); });
Please reach out to us if you'd like to discuss early access to this feature.
Limits:
- Data should be in the form of “plain” (map-like) JavaScript objects and should be JSON-serializable
- The rate of syncing data to clients is limited, so this system is not suited for highly real-time applications where sub-second interactions matter
- Data is limited in size, so this system is not suited for things like file-sharing
Bugfixes
-
Fixed a bug where, on iOS 16 or later, selecting a non-bluetooth audio device (using
setAudioDevice()
) would erroneously cause the bluetooth audio device to disappear from subsequent calls toenumerateDevices()
. -
Fixed erroneously-reported track states for
rmpAudio
andrmpVideo
tracks when a remote media player was paused.
Now, after a pause:callObject.participants()['some-id'].tracks.rmpVideo.state; // 'off' callObject.participants()['some-id'].tracks.rmpVideo.off.byUser; // true
0.31.0
Features
- Added support for a customer-specified audio bitrate using the
micAudioMode
property. For example,dailyConfig: { micAudioMode: { bitrate: 256000, stereo: true } }
micAudioMode
can alternatively have the stringy values'speech'
or'music'
. Both fields in the object above are optional, and if not provided will default to the values shown, which is the same as having passed the string'music'
. For more information, see our audio mode config property docs.
- Added support for more transcription parameters. We now support the tier, detect_language, profanity_filter, and redact options. Here’s an example supplying all of our supported options as of this release:
let transcription = await callObject.startTranscription({ language: 'en', model: 'general', tier: 'base', detect_language: true, profanity_filter: false, redact: false, });
- All of the fields above are optional. If not provided, as of this release they default to the values shown above. For more information, see our transcription docs.
Bugfixes
- Fixed logging for errors encountered while sending RESTART_ICE messages to the SFU.
- Fixed an issue where a browser under high load may report a stale websocket when it is actually fine.
Other improvements
- Enhanced some limit enforcement boundaries within our SFUs to keep them healthier under high load situations.
- Overhauled the handling and normalizing of getUserMedia (gUM) errors.
0.30.0
Reminder
The code that daily-js downloads before you join a call is now “pinned” to this version of daily-js. That means you will no longer get unexpected updates to Daily client-side code without updating your daily-js dependency.
Read more about this change in daily-js 0.30.0's release notes.
Features
- Added support for calling
startCamera()
with video and audio initially off beforepreAuth()
orjoin()
. You can now specifysetStartVideoOff
orsetStartAudioOff
asDailyCallOptions
.
Bugfixes
- We now emit an audio focus loss event on Android if the user receives a phone call.
- On Android versions below 12, we should no longer receive an audio focus loss event in situations where the audio from multiple sources would actually be mixed. This issue previously was leading to remote participants being unnecessarily muted.
- On iOS, we've replaced
AVAudioSessionCategoryOptionDuckOthers
withAVAudioSessionCategoryOptionMixWithOthers
to improve volume of multiple simultaneous streams without the side effect of not being able to hear remote participants. - Fixed a broken call to
console.warn()
- Fixed handling of default values for
enable_knocking
. - Fixed issue where
.destroy()
would never resolve when called inside of a left-meeting event handler, originally reported via github. Thanks for the report, @frankie567! - Fixed a potentially leaked background worker.
- Fixed a bug where recordings would not time out as expected.
Other improvements
- Began migration away from using
track
stats, because theRTCMediaStreamTrackStats
reports are being deprecated.
0.29.0
Features
-
A new permissions system allows you to specify a couple of different permissions for each participant:
canSend
, which specifies which kinds of media the participant is allowed to send ('video'
,'audio'
,'screenVideo'
,'screenAudio'
).hasPresence
, which specifies whether the participant appears as “present” (as opposed to “hidden”) in the meeting, i.e. whether they are listed in everyone’sparticipants()
.
Participant permissions can be specified in a couple of ways:
- Initial default permissions for new participants in your domain, room, or meeting token configurations
- A meeting owner can change other participants’ permissions at runtime with a call to
updateParticipant()
orupdateParticipants()
, e.g.updateParticipant('<participant-id>', { updatePermissions: { canSend: new Set(['video', 'audio']), hasPresence: true } })
-
The code that daily-js (a react-native-daily-js dependency) downloads before you join a call is now “pinned” to that version of daily-js. That means you will no longer get (in many cases, unwanted) updates to Daily client-side code without updating your react-native-daily-js dependency.
Bugfixes
- We fixed a bug where if you attempted to update your desired max spatial layer for some subscribed media (via
updateReceiveSettings({ '<participant-id>': { video: { layer: } } })
, say) while the subscription was still being established, the updated layer would never take effect. - If you
setUserData(null)
, other participants will see youruserData
change tonull
, notundefined
.
Other improvements
- Some optimizations to client-server signaling messages.
0.28.0
Features
-
🗣️ Experimental: User Data API
This preview of a new API is meant to allow customers to set and share custom participant state, like whether a participant in a call has raised their hand. The data is tied to a single participant, settable at join time, dynamically updatable, and retrievable remotely as data on each participant.
The data can be any JSON-serializable JavaScript object less than 4096 characters in length. It can be set via the new
userData
Frame property, or as a parameter to the new methodsetUserData
, and it can be read as a key on participant, e.g.participants()['local'].userData
.Note: this data is not intended for frequent, rapid updates. For example, it would not be ideal for storing real-time location of moving users within a spatial call application. Local state will be set immediately, and remote state will eventually reflect the last call made.
Full documentation for this feature will be released in the future as it matures.
-
🚀 Allow setting an idle timeout for streaming
When a user switches to another tab, some browsers throttle the CPU and cause their stream to pause. Idle timeout logic on our worker will stop livestreams or recordings automatically in this scenario, so we now allow users to override this behaviour and let streams run on for a configurable time before timing out as idle.
Control this behaviour by setting the new key
minIdleTimeOut
to a number of seconds in the DailyStreamingOptions object supplied to either thestartRecording
orstartLivestreaming
daily-js methods. For example:startRecording({ width: 1920, height: 1080, fps: 30, minIdleTimeOut: 5 * 60, // five minutes, the current default });
Bugfixes
- 🐛 Allow
joined_at
to be undefined, and prevent it from being set before it has a reasonable value. (Fixes Github issue #191).
Other Improvements
- 💻 Update streaming/recording APIs to allow specifying an
instanceId
. This lays the groundwork for some day enabling multiple active recordings and/or livestream instances per call. - 📷 Add new
selected-devices-updated
event which will fire whensetOutputDeviceAsync
is called, to allow applications to respond to output device changes.
0.27.0
Bugfixes
- Added support for React Native 0.69 and up.
Other improvements
- Add TypeScript types for specifying custom video layout parameters in the
startRecording()
andstartLiveStreaming()
methods.
0.26.0
Features
- Added ability to configure high quality audio output. See new fields in the
dailyConfig
object included in the frame propertiesmicAudioMode
: defaults tonull
. set to "music" to increase the average bitrate of the microphone track to 256K.userMediaAudioConstraints
: allows you to pass in custom media track constraints for use in thegetUserMedia
call for the microphone track.