Unify events and output single TypeScript declaration (#2407)
* fix(events): unify events to a single EventManager type, add support for single typescript declaration
* fix(lint): fix lint
* fix(events): fix incorrect instatiation
* fix(events): clean up redundant methods
* fix(events): keep EventEmitter name, alias NodeEventEmitter
* fix(events): fix loose reference
* fix(EventEmitter): remove on/off alias as redundant
* fix(RTCUtils): bring event handlers under class to use same event emitter
* fix(RTCUtils): fix lint
All modern browsers implement window.addEventListener for the 'error'
and 'unhandledrejection' listeners. Thus there is zero benefit from
using the legacy `onerror` handler here and rolling multiple handlers
ourselves.
There is an old config option `enableWindowOnErrorHandler` which was
never whitelisted in Jitsi Meet, so I'm 100% sure nobody is using it.
Even if someone was, migrarting to the above is simply better in every
possible way.
fix(video-quality) Enable TCC support for Firefox 115 and later.
Firefox ESR 115 stops sending REMBs to the bridge under certain network conditions making the bridge suspend all video streams sent to the Firefox eps. It is still unclear why Firefox stops sending REMBs so enabling TCC support as workaround since TCC doesn't seem to have issues with uplink BWE in the older versions.
When a self presence is received ( from mute or something else) during
leave operation, after presence unavailable is sent and before the final
presence unavaliable is received, we were interpreting it as muc joined
since the joined flag was immediately set to false.
fix(codec-selection): Select VP8 as default codec.
When RTCRtpReceiver.getCapabilities() is not supported by browser or if it returns an empty list. Fixes an issue where call doesn't get established in Firefox ESR 102.
Fixes https://github.com/jitsi/jitsi-meet/issues/13839.
fix(TPCUtils) Insert simulcast recv line for all senders on FF.
The simulcast receive lines needs to be inserted in the receive desc for all the m-line associated with local tracks, currently its being done only for the first video source.
Add SVC and Simulcast support for AV1 and VP9. (#2350)
Add SVC and Simulcast support for AV1 and VP9.
The default mode is the full SVC mode for VP9. It works as expected with the current version of JVB.
AV1 in the client is only supported when the bridge negotiates the Dependency Descriptor extension headers which are needed for reading the layer information for AV1 and H.264 video frames.
* feat: Enable H.264 simulcast support.
Multi-encoding simulcast for H.264 is supported now because of the DD header ext support added on the bridge side.
* fix(video-quality): Add default bitrates for all codecs.
Expect the videoQuality settings in the new format, deprecated configs are still supported.
videoQuality: {
AV1: {
maxBitratesVideo: {
low: 100000,
standard: 300000,
high: 1000000,
ssHigh: 1500000
},
useScalabilityModeAPI: {
enabled: true,
useSimulcast: true, //(defaults to SVC),
useKSVC: true //(defaults to L3T3_KEY)
},
},
H264: {
maxBitratesVideo: {
low: 200000,
standard: 500000,
high: 1500000,
ssHigh: 2500000
}
},
VP8: {
maxBitratesVideo: {
low: 200000,
standard: 500000,
high: 1500000,
ssHigh: 2500000
}
},
VP9: {
maxBitratesVideo: {
low: 100000,
standard: 300000,
high: 1200000,
ssHigh: 2500000
},
useScalabilityModeAPI: {
enabled: true,
useSimulcast: true, //(defaults to SVC),
useKSVC: true //(defaults to L3T3_KEY)
},
}
}
* Disable encodings when requested height for screenshare is 0.
* feat: add unit tests for scalability modes.
* ref: Move all encoding configuration calculation to TPCUtils.
* Add more unit tests for VP9 K-SVC mode.
* Make codec name in settings case insensitive.
Also read the deprecated max bitrates correctly, add unit tests to test it.
* ref(TPC): isSimulcastOn -> isSpatialScalabilityOn.
It makes more sense to call it spatial scalability than simulcast now that full SVC support is available.
* fix: Negotiate AV1 DD header exts only for AV1 and H.264.
* fix: Rename setting useL3T3Mode->useKSVC and adjust the defaults.
feat(ScreenObtainer): add more control over screen obtainer (#2371)
* feat(ScreenObtainer): add more control over screen obtainer
* fix(ScreenObtainer): fix constraints to select a preferential display surface
* fix(ScreenObtainer): remove Safari version check for displaySurface
* fix(ScreenObtainer): move all settings under screenShareSettings
feat(RTCStats): Suppress unnecessary error message when rtcstatsEnabled === false (#2374)
* feat(RTCStats) Allow initializing without enabling
* feat(RTCStats) Simpler use of config properties
* feat(RTCStats) rollback property access level
* feat(RTCStats)revert to private and assert type
fix(JingleSession) Use the video type from presence.
Instead of using the videoType from source map signaled by the bridge which can be incorrect if the bridge doesn't receive the presence before it sends out the source map. It uses the default 'camera' as video type if presence is not received from the senders. Possibly fixes a bug where a screenshare source is displayed in the wrong tile after the SSRC is re-mapped.
Additional benefits are:
- ssrc -> source name will be updated on ssrc remap message from
the bridge.
- the map will be correctly cleaned when member leave (this logic was
not working well for _sourceName map)
- Looks cleaner and simpler.