feat(multi-stream-support) Add track streaming status (#1855)
* feat(multi-stream-support) Add TrackStreamingStatus class
update JitsiRemoteTrack to init and dispose TrackStreamingStatus
stop emitting LASTN_ENDPOINT_CHANGED event when source name signaling is enabled
convert TrackStreamingStatus class to typescript
* rename methods and use TrackStreamingStatus enum
* update jdocs for JitsiConferenceEvents.FORWARDED_SOURCES_CHANGED
feat: add facial-expressions in speaker stats (#1724)
* feat: facial expression in speaker stats
* feat: send xmpp message with facial expression to server
* fix: rebase conflicts
* feat: facial expression in speaker stats
* feat: facial expression in speaker stats
* fchore(facial-expressions): remove the send facial expression call from update facial expression function
* feat(facial-expressions): store expresions as a timeline
* refactor(facial-expressions): store expressions by counting them in a map
* feat(facial-expressions): camera time tracker
* add(facial-expression): increase facial expression with duration parameter from payload
* add(facial-expressions): the disgusted expression
* refactor(facial-expressions): remove camera time tracker
* refactor(facial-expressions): change data channel message handel position for facial expressions and renamed some types
* fix(facial-expressions): move facial expression endpoint message handler from statistics.js to ConnectionQuality.js
* fix(facial-expressions): remove unused type
fix(connectionstatus) Increase the rtc mute timeout for p2p.
Increase the RTC mute timeout from 500ms to 2500ms for p2p connections. This fixes an issue with Chrome tab sharing where the application keeps switching between the avatar and the share contnuously because of a chrome bug https://bugs.chromium.org/p/chromium/issues/detail?id=1258034
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.
fix(connection-quality): Calculate target bps based on videoQuality settings.
Calculate the target bps based on the video quality settings and the codec configured on the peerconnection.
Hardcode target video bitrates for RN since it doesn't support setting max bitrates.
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.
fix(ice-restart): Force client reloads when call is migrated.
Force the client to reload when the bridge that is handling the media goes down.
This mitigates issues seen on the bridge because of a client re-joining the call with the same endpointId, BWE issues, etc.
This behavior is configurable through 'enableForcedReload' setting in config.js.
There's a plan for using ping to detect XMPP WebSocket
disconnected instead of waiting for timeouts on the network layer.
This also simplifies ICE failed handling logic.
Takes disabled encodings into account when calculating the local resolution. (#1242)
* fix: Takes disabled encodings into account when calculating local resolution.
* feat: Adds a new event that's triggered when the max enabled resolution changes.
* feat: Broadcasts the max enabled resolution value along with other stats.
Adds extra 15 seconds before emitting ICE failed event. If the OS is capable of
reporting internet offline status then will start counting when the internet
comes back online.
The reason for that is when ICE restarts are disabled a user will get the page reload
screen immediately, but there's a chance to recover as long as the channels have not
expired on the bridge.
Switches from using JitsiConference.isJvbConnectionInterrupted
flag to peerconnection's ICE state. The interrupted
flag is not set if the connection fails initially.
Refactors the "connection status duration" analytics event. (#957)
This commit refactors 592f72a63c. It adds
the video type in the event and it also does a better job at managing
and properly cleaning up the state map.
feat(JitsiConference): delay the ICE failed notification
Because it's possible to go back from ICE FAILED state to CONNECTED it's
better to give it some time until the XMPP connection recovers and only
if they ICE does not recover in time send the ICE failed notification
to Jicofo. It's done by sending a ping to the XMPP server and checking
the ICE after 2 seconds past the ping successful response.
Exports additional statistics through ConnectionQuality (#813)
* feat: Read the server region from Jingle and broadcast it with statistics.
* feat: Adds the bridge count to local "statistics", refactors conference-properties.
* fix: Emits the conference properties with the event, small fixes.
* ref: Orders the imports alphabetically.
As described by @virtuacoplenny:
[T]he ordering is based on import path, not import name, with different
file depths being grouped together, node modules being grouped together
at the top.
* fix: Keeps JitsiConference#properties always defined.
* fix: Does not fire an event when the argument is undefined.
Revert "add debug logging for connection quality calculation" (#714)
This reverts commit 1c2c63e656.
The logging was initially added to help debug an issue with
connection quality showing lower than expected. The usefulness
of the logging has diminished and is noisy for browsers that
do not automatically filter console.debug, like Edge.
fix(connection-quality): set min percentage when exceeding a bitrate threshold (#708)
* fix(connection-quality): set min percentage when exceeding a bitrate threshold
In some cases a high bitrate does not equate to a high quality
percentage, because the target itself might be quite high, such
as the case for 1080. In those cases, give credit for the bitrate
being high.
* squash: impl 2, use a max bitrate
feat(1080p): support on chrome >= 61 using adapter (#617)
- Add a new browser check so adapter shim usage can be gated.
- Get track resolution for stats from the track itself to account
for browser resolution fallback logic. Do this only if
we can be sure adapter has shimmed it in.
- Create a new getUserMediaFlow, with RTC being the orchestration
for various RTCUtils calls.
- Remove connection quality stat "resolution" which was being
emitted but not used but listeners.
ESLint 4.8.0 discovers a lot of error related to formatting. While I
tried to fix as many of them as possible, a portion of them actually go
against our coding style. In such a case, I've disabled the indent rule
which effectively leaves it as it was before ESLint 4.8.0.
* doc(JitsiConference): deprecate 'isInLastN'
The 'isInLastN' method should not be used for the UI purposes, but
ParticipantConnectionStatus value should be used instead.
* fix(ParticipantConn..Status): speed up INACTIVE transition
Before this change when user's video stops playing, after user is
removed from last N we were waiting 2 seconds, before going to INACTIVE
state. This commit reduces the time to 500ms for such case.
* fix(ParticipantConn...): reduce logging
Reduce logging verbosity.
* fix(ParticipantConn...): handle LastN == 0
When LastN is set to 0 we should not rely on video playback and last N
set for figuring out participant connection status.
* fix(JitsiConference): undefined participants
Fixes a crash when this.participants field is accessed from _init.
* feat: multiple, simultaneous RTP stats
Makes it possible to have remote RTP stats running for more than one
peerconnection at a time.
* feat(stats): report RTT all the time
Will report JVB RTT (and end to end) while in P2P mode and vice versa.
* fix(JitsiConferenceEvents): remove CONNECTION_STATS
CONNECTION_STATS event is no longer emitted.
* fix(AvgRTPStatsReported): users with no video
Do not include FPS == 0 in average remote FPS calculation. Report NaN
for local FPS when video muted or no video device. NaN will be reported
for avg remote FPS if no video is received.
* fix(AvgRTPStatsReported): reset total packet loss
* feat(AvgRTPStatsReported): report 'screen' FPS
Will report average FPS for screen videos separately from camera videos,
but only if available (camera video reports NaN FPS when not available).
* fix(AvgRTPStatsReported): end2endRTT
Needs to report JSON with value.
* feat(AVG RTP stats): separate audio and video bitrate
Will report average audio and video bitrates separately.
* doc(JitsiConference): try to improve comment
* fix(AvgRTPStatsReporter): remove confusing reset
There's no a clear reason for doing reset there.
* ref(AvgRTPStatsReporter): rename var
Average end to end RTT calculated as a sum of local RTT towards the JVB
and an average of towards JVB RTTs reported by other participants.
Will be reported under 'stat.avg.end2endrtt' analytics event name.
Splits the participant connection status detection logic into two
separate flows one for P2P and one for JVB.
Fixes problem where user outside of last N would be reported as INACTIVE
when in P2P mode.
Added some improvements to the detection logic by adding more priority
for the video tracks frozen detection (if supported) over the last N.
When the browser supports this detection and it's playing video we
should not check the last N, because it's less reliable.