Features
-
Added support for sending custom tracks in addition to camera, mic, and screen tracks.
If you were previously usingbeta*
methods to do this, you can migrate your code to use the new methods, which support sending custom tracks in peer-to-peer mode.
To start a custom track:const trackName = await callObject.startCustomTrack({ track }); // or, with all options specified... await callObject.startCustomTrack({ track, trackName: 'myGrooves', mode: 'music' });
To stop a custom track you’ve started:
callObject.stopCustomTrack(trackName);
You and other participants will receive track state updates via the normal
'participant-updated'
event. -
Added a
showUserNameChangeUI
call option for controlling whether to display the user name change UI in embedded Daily Prebuilt (true
by default). When set tofalse
, you should use tokens to assign participantsuser_name
s.const callObject = DailyIframe.createCallObject({ showUserNameChangeUI: false, });
-
Added a
maxDuration
option when starting a recording. The max recording duration is 3 hours if not specified. It is recommended you not 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.setMeetingSessionData({ foo: 'bar' }); // or, with all options specified... // replace the previous meeting session data with the new data (the default behavior) callObject.setMeetingSessionData({ foo: 'bar' }, 'replace'); // merge top-level keys in the new data on top of the previous data callObject.setMeetingSessionData({ foo: 'bar' }, 'shallow-merge');
To access meeting session data:
callObject.meetingSessionState().data;
To get notified when the meeting session data changed:
// note: this event actually fires when anything in meetingSessionState() // changes, which includes topology ('sfu' or 'peer') callObject.on('meeting-session-state-updated', (event) => { console.log(event.meetingSessionState.data); });
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 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