Reports ssrc to callstats when screen sharing is started. (#657)
Adds rtc.LOCAL_TRACK_SSRC_UPDATED event to be emitted when ssrc is updated for a local track.
Fixes adding rtc listeners for CREATE_ANSWER_FAILED, CREATE_OFFER_FAILED, SET_LOCAL_DESCRIPTION_FAILED, SET_REMOTE_DESCRIPTION_FAILED.
* ref: Simplifies the logic for handling an incoming jingle session-initiate.
* fix: Don't redundantly log cross region
information under a field name called "label".
* cleanup: Simplifies code. Adds the userAgent as a permanent property
for statistics (so that the client doesn't have to).
* ref: Names the parameter which specifies the name of the event "eventName".
* ref: Extracts event names to AnalyticsEvents.
* ref: Exports and imports constants individually.
* fix: Fixes CONNECTION_TIMES event names.
* ref: Arranges constants alphabetically.
* ref: Adds line breaks.
This is a two part fix:
- In the new gum flow, this.getUserMedia supports promises
and rejections were not getting caught. So change
_newGetUserMediaWithConstraints to be promise based instead
of callback.
- The error name returned from blocked device permissions is
NotAllowedError, as adapter shims PermissionDeniedError
to be NotAllowedError.
fix(audio-output): update sinkIds on load and device list change (#642)
When a mac's default audio output is changed, audio elements
are not being updated with the new default. A default audio
output change in the OS fires a DEVICE_LIST_CHANGED event,
so use that to always update the sinkId.
Also, use wrapAttachMediaStream for newGumFlow to be ensure
the proper sinkId is set on audio elements being coupled
a remote track.
fix(ie11): do not type check for RTCSessionDescription
Error handling was added to ensure some munging helpers
were receiving RTCSessionDescriptions. Temasys is doing
something else and is passing its own object into
the mungers. So, let temasys do that.
fix(adapter): inject h264 into safari's remote description
Safari will fail to set its remote description if no
supported video codecs are found. This can happen with
config.p2p.disableH264 set to true, as browsers will strip
H264 from their offers. To get around this problem in a way
that can be removed once this is fixed on Safari's side,
add a function to inject H265 before setting the remote
description.
* revert: Reverts be665cbff7.
* ref: Renames "peerjid".
* ref: Refactors the initialization of a peer connection.
* feat: Re-implements the A/B test for the "suspend video" feature.
* squash: Deep copy.
* ref: Renames forceSuspendVideo to abtestSuspendVideo.
Modify error handling for missing video m-lines and local description (#632)
* ref(sdp): lower logs about missing local video to warning
* ref(sdp): earlier error handling for missing description and mlines
* ref(sdp): rename maybeMungeLocalSdp to be more specific
fix(peerconnection): create a new description to modify sdp (#631)
Firefox has deprecated modifying a description's sdp through
re-assignment. Safari (without temasys) does not allow it.
As such, wherever the sdp has to be modified instead create
a new description with the modified sdp.
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.
To install the chrome webstore extension, the user must already have installed "Download Chrome Extension". On missing extension we open a popup window which allows the user to add the extension and then install it.
The default was still 360p if the option was missing from config.js. In
addition, move the logic outside of a browser check, so all browsers get
glorious HD by default.
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.
detectChrome() detects the browser but then may throw an exception while
parsing its version. The exception could be reproduced by toggling the
device toolbar and instructing Chrome to identify as iPhone 6 Plus.
adapter.screenshare.js uses the variable requestUserMedia without
defining it. And that's a problem because it's packed in strict mode so
it will cause an error to be thrown at runtime which will fail
lib-jitsi-meet and, consequently, the whole app. As the variable
requestUserMedia appears to be global in certain browser, prevent the
use of the undefined variable without really changing the outcome of its
use.
feat(tpc): enforce preferh264 when setting the local description
For p2p, we have to take preferh264 into account when setting the local description, since
that prefer is what will be received by the far side. if we only do it on the remote description,
like before this change, we'll never actually end up preferring h264.
ref(JitsiLocalTrack): get rid of 'setMutedInProgress'
The 'setMutedInProgress' flag is unreliable and it can lead to weird
situations when mute operation is in progress, but the removal from
JingleSessionPC is waiting on the queue. In such case LocalSdpMunger
will fake SDP even if the track is in the PeerConnection which may
confuse some parts of the SDP transformation chain.
For example RtxModifier will not attempt to inject Rtx group description
if it sees that the SSRC are already there. But it can happen that even
though the SSRCs are there they do not contain valid track ID, because
the track has changed.
The LocalSdpMunger is supposed to fake the SDP only when the video
MediaStream is not in the PeerConnection. So this commit implements just
that: a way to tell if JitsiLocalTrack's stream is currently in
the PeerConnection (added through TraceablePeerConnection).
Random coding style-related issues that bothered me while reading the
source code touched by "Fix local video disappearing from local
thumbnail" (https://github.com/jitsi/lib-jitsi-meet/pull/571). These
include naming, formatting, comments, typos, duplication.
Commit "fix(JitsiLocalTrack): restore 'inMuteOrUnmuteProgress'" removed
all read occurrences of dontFireRemoveEvent so the one and only write
left is now obsolete.
fix(local tracks): do not fire "track stopped" during mute
Flag 'dontFireRemoveEvent' was unreliable, because if
the JitsiLocalTrack is muted/unmuted rapidly it's state can be false
at the time when ended event is triggered. The event handlers must be
unregistered to handle this gracefully.
As new use case for joining a conference without calling GUM has been
added to jitsi-meet enumerate devices should not be delayed. In fact not
only it was delayed, but never called in such case
(getUserMediaStatus.initialized stays false forever).
make audio processing constraints configurable (#491)
* make audio processing constraints configurable
AP: echoCancellation is a "master switch" for disabling all audio processing. set to disableAP=true and stereo=true allows fullband, stereo sound.
AGC: misbehaves with certain 'pre-gained' mics.
HPF: can't hear any effect but it's the last constraint to make configurable.
* Update RTCUtils.js
firefox 54 crashes if we insert the rid simulcast receive lines in the remote description, so only do that if simulcast is turned on (which is still experimental for firefox and not enabled by default)