Releases: daily-co/daily-js
0.21.0
Features
-
Introduced a new event,
live-streaming-startedthat corresponds to when a live streaming has started for the call. The event payload optionally includes the streaminglayout:{ "action": "live-streaming-started", "layout": {} // see layout object in [startLiveStreaming](https://docs.daily.co/reference/daily-js/instance-methods/start-live-streaming) }
-
Beta (cloud recording): Added support for
recording-startedandrecording-stoppedforcloud-betarecording. Allrecording-startedevents will now include thetypeof recording started (ie."local","cloud","rtp-tracks","output-byte-stream", or"cloud-beta"). When thetypeiscloud-betaorrtp-tracks, therecording-startedevent will also includestartedBywith the participant id of the person who started the recording.cloud-betarecordings will also include the samelayoutproperty as live streaming events.{ "action": "recording-started", "callFrameId": "16149871051110.5607513282111183", "layout": { "preset": "default" }, // only for rtp-tracks recordings "local": true, // only present for local and cloud recordings if you started the recording "recordingId": "cab2be92-1551-42d8-bcdf-11fe7bd81923", // only for cloud recordings "startedBy": "1c6d5474-b133-4993-c943-f1ffdbb38cad", // the participant that started a cloud-beta or rtp-tracks recording "type": "cloud-beta" // or rtp-tracks, local, cloud, or output-byte-stream }
Bugfixes
- added missing
userNameto theDailyCallOptionstype - Beta (background blur): added better validation for the optional
configobject passed in as part ofprocessorinupdateInputSettings - Beta (background blur): changed the
strengthvalue from being anintranging from 0-10 to afloatpercentage value, ranging from 0-1. - Resolved an issue that would cause
cloud-betaorrtp-tracksrecordings to stop ifstartRecording()was called multiple times in the same session.
0.20.0
Features
- Added language support for Russian. See docs on
[setDailyLang()](https://docs.daily.co/reference/daily-js/instance-methods/set-daily-lang#main)and the IFrame Properties for information on setting the language. Useruto specify Russian. - Beta (background blur): In Prebuilt only, added support for enabling/disabling UI for turning on background blur. To enable, you must set the (not documented)
enable_video_processing_uiproperty totruein your domain or room properties. This is defaulted tofalse. Please contact help@daily.co for more details and the implications of turning this feature on. - Beta (background blur): Added ability to detect if a device/browser supports video processing (ie. background blur). See
supportsVideoProcessingreturned by supportedBrowser().
0.19.0
Features
-
For prebuilt users, Added
show-local-video-changedevent that fires when a local participant hides or shows their own video element (when thesetShowLocalVideo()method is called).. -
Introduced new method,
getNetworkTopology()which indicates whether the call is happening over an "sfu" or "peer" connection type.let { topology } = await call.getNetworkTopology(); // topology will be set to 'sfu' | 'peer' | 'none' (if not in the call)
-
Added support for new portrait layouts to live streaming with the options of a 'vertical' or 'inset' layout. See the portrait option in the docs for more information.
-
Beta Deepgram transcription support. Have a look at startTranscription() to get started.
-
Beta support for background blur / processing of the local camera. IMPORTANT: This is an early Beta. For more information on how to use this feature, please contact help@daily.co. Full documentation and support coming soon.
Bugfixes
- Fix
DailyCallOptionsto allowaudioSource/videoSourceto be set via boolean.
Other improvements
- Improved TypeScript definitions for recording/streaming options
- Removed default values from
startRecordingandupdateRecordingto allow for detection of user-set vs. default values down the line in validation
0.18.0
Features
-
Introduces a new beta recording type,
cloud-beta, which records a Daily call server-side.-
Set the
enable_recordingproperty for a room or meeting token tocloud-betato test it out. Be advised that this feature is beta and is subject to change -
You can now pass a
layoutproperty to startstartRecordingthat determines how participants' camera streams will be displayed in the recording. Thislayoutobject includes apresetkey that specifies adefault(grid),single-participant, oractive-participantlayout value. Thedefaultvalue can be set with an additionalmax_cam_streamskey to indicate the number of participant videos displayed.await call.startRecording({ width: 1280, height: 720, backgroundColor: "#FF1F2D3D", layout: { preset: "default", max_cam_streams: 5, }, });
-
The new
updateRecordingmethod makes it possible to update thelayoutvalue mid-recording.await call.updateRecording({ layout: { preset: "single-participant", session_id: "abcd123..." } });
-
Additional Notes:
- The new
layoutproperty ofstartRecordingandupdateRecordingmethod are only applicable for the newcloud-betarecording type. - Cloud recording is only available to Scale Plans and is an additional charge. See daily.co/pricing.
- The new
For more details on these recording improvements, please contact daily
-
0.17.0
Features
-
Shipped
activeSpeakerModeiframe property to control whether Daily Prebuilt displays the person currently speaking ({ activeSpeakerMode: true }; this is the default) or a grid of call participants ({ activeSpeakerMode: false }).Set Daily Prebuilt to grid mode
DailyIFrame.createFrame({ activeSpeakerMode: false }); -
New iframe property
layoutConfigcustomizes how the grid of video tiles behaves when the browser is resized (if the call is in grid mode, of course)Example layoutConfig usage
DailyIframe.createFrame({ layoutConfig: { grid: { minTilesPerPage: 3, // default: 1, minimum required: 1 maxTilesPerPage: 36 // default: 25, maximum allowable: 49 } } }); -
Added 'staged' media track subscription state that corresponds to setting up the connections for a track, but not transmitting data across that connection. This lets you "stage" tracks that you know you'll need soon, for later rapid transition into the fully "subscribed" state, without using any extra bandwidth. Reminder: Track subscriptions are only supported when your call is in SFU mode.
Example 'staged' usage
call.updateParticipant(id, { setSubscribedTracks: { video: 'staged', }, }); -
Launched several affordances to give you control over how you want to receive the video tracks that you're subscribed to. These are referred to as receive settings. The first—and so far only—configurable receive settings are the desired maximum simulcast layers for video and screenVideo. A higher simulcast layer corresponds to higher quality. The new affordances are:
- receiveSettings() and updateReceiveSettings() instance methods
- receiveSettings DailyIframe property
- receive-settings-updated event
Note: Simulcast layer settings only apply when a call is in SFU mode.
Example usage: update receive settings for a participant on the fly
call.updateReceiveSettings({ 'some-participant-id': { video: { layer: 0 } } });
0.16.0
Features
- You can now customize colors when using Daily Prebuilt. Pass your own hex codes as a theme property to
join()orcreateFrame(), or use the newsetTheme()method. You can inspect your custom theme using thetheme()method and get notified when you’ve changed it via the ‘theme-updated’ event.
Other improvements
0.15.0
Bugfixes
- Fixed a bug where the
'active-speaker-change'event wouldn't fire immediately uponjoin()if it wasn't the first timejoin()was invoked on the call object (i.e. if you were reusing the same call object for multiple calls).
0.14.0
Features
- Added
byDeviceInUseas a possibleparticipants().local.tracks.video.blockedproperty. Now, when Daily can't access a camera on Windows because another app is using it,participants().local.tracks.video.blocked.byDeviceInUsewill be set totrue, and a'participant-updated'event will fire. This sets you up to handle the use case (say, by showing a prompt asking your user to close other apps that might be using the camera).
0.13.0
Features
- A new 'lang-updated' event fires when setDailyLang() is called and changes the call language. The payload includes two values:
langandlangSetting.langis the language currently in effect.langSettingis the value the user explicitly specified (e.g. viasetDailyLang()) that resulted in that language ultimately being set. For example, if you callsetDailyLang('en'), both yourlangand yourlangSettingwill be'en'. If you callsetDailyLang('user'), where'user'is a special language setting that instructs Daily to use the user’s browser’s language preference, thenlangSettingwill be'user'andlangwill be the language chosen based on the browser setting:'en','fr','pt', or any other Daily-supported language. - A new getMeetingSession() method returns the current meeting session id. A meeting session is a set of one or more people in a room together during a specific time window.
- A new 'meeting-session-updated' event fires when your meeting session changes. One meeting session ends and another begins, for example, when you've been sitting alone in a room for 10 minutes (cricket, cricket).
- Norwegian language support has been added in Daily Prebuilt (language code
'no').
Bugfixes
- Squashed a bug where if you invoked two or more async methods (like getInputDevices(), room(), requestAccess(), etc.) within the same millisecond, some of those methods might never have resolved.
- When a call-ending error happens while using Daily Prebuilt, the call iframe will no longer be cleared. Instead, a relevant user-friendly error message (which might be an oxymoron) will be displayed.
0.12.0
Features
- A new
updateLiveStreaming()method exists to let you update on the fly parameters of a live stream you've previously started withstartLiveStreaming(). So far the only parameter you can update islayout. - A new
'active-participant'layout preset has been added for live streaming:startLiveStreaming({ rtmpUrl: <url>, layout: { preset: 'active-participant' } }). - You can now specify
'user'as a value when invokingsetDailyLang()or as alangproperty when invokingjoin(),preAuth(),startCamera(), or factory methods likecreateFrame().'user'instructs Daily to use the user's preferred language as specified by the browser. - A new method,
getDailyLang()returns a Promise that resolves to{ lang: <language>, langSetting: <specified language> }, telling you both the language actually in effect and the language you've specified. For example, if you've specified'user'as your language,getDailyLang()might give you{ lang: 'en', langSetting: 'user'}.
Bugfixes
widthandheighthave been added as arguments in the TypeScript declaration of thestartLiveStreaming()method.
Other improvements
supportedBrowser().supportednow returnsfalsefor Edge 18. So long, Edge 18, it's been a wild ride 👋.'error'and'camera-error'event payloads now include an optionalerrorfield in addition to the existingerrorMsgfield. This newerrorfield includes atype(which you can think of as an error code but a string constant) and an optionallocalizedMsg, which can provide you with a localized UI-friendly message describing the error. Note that not all kinds of errors have anerrorfield yet—seeindex.d.ts'sDailyCameraErrorTypeandDailyFatalErrorTypefor supported error types so far—but the eventual goal is that you'll be able to stop relying onerrorMsgin your code to identify errors.- The
preAuth()method will now put the meeting into an'error'state (meetingState() === 'error') if it determines that a provided join token is expired or not yet valid or if the room is expired or not yet valid, and will fire a corresponding'error'event. This behavior better matchesjoin()'s behavior.