Commit Graph

206 Commits

Author SHA1 Message Date
Andrei Gavrilescu
a4c20469cd feat(API): expose recording consent to external api (#16141)
* expose recording consent to api

* Update react/features/recording/actions.web.tsx

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-06-17 14:44:00 +03:00
Mihaela Dumitru
ecf9bee7d0 fix(recordings) create missing local tracks when unmuting after consent (#16119)
* fix(recordings) create missing local tracks when unmuting after consent

* fix(conference) Avoid creating duplicate tracks on unmute

* squash: Ignore TS linter error

---------

Co-authored-by: Jaya Allamsetty <jaya.allamsetty@8x8.com>
2025-06-09 16:44:24 -04:00
Saúl Ibarra Corretgé
be9e1136de fix(ts) apply import linting rules to TS files too 2025-06-04 22:04:36 +02:00
Дамян Минков
fa9aab953d feat(transcribing): Adds config to skip inviting jigasi on transcribing. (#16095)
* feat(transcribing): Adds config to skip inviting jigasi on transcribing.

* squash: Changes config value name.
2025-05-29 21:35:46 -05:00
Saúl Ibarra Corretgé
589baab2ae fix(local-recording) defend against out of order events
We have observed some failed recordings which are lacking the EBML
header. The only way in which that seems plausible is if the
dataavailable event is received while processing the stop event. This is
allegedly not possible, but it's the only plausible explanation, so
let's defend against that.

Extend the timeslice back to 5s too.
2025-05-28 10:43:33 -05:00
Saúl Ibarra Corretgé
734ab449a6 fix(local-recordings) back to WebM format, fix duration
After a lot of back and forth, WebM seems to be the only option we
really have. In terms of containers and codecs, here is the rundown:

- WebM, any codec: the resulting file is not seekable
- MKV, any codec: the resulting file is not seekable
- MP4, vp9 + opus: video artifacts and audio clipping, file is seekable
- MP4, av1 + AAC: all good, but not supported on Linux :-/

MP4 looked very promising but there is no combination that leads to
something that works reliably everywhere, oh well. In addition, MP4
files can be opened with QuickTime on macOS, but not with the codec
combination we'd use, so that is somewhat a disadvantage.

So, we are back to where we started: WebM with VP8 and opus. But we need
to fix the duration in a potentially long file... the trick is to _only_
fix the duration. We can do that by inserting the right segment in the
metadata section. Something we cannot do without reading the whole file
is create cue points, but players like VLC seem to work well without
them.
2025-05-19 11:33:46 -05:00
Saúl Ibarra Corretgé
561271d926 fix(local-recordings) use the Matroska container with VP8 as a codec
In the 1st incarnation of local recordings we used to use VP8 as the
video encoder. Upon switching to MP4 that combiantion is not supported
for some reason, so I used VP9 instead.

Some anecdotal evidence suggests VP9 is behqaving more erratically, with
rendering errors and fixes.

Turns out Chrome also supports the Matroska container! And VP8 inside it
at that! The bonus we get from using it is that QuickTime on macOS won't
try to open it, thus avoiding some confusion with MP4 files, which it
recognizes, but cannot open due to the video codec.
2025-05-08 15:41:26 +02:00
Saúl Ibarra Corretgé
e21da045ad fix(local-recordings) use constant bitrate for audio 2025-05-08 15:41:26 +02:00
Saúl Ibarra Corretgé
598d3764dd fix(local-recordings) make sure we have a gDM audio stream 2025-05-06 14:42:29 +02:00
Saúl Ibarra Corretgé
cff91756d0 fix(local-recordings) tweak audio constraints for local recordings 2025-05-06 14:42:29 +02:00
Saúl Ibarra Corretgé
5c0c3c2e0d feat(recording) refactor consent dialog (#15985)
* feat(recording) refactor consent dialog

Offer 2 choices and add a configurable "learn more" link.

* hide dialog and display link conditionally

* native changes

---------

Co-authored-by: Mihaela Dumitru <mihdmt@gmail.com>
2025-05-06 15:02:39 +03:00
Saúl Ibarra Corretgé
4878874a68 fix(local-recordings) fix data loss when MediaRecorder is stopped
Flush the file after the 'stop' event is emitted, which happens _after_
the last 'dataavailable' has been emitted, and thus when the
MediaRecorder is really done.

In addition, lower the time slice as added precaution against crashes.
2025-04-30 15:57:18 +02:00
Saúl Ibarra Corretgé
178e87d408 fix(local-recordings) more resilient way to get local audio
It's OK if we don't have any local audio track, we'll add it to the
mixer later.

The original bug / limitation that prompted the previous code no longer
applies since we always have a MediaStream (with audio tracks) which
we are recording.
2025-04-30 15:57:18 +02:00
Saúl Ibarra Corretgé
4fcab33afb feat(local-recordings) refactor how audio is captured
Capture the tab audio, which will include all participants and sound
effects, YouTube videos, anything playing in the tab.

This requires the `suppressLocalAudioPlayback` constraint since
otherwise the shared tab won't keep playing audio.

Local audio still needs to be injected seprarately, since it's not
played back to the local user.
2025-04-30 15:57:18 +02:00
Saúl Ibarra Corretgé
99669dc869 fix(local-recordings) style, for readability 2025-04-30 15:57:18 +02:00
Saúl Ibarra Corretgé
bf34c9ab19 fix(local-recording) require setCaptureHandleConfig 2025-04-30 15:57:18 +02:00
Saúl Ibarra Corretgé
607073c669 feat(local-recordings) remove recording time limit
Use the `showSaveFilePicker` File System Access API to pre-select the
file for download and stream the contents there. The browser uses a
temporary file as the buffer, thus not requiring us to buffer the
contents in memory.

Also change the container to MP4, since we have no way to fix the
seeking problem since we don't have the file in memory. Good news is
that it's supported since Chrome 126 and we can feature detect it!

Finally, add a helper `isSupprted` method which feature-detects
everything we need to make this work.

Ref: https://developer.mozilla.org/en-US/docs/Web/API/Window/showSaveFilePicker
Ref: https://groups.google.com/a/chromium.org/g/blink-dev/c/p1OMVj1FrMI/m/6FdLk7rZAQAJ
2025-04-23 13:52:02 -04:00
Mihaela Dumitru
cf7c39d3e5 fix(recording) disable option to dismiss consent dialog (#15876) 2025-04-02 15:54:27 +03:00
damencho
92df4bfbbb feat: Backend reports default permissions.
When any of the backend is used 'anonymous', 'jitsi-anonymous', 'internal_hashed', 'internal_plain', 'cyrus' and a participant becomes a moderator, because of external module or because set from jicofo we send to client with the self-presence about becoming moderator a default set of permissions which can be controlled via prosody config.
If using 'token' authentication the above applies only if there is a token and the token does not contain context.features.
2025-03-31 11:49:13 -05:00
Saúl Ibarra Corretgé
1e8cc9d085 feat(inIframe/isEmbedded) add ability to detect generic embedding
On web we detect if we run on an iframe, and on mobile we detect if the
app is one of ours.
2025-03-26 23:39:16 +01:00
damencho
ea0f9e7934 feat: Adds ts rule noImplicitOverride and fix errors. 2025-03-12 11:40:07 -05:00
Saúl Ibarra Corretgé
9843aca00a fix(rn,recording) fix closing the consent dialog (#15699)
* fix(rn,recording) fix closing the consent dialog

* fix(recording) avoid using private properties
2025-03-05 11:27:14 +02:00
Mihaela Dumitru
ebdd9755ba feat(recordings) add consent dialog (#15673) 2025-03-04 10:30:12 +02:00
damencho
0387cdc888 feat(notifications): Make all error notifications sticky.
There are many cases where the error disappears and users easily miss the information.
2025-02-10 06:17:50 -06:00
Saúl Ibarra Corretgé
13f1cb13c5 fix(ts) drop bogus method anotations 2025-02-03 20:51:15 +01:00
damencho
d6a42fbe43 fix(jwt): Fixes when feature is missing from features.
By default, that feature is disabled.
2024-10-03 14:04:14 -05:00
Дамян Минков
b3742a3438 fix(transcriptions,recording): Allows non moderators with features to dial, record or transcribe. (#15074)
* fix(transcriptions): Uses dial command to invite transcriber.

* fix(transcriptions,recording): Allows non moderators with features to dial, record or transcribe.

* sqaush: Make sure filtering works when only is a moderator.

It works now and without a token and no features, but being moderator.

* squash: Rename constant.

* squash: Checks features first before defaulting to moderator when filtering metadata service.

* squash: Checks features first before defaulting to moderator in UI.

* squash: Fixes lint and one other check.

* squash: Moves more logic to is_feature_allowed.

* squash: Drops unnecessary check.

* squash: Uses constant coming from ljm.

* squash: Toggles back captions button on error.

* squash: Fix comment.

* squash: Reverting back isLiveStreamingButtonVisible.

* squash: Fix imports.
2024-09-13 11:06:29 -05:00
Hristo Terezov
2514617417 fix: Make all middleware functions sync.
Some middleware functions are declared as async. This wraps next(action) in Promise which will delay the execution of actions and also dispatch will return the its result always as a Promise.
2024-07-25 07:17:16 -05:00
Saúl Ibarra Corretgé
b7785a9f91 feat(recording) add ability to change recording defaults
If recordings.recordAudioAndVideo is set to false don't record
audio-video by default.
2024-03-11 21:39:23 +01:00
Hristo Terezov
ea075d9bae fix(toolbarButtons): Store all buttons in redux.
The previous version of getToolbarButtons function was actually adding the custom buttons on every call to the config toolbarButtons array, effectively creating dublicates of every custom button. The PR fixes this issue.

Also now we will be running the getToolbarButtons calculation only when needed.
2024-02-29 16:36:52 -06:00
Saúl Ibarra Corretgé
a6f6b3a2d2 fix(subtitles) keep subtitles state when recording 2024-02-27 09:17:24 -06:00
Saúl Ibarra Corretgé
a4c52b02e7 fix(recording) set transcribing metadata when stopping 2024-02-26 13:30:23 +01:00
Joseph Garrone
73952ee1f7 refactor(styles): Migrate withStyles to tss-react, remove @mui/styles dependency (#14310) 2024-02-26 14:10:07 +02:00
Saúl Ibarra Corretgé
e8317fccfe fix(local-recordings) fix on Chrome
WebM + VP8 seems to be the one thing that works, requesting H.264 starts
the recorder in Matroska + AV1 format (WAT) but no data is received at
all.
2024-02-15 17:49:45 +01:00
Saúl Ibarra Corretgé
bbc9c64978 fix(recording) only show advanced section for cloud recordings 2024-02-15 17:49:45 +01:00
Avram Tudor
e73c3b6697 feat(recordings) send recordings metadata
* ref: centralise conference metadata updates

* feat(recordings) send recordings metadata
2024-02-08 21:38:06 +02:00
Avram Tudor
9b61ad3616 fix(recording) do not show advanced options for users with local recording rights 2024-02-08 17:41:55 +02:00
Avram Tudor
583725bf31 fix(recording) do not show stop recording option in some wrong cases 2024-02-08 17:41:55 +02:00
Avram Tudor
361b82a1ed ref: add selector for checking cloud recording running status 2024-02-08 17:41:55 +02:00
Saúl Ibarra Corretgé
6207e95cad fix(recording) fix default value to auto-transcribe-on-record 2024-02-06 11:14:12 +01:00
Avram Tudor
34abd279be feat(recording) add notification to suggest recording at meeting startup (#14296)
* feat(recording) add notification to suggest recording at meeting startup

* code review changes

* update strings

* fix mobile

* fix lint
2024-02-01 17:08:41 +02:00
Hristo Terezov
831d39d447 fix(visitors): hide highlight button. 2024-01-30 17:57:05 -06:00
Saúl Ibarra Corretgé
ba7ed83d48 feat(recording) stop transcription when recording is stopped 2024-01-29 15:09:28 +01:00
Saúl Ibarra Corretgé
5a96050973 feat(recording) always show advanced options in dialog 2024-01-29 15:09:28 +01:00
Calinteodor
90628f56f8 feat(react-native): rn 0.72.7 update (#14130)
feat(react-native): version 0.72.7 update
2024-01-09 15:16:51 +02:00
Avram Tudor
7f87d4eada feat(transcript) add recording settings for recording transcriptions (#14158) 2023-12-19 11:25:06 +02:00
Emmanuel Pelletier
51a4e7daa3 Globally improve accessibility for screen reader users (#12969)
feat(a11y): Globally improve accessibility for screen reader users
2023-06-19 14:34:41 +03:00
Robert Pintilii
c8a87e368a fix(local-rec) Fix audio only recording (self) (#13442) 2023-06-12 11:21:20 +03:00
Robert Pintilii
ae281e9935 ref(TS) Improve TS (#13370)
Use correct types for action, dispatch and getState
2023-05-22 09:54:11 +03:00
Robert Pintilii
59f1ee1e1e ref(TS) Improve TS (#13355) 2023-05-16 12:34:30 +03:00