* fix(TPC): fix local resolution/fps stats. Browsers do not generate a 'msid' attribute for ssrcs in unified plan mode, use mediaType as a key for the TrackSSRCInfo map.
* fix(recording): Send participant id when recording starts/stops (#1632)
8057f12a39...2259d44185
* fix(RTC): Adjust the media direction for p2p conn. For p2p connections, the media direction needs to be adjusted after every source-add/source-remove is processed based on the availability of local sources.
* fix(RTC): Use a enum for media direction.
5738c80baf...d9d9b7fc31
* fix(JingleSessionPC): Disable unified-plan for p2p. Disable cross browser p2p using unified plan until all the issues are fixed.
0993c8e93d...5738c80baf
* fix(LocalSdpMunger): Fix unit test.
* fix(CodecSelection): Call RTCRtpTransceiver#setCodecPreferences before renegotiation. Call RTCRtpTransceiver#setCodecPreferences with the preferrred codec order before every createOffer/createAnswer. This ensures that the codec preference is enforced even when there is no local description available yet while the preferred codec is being set immediately after media session creation.
* fix(JingleSessionPC): Add a workaround for chrome issue. The 'signalingstatechange' event for 'stable' is fired after the 'iceconnectionstatechange' event for 'completed' is fired on chrome in Unified plan. This prevents the client from switching the media connection to the p2p connection once the ice connection for p2p gets established.
* fix(Logging): Log enhancements. Add a preifx to logs for idenitifying the type of TPC/jingleSessionPC.
* feat(TPC): Enable unified-plan support for Chromium based browsers. This can be controlled through the config.js option 'enableUnifiedOnChrome'.
* fix(TPC): Do not configure encodings on Safari until reneg. Avoid configuring the encodings on Chromium/Safari until simulcast is configured for the newly added track using SDP munging which happens during the renegotiation.
* fix(TPC): Do not configure encodings on chromium immediately after replace track. Avoid configuring the encodings on chromium immediately after replace track since the encoding params are read-only until the renegotation is done.
* fix: send json message (#1180)
be3e2a69f2...3fb44f7695
* fix(SDP): Add missing msid for p2p sources.
* fix(TPC): Don't convert plan-b<->unified-plan SDPs for p2p.
* squash: Implement review comments.
* fix(JingleSessionPC): Do not try to re-use inactive mid for new remote ssrcs. The direction was marked as 'inactive' only on Firefox as Safari had audio issues when an inactive mid is re-used. Chrome (in unified-plan) needs the direction of the mid in remote desc to be set to 'inactive' for a 'removetrack' to be fired on the associated media stream whenever a remote source is removed.
* fix(SDP): Drop SSRCs whenever the transceiver direction is 'inactive' or 'recvonly'. This is needed only for JVB connections. Add unit tests for LocalSdpMunger.
* fix: Ignore startAudioMuted/startVideoMuted for p2p. The tracks will not be added when the call switches from jvb to p2p for an endpoint that joins muted by focus.
* fix(RTC): Do not suppress the source updates on Firefox. If the msid attribute is missing, then remove the ssrc from the transformed description so that a source-remove is signaled to Jicofo. This happens when the direction of the transceiver (or m-line) is set to 'inactive' or 'recvonly' on Firefox. Not signaling these source updates creates issues with remote track handling on the other endpoints in the call.
* fix(RTC): Set transceiver direction after RTCRtpSender#replaceTrack. This fixes the issue where TRACK_REMOVED event is not fired when a remote track is removed from the peerconnection. Fixes https://github.com/jitsi/lib-jitsi-meet/issues/1612 and https://github.com/jitsi/jitsi-meet/issues/8482.
60c5667957...be3e2a69f2
* fix(caps): Disable TCC on Firefox. There is a known issue with Firefox where the BWE gets halved on every renegotiation causing the low upload bitrates from the Firefox clients.
* fix: Drops unused config, fixesjitsi/lib-jitsi-meet#1620.
* fix(e2ee): destroys olm session on disabling e2ee
f95a455c08...60c5667957
* fix(TPC): Return default codec if the local sdp is not available. Get the correct media type when generating the source identifier.
88560a8a5e...9eb4af1e80
* feat(prosody-modules): Moves a function for getting room to util.
* feat: Audio/Video moderation.
* squash: Fix docs.
* squash: Changes a field name in the message for adding jid to whitelist.
* squash: Moves to boolean from boolean string.
* squash: Only moderators get whitelist on join.
* squash: Check whether in room and moderator.
* squash: Send to participants only message about approval.
Skips sending the whole list.
* feat: Separates enable/disable by media type.
Adds actor to the messages to inform who enabled it.
* squash: Fixes reporting disable of the feature.
* squash: Fixes init of av_moderation_actors.
* squash: Fixes av_moderation_actor jid to be room jid.
* squash: Fixes comments.
* squash: Fixes warning about shadowing definition.
* squash: Updates ljm.
* fix: Fixes auto-granting from jicofo.
* squash: Further simplify...
* fix(JingleSession): Move the ssrc identifier generation to LocalSdpMunger.
* fix(logger): Logging enhancements. Get rid of noisy logs related to SDP transformations which are redundant. Fix formatting and add missing information.
7cbd9c8f2a...923aa449c4
* fix(quality-control): Propagate the height constraints to p2p session. If the application is using the new receiver constraints, propagate the height constraint to the p2p session as well.
* build(deps): bump lodash from 4.17.19 to 4.17.21
* chore(deps): bump hosted-git-info from 2.8.8 to 2.8.9
74a90f7035...7cbd9c8f2a
* fix(quality-control): fix constraints sent on channel initialization. Do not send old format constraints if no constraints are set before the channel is initialized.
* chore(deps) run npm audit fix
* chore(deps) update webrtc-adater@8.0.0
86c7a35817...74a90f7035
* Add dependency for promise.allSettled. Older chrome versions like M72 do not support Promise.allSettled.
* fix(conference): Enable p2p for unified plan clients.
* fix(TPC): Use addTrack instead of addStream in Unified-plan impl.
* Add missing spaces in debug logs.
ad5692d6aa...e362c89eb6
* fix(SDP): Move all SDP related files to a different dir. SDP utility classes are spread across RTC and XMPP directories now, moving these class files to a 'sdp' directory.
* fix(stats): Return promise for getStats. Switch to returning a Promise for getStats. Reset frame rate stat to 0 when video is suspended as a result of endpoint falling out of last-n.
* Fix: sysMessageHandler not deleted (#1590)
* task(e2ee): switch back to GCM
463e213b3f...7667117117
* fix(quality-control): Send the new constraint on join. Fixes the case where the old format height constraint is sent on join for a jvb media session.
7dedb59b9c...463e213b3f
* fix(quality-control): Switch to new receiver constraints by default. Use the new receiver constraints unless it is explicitly disabled through config.js.
3c9913ed61...7dedb59b9c
* fix(JingleSession): Increase the ICE candidate gathering timeout to 150ms. This will reduce the numbers of transport-info IQs sent by the client.
* fix(TPC): Fix error handling for getStats.
ca325f5ef9...0dc1540a44
* fix(stats): Use promise-based getStats on all browsers. Get rid of the browser specific keys and use the standard spec-compliant fields for stats. Get the resolution/fps for remote streams from 'inbound-rtp' stats. Use the 'track' stats for the local resolution/fps since these take the active simulcast streams into account.
8b3dc59374...ca325f5ef9
* fix(SS): Implement a 2500Kbps limit for VP9 SS.
* fix(RTC): Remove stream effect before disposing the track. Remove the effect instead of stopping it so that the original stream is restored on both the local track and on the peerconnection. Fixes issues when a stream with effect applied is replaced on the pc after it is muted, also fixes https://github.com/jitsi/lib-jitsi-meet/issues/1537.
* fix: Drops unused config.
1f3f85978d...baa78aca40
* Get rid of stats debug message, fix typo with codec type.
* fix(receiveVideoController): Do a deep copy of constraints for comparsion.
* fix(codec-selection): Fix codec selection for unified plan browsers.
93af5ada95...2e598a4bda
* fix(receiveVideoController): Do not send redundant video constraints to the bridge.
* feat(stats): Add a new bridge message "EndpointStats" for stats. Use the new Colibri message "EndpointStats" for broadcasting the local stats. The bridge then will be able to filter the endpoint stats and send them only to the interested parties instead of broadcasting it to all the endpoints in the call.
* Test RTCRtpReceiver.getCapabilities before using
2b94da12e8...93af5ada95
Promise.allSettled is supported from RN 0.63 onwards and is not supported on the current version, use a polyfill for that shims Promise.allSettled if its unavailable or noncompliant.
Co-authored-by: Saúl Ibarra Corretgé <saghul@jitsi.org>
* fix(TPC): get ssrc info per ssrc and not per mline.
* feat: Consider absence of A/V muted from presence as muted.
* Feature: Moderator can revoke moderator role to others and himself (#1532)
4191198233...0e180efdfa
* fix(JingleSession): Avoid renegotiation when user with no sources leaves the call.
* feat: participant kick reason add
* ref(RTC): remove legacy pc constraints. Stop using the legacy pc constraints that are no longer wired up to WebRTC.
* fix(deps) update webrtc-adapter to v7.7.1
087a8e19eb...4191198233
* squash: Use different function syntax.
* squash: Fix lint errors.
* Process stats immediately before setting the interval.
* feat(ReceiveVideoController): Add the ability to send constraints in the new format. Add the ability to send the bridge messages for the receiver video constraints in the new format directly.
676c7a9105...5796d83bb1
* feat(browser-support): Add support for WKWebview based browsers. Apple added getUserMedia support for WkWebview based browsers like chrome and Firefox on iOS 14.3. These browsers behave as Safari does on iOS. Therefore, extend the Safari checks to these webkit based browsers as well.
08ce96d881...e60f09b189
* squash: Always get lastN value from JitsiConference instance.
* fix(lastN): Return the correct lastN value for the conference.
* Use unified plan for mobile browsers on iOS
d31b5a2d5e...08ce96d881
* fix(conference): Do not signal muted tracks on join. Do not add the muted audio/video tracks to the peerconnection on join. The tracks will be added when the user unmutes for the first time. This reduces the number of remote sources that will be added when a participant joins a large call where everyone joins muted (startAudioMuted/startVideoMuted setting).
e83fb93d2d...d31b5a2d5e
* fix(RTC) fix device selection not being available
* fix(TPCUtils): undefined is not an object (evaluating 'this.tpcUtils.replaceTrack(e,t).then')
4c668023b3...e6ef4e7ae9
* fix(TPC): Remove the existing track instead of overwriting. When a second remote track of the same mediatype is received for an endpoint, remove the existing track before creating the new remote track.
9beb47fe5f...4c668023b3
* fix(e2ee) fix disabling E2EE
* fix(e2ee) fix key index after ratchetting
* fix: Drop caps handling (#1495)
* fix(SendVideoController): Apply the sender constraint only when it changes. There were cases where the bridge was sending the same constraint multiple times causing redundant calls to getParameters/setParameters on the RTCRtpSender.
* feat: Use the new bridge signaling format.
* fix(gum) update permissions prompt detection
c534f74884...6a7b16c33e
* fix(SendVideoController): Apply the sender constraint only when it changes. There were cases where the bridge was sending the same constraint multiple times causing redundant calls to getParameters/setParameters on the RTCRtpSender.
* fix(gum) update permissions prompt detection
beaff3dd02...7f919faacc
* ref(QualityController): Split send and receive video constraints handling.
* fix: Save guards _features to be always empty and nver undefined. (#1493)
d1f0ab4d5a...c534f74884
* fix(GUM-permissions): cache permissions on init.
* feat: Reuse billingId from localstorage as jitsiMeetId.
* fix(example) simplify
* feat(docs) mvoe API documentatrion to the handbook
84357ce1a8...d1f0ab4d5a
Add the ability to configure different max bitrates for VP8 and VP9.
Set max bitrate for presenter to 2500 Kbps irrespective of the configured max bitrates for video.
479dd98...77978f0.
RN doesn't support RTCRtpSender yet. Therefore, media is suspended on RN by changing the media direction in the SDP whenever the client receives an ideal height of 0 for sender constraints on the bridge channel.
LJM update - 3570339360...be18ff34be.
When an endpoint that doesn't support the preferred codec (VP9) joins a conference, all the other endpoints fallback to VP8 until the endpoint leaves the call.
Safari 14.1 has a bug where it returns 720p for every simulcast stream when RTCRtpSender.getParameters is called even though the stream resolutions are different.
By using the encodings config used when source was added, on every RTCRtpSender.setParameters call, we ensure that simulcast stream resolutions don't change.
chore(deps) lib-jitsi-meet@latest
Do not resize the desktop share to 720p by default when the desktop track resolution is higher than 720p. This is causing bluriness when presenter is turned on.
Remove the 'detail' contentHint setting for the desktop+presenter canvas stream as it forcing chrome to send only 5 fps stream for high resolution desktop tracks.
Move the desktop resizing logic behind a config.js option - videoQuality.resizeDesktopForPresenter.
Adapt to E2EE changes in lib-jitsi-meet. Notably:
---
e2ee: introduce per-participant randomly generated keys
This the second stage in our E2EE journey.
Instead of using a single pre-shared passphrase for deriving the key used for
E2EE, we now establish a secure E2EE communication channel amongst peers.
This channel is implemented using libolm, using XMPP groupchat or JVB channels
as the transport.
Once the secure E2EE channel has been established each participant will generate
a random 32 byte key and exchange it over this channel.
Keys are rotated (well, just re-created at the moment) when a participant joins
or leaves.
---
* ref: Moves xmpp logs to be accessed from connection.
In cases where there is no room like pre-join and lobby screen we still want to be able to debug xmpp messages.
* squash: Updates lib-jitsi-meet.
* ref: Rename jitsi_bosh_query_room to jitsi_web_query_room.
This is no longer bosh only and is available for both bosh and websocket sessions.
* feat: Adds feature to disco-info indicating that display name is required.
* feat: Adds option to disable checking whether display name is required.
* ref: Clears auth_token when verification fails.
* squash: Fixing comments.
* squash: Updates to latest lib-jitsi-meet.
* Adding whitelist and move away from using custom field for password.
We re-use room lock for lobby password.
* Make sure we do not run muc-occupant-pre-join for non members only rooms.
* Destroying lobby room, when main room is destroyed or membersonly is disabled.
* Adds destroy reason.
* Clears lobby room instance on destroy.
Fixes problem with on/off/on of lobby feature.
* Add lobby room jid only when members only is on.
* Sends main room jid on lobby destroy.
We can use that in client loggic to auto-join lobby participants to main room as lobby is disabled while waiting.
* fix: Fixes using is_healthcheck_room.
* squash: Enables lobby rooms feature by default.
* chore(deps): Update lib-jitsi-meet, to enable lobby rooms.
fix(Firefox): Enable RTX support on Firefox
E2EE fixes/improvements
fix(screenshare): Add google conference flag only when simulcast is on
fix(video-quality): Apply pending video constraints on p2p originator
* ref: disable ICE restart by default
The reason for that it's currently causing issues with signaling when
Octo is enabled. Also when we do an "ICE restart"(which is not a real
ICE restart), the client maintains the TCC sequence number counter, but
the bridge resets it. The bridge sends media packets with TCC sequence
numbers starting from 0.
The 'enableIceRestart' config option can be used to force it, but it's
not recommended.
To get a workaround in for wired desktop
screensharing in spot in electron 8. With
the change, no "exact" is used in gum
constraints while attempting to get the
wired screensharing device, as that
triggers overconstrainederror.
* Adds an option to set email through iframe API init and to stats.
* Simplifies configuring email and displayName in stats.
Removes enableStatsID as not needed as when off we are sending as callstats id xmpp resource which is unique per call and id must be something that sticks between calls (callstatsUsername).
* Adds email and displayName in stats config for mobile.
* chore(deps): Updates lib-jitsi-meet to latest dd31f0a.
* Removes enableStatsID from config and whitelist.
It crashes on Android. Well, on the JSC version React Native uses on Android.
While we could use this fallback only on Android, we have decided to use it
on all mobile platforms for consistency.
Build as follows to build (production) bundle size stats:
npx webpack -p --progress --analyze-bundle
Then open the report:
npx webpack-bundle-analyzer build/stats.json build/
These provide the ability to integrate the SDK with some other application
loggers.
At the time this was written we use Timber on Android and CocoaLumberjack on iOS.
In addition to the integration capabilities, a LogBridge React Native module
provides log transports for JavaScript code, thus centralizing all logs on the
native loggers.
Will emit new 'network.info' action with the online/offline status and
extra details for native like the network type and
'isConnectionExpensive' flag.
* ref(feedback): emit api feedback submitted on completion
Compared to firing the event on submission because
the submission ajax will not be completed at that
time..
* squash: update package.json
* Removes unused translations.
* Fixes using translated strings.
* Moves using latest i18next versions and stop using compatibility modes.
* Sorts i18next options.
* Fixes defaultNS used by i18next.
This is used when translating html tags with data-i18n keys as attributes, used by jQuery-Impromptu.
* ref(user-interaction): remove storing of listener
* ref(user-interaction): move browser requirement check to lib-jitsi-meet
* ref(user-interaction): no inner function for listener, use module scope