Skip to content

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

0.34.0

16 Dec 21:28
Compare
Choose a tag to compare

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

30 Nov 14:55
Compare
Choose a tag to compare

Bugfixes

  • Fix a case where a warning log may throw an exception.

0.33.0

30 Nov 01:30
Compare
Choose a tag to compare

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

22 Nov 00:55
Compare
Choose a tag to compare

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 to enumerateDevices().

  • Fixed erroneously-reported track states for rmpAudio and rmpVideo 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

05 Nov 02:04
Compare
Choose a tag to compare

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

24 Oct 22:14
Compare
Choose a tag to compare

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 before preAuth() or join(). You can now specify setStartVideoOff or setStartAudioOff as DailyCallOptions.

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 with AVAudioSessionCategoryOptionMixWithOthers 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

0.29.0

19 Sep 14:36
Compare
Choose a tag to compare

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’s participants().

    Participant permissions can be specified in a couple of ways:

  • 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 your userData change to null, not undefined.

Other improvements

  • Some optimizations to client-server signaling messages.

0.28.0

22 Aug 18:50
Compare
Choose a tag to compare

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 method setUserData, 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 the startRecording or startLivestreaming 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 when setOutputDeviceAsync is called, to allow applications to respond to output device changes.

0.27.0

29 Jul 17:54
Compare
Choose a tag to compare

Bugfixes

  • Added support for React Native 0.69 and up.

Other improvements

0.26.0

07 Jul 20:01
Compare
Choose a tag to compare

Features

  • Added ability to configure high quality audio output. See new fields in the dailyConfig object included in the frame properties
    • micAudioMode: defaults to null. 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 the getUserMedia call for the microphone track.