It's about to become very confusing, since we are going to add actual
local recordings with video.
This feature was never fully finalizeed since it required manual
processing of the files, as they were not uploaded anywhere.
In addition, unless one opens the local audio device without any audio
processing first, any tracks opened later will have audio proceessing
turned on, something not desirable for the scenario this feature was
designed for in the first place: podcasts.
This feature will likely come back as a JaaS demo / MVP where the local
recording is made outside of the Jitsi Meet iframe.
* fix(device-selection) Enable device selection on mobile Safari.
With https://bugs.webkit.org/show_bug.cgi?id=179363 being fixed, we should now be able to switch between devices in call. Also, before the webkit fix, we were able to continue to use the old track when a new track was created for preview in device settings before joining the call. This doesn't work anymore after the fix. Therefore, always replace the track in redux even if the selected device hasn't changed. Depends on https://github.com/jitsi/lib-jitsi-meet/pull/1993.
* chore(deps): update lib-jitsi-meet@latest.
* Pushes e2e pings to rtcstats
* linter fixes
* linter fixes
* Re-use existing event instead of introducing a new one.
* Don't update the connection info popup stats when the e2e rtt changes.
* Bumps ljm version to the latest
* e2e pings should work on mobile
* tweak the e2eRttChanged action properties
* fixes comments
Update Android build to support gif
Use GIF format instead of animated webp
Show GIFs in chat messages
Display GIF over tile
Add Giphy button in reactions menu
Added Giphy dialog
Fix isGifMessage to also allow upper case
Show GIF menu in reactions menu
Search GIFs using the GIPHY API
Show GIFs as images in chat
Show GIFs on the thumbnail of the participant that sent it
Move GIF focus using up/ down arrows and send with Enter
Added analytics
* feat: Handles hidden-from-recorder from jwt.
Hides the participant that has this flag in jwt from the recorder. A hidden meeting moderator.
Makes sure follows me works and no tracks are being added.
* squash: Skips showing notification when disabling
local audio and video.
* squash: Fixes comments.
* squash: Updates with ljm changes.
fix(ProxyConnection) set signaling layer by @saghul in #1862
fix: Fixes version while building. by @damencho in #1866
feat(multi-stream-support)Add support for multiple local and remote tracks/mediaType. by @jallamsetty1 in #1861
fix: Add private message handler for breakout_rooms by @steve-vsee in #1867
fix(JingleSessionPC) Do not force track removal at pc level on user leave. by @jallamsetty1 in #1869
feat(multi-stream-support) Handle SDP munging for multiple local/remote streams per ep. by @jallamsetty1 in #1868
This has 2 benefits:
a) it no longer needs to be built at install time, thus making builds faster
before:
real 0m46.865s
user 1m3.938s
sys 0m22.478s
after:
real 0m27.828s
user 0m25.582s
sys 0m21.699s
b) integrity errors go away since they are not computed over a locally
generated tarball
This is the stepping stone for TypeScript support across Jitsi Meet. Currently
it makes it possible for lib-jitsi-meet to use TypeScript without adding any TS
code here yet.
We don't recommend using the RN CLI due to the changes we make to the
standard RN project layout. Xcode and Android Studio should be used to
compile the app instead.
Keeping up with it has become untenable. With the last update (required
due to the RN bump) we have around 5k errors due to a major change in
how Flow operates: https://flow.org/en/docs/lang/types-first/
Fixing it is absolutely non-trivial, and at this point we better spend
that effort migrating to TypeScript instead.
If that alone wasn't a good enough reason, Facebook made it abundantly
clear they only care about Flow for themselves, not for the larger
community:
https://medium.com/flow-type/clarity-on-flows-direction-and-open-source-engagement-e721a4eb4d8b.
TypeScript has won the community.
* ref(JitsiConference) Add audio level handlers only for audio tracks. Other minor formatting changes.
* ref(TPC) Remove an unused method.
* ref(RTC) fix format and alpha sort the functions in JitsiLocalTrack.js.
* Fire settings error event
* feat(misc) add stalebot
* fix: use correct jsdoc types for params and methods
502aaf15b3...b088347043
* fix(logging) Log all the ssrcs present in the source signaling. Since the order of the ssrcs in the json-encoded message is not guaranteed to be in the correct SIM/FID order, log all the ssrcs.
* fix: ensure mucNickname
* ref(JingleSession) Recycle m-lines by rejecting them on source removal.
adf2f15d00...502aaf15b3
I'm updating to RN 0.63 instead of the latest (0.66 at the time of this writing)
so we can update the navigation related libraries to their latest versions, and
then proceed with the larger leap towards the latest RN.
* fix(TPC): Implode the simulcast group only after toUnifiedPlan conversion. This fixes a regression introduced by the previous commit.
53b9601689...adf2f15d00
* ref(TPC) Cleanup and fix formating.
* ref(TPC) Remove an unnecessary toUnified sdp conversion. sLD is called immediately after createOffer/createAnswer, therefore the desc provided by createOffer/createAnswer can be directly passed to sLD without the need for converting it to unified plan format. This also fixes a warning seen on the browser console that says 'The description does not look like plan-b'.
* fix(tpc) extend ulpfec workaround to all versions
* fix: check if chrome version > 95 instead
* Fix issue number for rtx ulpfec workaround
* fix(tpc) disable ulpfec on chrome 97
55a03ac1b5...53b9601689
* fix: Drop unused region info from presence.
* fix: Reads lobby jid from correct location in the error. (#1830)
* feat: Adjust setReceiverConstraints to use new format (#1813)
63c3e1f869...55a03ac1b5
* fix(presence): Do not sent presence if there is no active media session.
* fix: server-side callstats is never enabled (#1823)
* fix(JitsiConference) squelch bogus p2p session end error
8aa35dae40...8a95fda259
* feat(tracks) Clean up the track if a source addition is rejected.
When jicofo rejects a source-add because of sendder limits, dispose and remove the local track from the conference.
* chore(deps) update LJM to latest.
* fix(ChatRoom) make sure we wait for all promises on leave()
* fix(ChatRoom) make sure EMUC is destroyed
* fix(JitsiConference) make sure RTC is always destroyed
* fix(log) don't log full stanzas
* fix(avmoderation,breakout-rooms) dispose handlers when leaving
6b3d3d2783...61aef90835
* feat: Handle disableBeforeUnloadHandlers option.
* feat(conference) Implement audio/video mute disable when sender limit is reached. Jicofo sends a presence when the audio/video sender limit is reaced in the conference. The client can then proceed to disable the audio and video mute buttons when this occurs.
f4f7db2e5f...6b3d3d2783
* fix(TPC): Select 1 as the default scale factor for p2p. This fixes an issue where a user is not able to unmute their video if the MediaStreamTrack associated with the camera stream returns a null value for the track height.
* Save track source name to JitsiRemoteTrack
bdfbb82087...a1c966058c
* TPC: make the comments more descriptive.
* fix(SignalingLayerImpl): Log an error when only the ssrc owner gets overwritten with a diff ep id.
* fix(TPC): Force reneg when user unmutes the first time. This ensures that the source signaling is sent before the mute state is sent in presence. Jicofo relies on mute state from presence to check if the sender limit has been reached.
6d981ebb6c...131b9458fe
* Initial implementation; Happy flow
* Maybe revert this
* Functional prototype
* feat(facial-expressions): get stream when changing background effect and use presenter effect with camera
* add(facial-expressions): array that stores the expressions durin the meeting
* refactor(facial-expressions): capture imagebitmap from stream with imagecapture api
* add(speaker-stats): expression label
* fix(facial-expression): expression store
* revert: expression leabel on speaker stats
* add(facial-expressions): broadcast of expression when it changes
* feat: facial expression handling on prosody
* fix(facial-expressions): get the right track when opening and closing camera
* add(speaker-stats): facial expression column
* fix(facial-expressions): allow to start facial recognition only after joining conference
* fix(mod_speakerstats_component): storing last emotion in speaker stats component and sending it
* chore(facial-expressions): change detection from 2000ms to 1000ms
* add(facial-expressions): send expression to server when there is only one participant
* feat(facial-expressions): store expresions as a timeline
* feat(mod_speakerstats_component): store facial expresions as a timeline
* fix(facial-expressions): stop facial recognition only when muting video track
* fix(facial-expressions): presenter mode get right track to detect face
* add: polyfils for image capture for firefox and safari
* refactor(facial-expressions): store expressions by counting them in a map
* chore(facial-expressions): remove manually assigning the backend for tenserflowjs
* feat(facial-expressions): move face-api from main thread to web worker
* fix(facial-expressions): make feature work on firefox and safari
* feat(facial-expressions): camera time tracker
* feat(facial-expressions): camera time tracker in prosody
* add(facial-expressions): expressions time as TimeElapsed object in speaker stats
* fix(facial-expresions): lower the frequency of detection when tf uses cpu backend
* add(facial-expressions): duration to the expression and send it with durantion when it is done
* fix(facial-expressions): prosody speaker stats covert fro string to number and bool values set by xmpp
* refactor(facial-expressions): change expressions labels from text to emoji
* refactor(facial-expressions): remove camera time tracker
* add(facial-expressions): detection time interval
* chore(facial-expressions): add docs and minor refactor of the code
* refactor(facial-expressions): put timeout in worker and remove set interval in main thread
* feat(facial-expressions): disable feature in the config
* add(facial-expressions): tooltips of labels in speaker stats
* refactor(facial-expressions): send facial expressions function and remove some unused functions and console logs
* refactor(facial-expressions): rename action type when a change is done to the track by the virtual backgrounds to be used in facial expressions middleware
* chore(facial-expressions): order imports and format some code
* fix(facial-expressions): rebase issues with newer master
* fix(facial-expressions): package-lock.json
* fix(facial-expression): add commented default value of disableFacialRecognition flag and short description
* fix(facial-expressions): change disableFacialRecognition to enableFacialRecognition flag in config
* fix: resources load-test package-lock.json
* fix(facial-expressions): set and get facial expressions only if facial recognition enabled
* add: facial recognition resources folder in .eslintignore
* chore: package-lock update
* fix: package-lock.json
* fix(facial-expressions): gpu memory leak in the web worker
* fix(facial-expressions): set cpu time interval for detection to 6000ms
* chore(speaker-stats): fix indentation
* chore(facial-expressions): remove empty lines between comments and type declarations
* fix(facial-expressions): remove camera timetracker
* fix(facial-expressions): remove facialRecognitionAllowed flag
* fix(facial-expressions): remove sending interval time to worker
* refactor(facial-expression): middleware
* fix(facial-expression): end tensor scope after setting backend
* fix(facial-expressions): sending info back to worker only on facial expression message
* fix: lint errors
* refactor(facial-expressions): bundle web worker using webpack
* fix: deploy-facial-expressions command in makefile
* chore: fix load test package-lock.json and package.json
* chore: sync package-lock.json
Co-authored-by: Mihai-Andrei Uscat <mihai.uscat@8x8.com>
* fix(e2ee) disable p2p when e2ee is enabled
* fix(e2ee) fix race condition when restarting media sessions
* fix(p2p) fix error if p2p session is stopped while accepting it
* fix(e2ee) removed no longer needed code
* feat: SourceVideoTypeMessage message
* chore(lint) tame the new linter
* chore(deps) update Babel and ESLint to the latest versions
* chore(deps) adapt to logger package rename
* fix(e2ee): fix loading web worker when using a relative path inside a blob for the E2EE context
* * fix(sdp): provide SCTP streams, because the XMPP parser expects them
c193f0d433...51f77cbd51
* feat(recording): Add unexpected-request error
* fix(xmpp): use RTX with Firefox from 96 on only
* fix(sdp): update data channel to RFC format
* sdp: switch port to 9 and rtp protocol to UDP/TLS/RTP/SAVPF (#1697)
03bc5278da...c193f0d433
* fix(presence) Send presence on mute state change.
* fix(TPC) change the tranceiver dir to recvonly when track is removed. This fixes occasional failures of MuteTest.MuteAfterJoinCanShareAndUnmute torture test and also the case on Safari where user stopping the screenshare doesn't stop showing the screensharing indication on the thumbnail.
* fix: Avoid sending two presences if start muted and then screen share. (#1771)
* feat: use source names in presence
* ref: move SignalingLayer to the conference
* feat: Delays deployment info stats till we get update from backend. (#1770)
e566291864...e6b330186f
* ref(JitsiConference) Remove remote tracks from conf before reneg is done. We do not have to wait for the removal of the ssrcs from the remote description for removing the remote tracks associated with a participant that left the call. This speeds up removal of the participant from call even if the JingleSession modification queue is backed up.
* faet(SDP): Add test for jingle JSON format.
42c675249a...111e50c38a
* ref(JingleSessionPC) Do not renegotiate on every local source change. Instead rely on the 'negotiationneeded' event fired by the browser for JVB connection. This makes local source changes faster even if the modification queue is backed up.
75d3106544...012c38769d
* feat: Hides prejoin screen on conference in progress event.
We enter the conference view as early as possible on conference in progress as the joined event can be late in a big conference.
Also, we show conference view only when joining is in progress, for example, the with the lobby enabled where we try to join but fail, we do not want to show the conference view for a fraction of a second before showing lobby screen.
* squash: Drops CONFERENCE_JOIN_IN_PROGRESS.
* squash: Updates ljm with the new JitsiConference event.
* squash: Adds some debugs to the github action.
Easier to catch problems with package-lock.json file.
* feat(identity): add region identity parsing
* fix(IceFailedHandling) force client reload when ICE fails locally.
* fix(iOS15) fix not being able to unmute if "everyone starts muted" is set
* fix: logger calling wrong function typo
* feat: generates source names (#1725)
b5288c2989...febd9087b9
Changed screen capture to non effect. Effects are used to alter the stream, this feature does not need to alter the stream, it just needs access to it
Changed image diff library. Previous library diff’ed the whole image, the new one has en early return threshold
Use ImageCaptureAPI to take the screenshot. Added polyfill for it and polyfill for createImageBitmap
Added analytics
* fix(xmpp): disable RTX for Firefox < 93, because it results in random SSRC order
* fix(Jingle): stop reverting the SSRCs from Firefox
c15dda1537...7a56f7b341
* fix(browser-support) fix detecting iOS browsers correctly
* fix(JitsiConference):2 instances for the same room
* ref: sendMuteStatus is not async
ae70962bfa...c15dda1537
* fix(Jingle) Log the extracted info from Jingle IQ.
* ref(Jingle) Alpha sort and prefix the local functions with '_'
* ref(Jingle) Log formatted source information. Instead of logging the full IQs for Jingle messages like session-initiate, source-add and source-remove which can be very long, log just the formatted source information.
* ref(RTC) rename iceConfig to pcConfig. It makes more sense to call it pcConfig since it is the RTCConfiguration object passed to the WebRTC peerconnection.
* fix(logging) Log only the imp events on remote tracks. Log only the important events that we care about on the HTMLMediaElement that the remote tracks are attached to.
0646bc3403...ae70962bfa
It updates the main language file for a given locale from the canonical one and
sets the empty string on the missing keys. No longer used keys are discarded.
* feat(av-moderation) Ask to Unmute and remove from Whitelist
Make Ask to Unmute work without moderation
Add remove from moderation whitelist functionality
* chore(deps) lib-jitsi-meet@latest
* feat(av-moderation) Remove from moderation whitelist functionality (#1729)
* fix(chore) corrected typo in log message
* fix(e2ee) replace nullish coalescing with or
* fix(e2ee) restore initial key when RATCHET_WINDOW_SIZE reached
3b8baa9d3b...0646bc3403
Co-authored-by: Дамян Минков <damencho@jitsi.org>
* fix(JitsiConference) Check for room before calling isFocus method on the room object.
* fix(Jingle) Reverse the order of ssrcs signaled for Firefox. This fixes an issue where the bridge doesn't forward the HD stream from Firefox to other users in the call. The order of the ssrcs produced by the browser is from Highest resolution to lowest whereas the bridge assumes it to be from lowest to highest as is the case in Chrome and Safari.
* fix(codec-selection): Impose VP9 bitrates only when VP9 is the negotiated codec. If Jicofo doesn't offer VP9 but the client expresses a preference for VP9, VP9 bitrates were being imposed before.
609e3d5a1a...3b8baa9d3b
* fix: Reads shard name and from disco-info if available.
* chore(deps): bump sdp-interop to get another fix for ICE restart
* update sdp-interop to include Unified ICE restart fix
fbf85bdcec...609e3d5a1a
* fix(LocalSdpMunger): do not fake video sdp when screen sharing
* fix(JitsiConference) avoid extra processing if the room was left
* fix(moderator) remove unneeded log
b0d27fa8da...28a5355356
* fix(browser-support): Add audio track to pc always on mobile Safari. On mobile Safari, if a user joins audio and video muted, the browser doesn't decode the incoming audio. Workaround is to always add the audio track to pc and mute it if needed.
* feat: JSON encoded sources. (#1695)
2820d649ea...b0d27fa8da
* fix(ProxyConnection) add new required stubs
* fix(tpc) fix extracting ssrc map when using single stream
* fix(transcribing): send transcripton_language only when necessary (#1677)
97ff597425...6eaffc4b11
When participants panel is open and we approve a participant to unmute, the notification was not hidden as we were not correctly updating the state. We were expecting a participant object, but an id of the participant was used.
* fix(ConnectionQuality): Do not show red/yellow GSM bars on join. When the user first unmutes their video, the connection quality is shown as poor until the local stats are available. Calculate the connection quality only after the stats are available, i.e., assume 100% until pcStatsInterval has elapsed.
* feat(non-participant-messages) Add a new JitiConferenceEvent for messages ignored by ENDPOINT_MESSAGE_RECEIVED
* fix(precall) respect custom callstats script url for precall test
9e632a77c5...6a3df11ffa
* feat(BridgeChannel): Signal a new videoType for high fps screenshare. This lets the bridge adjust the bitrate allocation for this source so that layers with higher fps are prioritized over layers with higher resolution. As a result, endpoints with restricted downlink will receive a high fps low resolution share as opposed to a high resolution low fps screenshare.
* fix(log) lower severity of overly verbose logs (2)
fa834c2923...9e632a77c5
In version 1.15 the storage backend was rewritten, which hopefully allows us to
fix this crash on Android:
Caused by java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/user/0/org.jitsi.meet/databases/RKStorage
at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55)
at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1160)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1036)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1204)
at com.reactnativecommunity.asyncstorage.AsyncStorageModule$1.doInBackgroundGuarded(AsyncStorageModule.java:159)
at com.reactnativecommunity.asyncstorage.AsyncStorageModule$1.doInBackgroundGuarded(AsyncStorageModule.java:146)
at com.facebook.react.bridge.GuardedAsyncTask.doInBackground(GuardedAsyncTask.java:35)
at com.facebook.react.bridge.GuardedAsyncTask.doInBackground(GuardedAsyncTask.java:19)
at android.os.AsyncTask$2.call(AsyncTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at com.reactnativecommunity.asyncstorage.AsyncStorageModule$SerialExecutor$1.run(AsyncStorageModule.java:63)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:760)
THe new version fixed a longstanding problem with RN not updating the JS side
SDP representation properly. This will allow us to remove a hack we currently
have to sidestep this.
* feat(JingleSessionPC): Enable unfied plan by default for chrome p2p.
* fix(JingleSessionPC): Fix startMuted cases for p2p unified plan. Chrome doesn't create a decoder for ssrc in the remote description when there is no local source and the endpoint is offerer. Initiating a renegotiation with the endpoint as a responder fixes this issue. Add a workaround until Chrome fixes this bug.
* fix: Missed SSRCs in Unified Plan with several "ssrc-group:FID" groups. (#1658)
e6648fac96...b815157a22
* fix(TPC): Fix the screenshare issue when user starts video muted on chrome. Munge 3 ssrcs in the SDP for chrome in unified plan always for the simulcast case.
053a26604d...e6648fac96
* fix(JingleSessionPC): Disable unified-plan for p2p chrome. Do not enable unified plan for p2p chrome by default until StartMutedTest is fixed. Fix media direction for case when there are no local and remote sources, should be set to 'inactive' in that case.
3a313a244d...053a26604d
* fix(codec-selection): Fix VP9 codec switching issue in Chrome unified-plan. Munge only the m-line that corresponds to the source that the browser will be sending. Do not select VP9 on Firefox. Detect support for RTCRtpTransceiver#setCodecPreferences correctly.
89a7e2d9cd...3a313a244d
* fix(RTC): In unified-plan mode, disable the low resolution streams for low fps SS. In unified plan impl, it is not possible to enable/disable simulcast during the call since the same sender is re-used for all local video tracks. Therefore, disable the low resolution simulcast streams for low fps screensharing so that the bridge forwards only the highest resolution stream which is important for low fps screensharing.
f974007ca6...89a7e2d9cd
* fix(JingleSessionPC): Do not check if the ssrc already exists in the RD when adding a ssrc-group from source-add.
* feat: Switch to unified plan on chrome by default unless explicitly disabled.
* fix(VADAudioAnalyser): NPE error evaluating this._vadEmitter.on (#1652)
* Small fix in tokens doc.
b43a9fa0ee...f974007ca6
* fix(TPC): Do not remove ssrcs from remote desc for p2p. In unified plan, re-use of m-line (i.e., adding an SSRC, removing it and then adding it back) causes the browser to not render the media on Chrome and Safari. The WebRTC spec is not clear as to how browsers have to behave, this doesn't cause any issues on Firefox. As a workaround, only change the media direction and leave the ssrc in the remote desc. This automatically triggers a 'removetrack' event on the associated MediaStream and the track can be removed from the UI.
* Drops old prosody versions from the tokens instructions
0cdfb79c2e...b43a9fa0ee
* squash: Set capScreenShareBitrate flag every time a new pc is created.
* feat(RTC): Add the ability to change desktop share fps. Provide a method for changing the capture fps for desktop tracks during the call. These changes to the lib are needed for making it configurable from the UI.
46ec23fcdc...229015a6f3