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.
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.
fix(E2EE): Apply E2EE on RTCRtpSender when track is replaced on pc
Make sure we inject the encoding function on RTCRtpsenders when tracks are replaced on the peerconnection.
Update the MediaStreamTrack on the JitsiLocalTrack when effects are applied or removed so that
we can find the RTCRtpSender using the MediaStreamTrack
feat(video-quality): control the sender resolution based on video quality settings (#1119)
* feat(video-quality): control the sender resolution based on video quality settings
* fix(video-quality): Apply the settings on newly created p2p/jvb jingle sessions
If a p2p/jvb session is not present when setSenderVideoConstraint is called,
make sure the settings are applied when they are created
fix(muting): do not re-assign value of local track containers (#781)
RTCUtils.attachMediaStream was changed not to return elements;
instead it returns undefined by default. When mapping over
containers and call RTCUtils.attachMediaStream, containers
would be changed to undefined.
* wip: initial version of the new AnalyticsAdapter.
* ref: Restructures the ICE duration and state change events.
* ref: Restructures the JitsiLocalTrack events.
* ref: Restructures the TTFM events.
* ref: Updates the user feedback event.
* ref: Restructures the _CONNECTION_TIMES_ and TTFM events.
* ref: Restructures the BRIDGE_DOWN and NO_DATA_FROM_SOURCE events.
* ref: Restructures the FOCUS_LEFT event.
* ref: Restructures the DATA_CHANNEL_OPEN event.
* ref: Removes the ICE_FAILED event (it is a duplicate of a state change event).
* ref: Restructures the device list events.
Uses one event per device, since the new format does not allow non-atomic attributes.
* fix: Does not obey "unmute" commands from the focus.
* ref: Restructures the "remotely muted" event.
* ref: Restructures the CONFERENCE_ERROR events.
* ref: Removes the CONNECTION_INTERRUPTED event
We can use ICE_STATE_CHANGED instead.
* ref: Renames isreconnect to isReconnect.
* ref: Removes the CONNECTION_RESTORED event. Use ICE state changes instead.
* ref: Restructures the p2p events.
* ref: Restructures the jingle events.
* ref: Restructures the RTP statistics event.
* ref: Restructures the CONNECTION_FAILED and DISCONNECTED events.
* ref: Restructures the getUserMedia analytics events.
* ref: Cleans up AnalyticsEvents and restructures some of the events.
* fix: Adds error logs to the analytics adapter.
* ref: Refactor Statistics.sendEventToAll
Renames to sendEventAndLog, supports the object-based API, uses the
function where appropriate.
* fix: Addresses PR feedback.
* fix: Addresses Lyubomir's feedback.
* ref: Remove unused functions, adds documentation.
* feat: Adds a Statistics.sendAnalytics shortcut.
* ref: Uses the conference name as the default containerId.
* fix: Adrdesses Lenny's feedback.
* fix: Addresses more feedback.
* fix: Uses 'operational' as the default event type.
* doc: Updates the documentation.
* fix: Fixes adding of permanent properties.
* ref: Uses consistent naming for events' attributes.
Uses "_" as a separator instead of camel case or ".".
* feat: Adds the conference name as a permanent property automatically.
* ref: Don't expose Setting.machineId.
* fix: Adds a "p2p" attribute to jingle events.
* ref: Uses "action" instead of "name".
* ref: Uses underscore in events' attribute names.
* ref: Logs a message to the logger/console
instead of callstats in sendAnalyticsAndLog().
* 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.
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.
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.
When muted track was added to conference "mute" operation was
executed again which was not executing anything because the state
of the track was already muted.
If the platform supports it, it calls MediaStreamTrack._switchCamera in order to
switch the camera facing mode at a low level. It's currently only implemented
for React Native.
feat: add methods to check muti-mic support and stats collecting
For audio previewing, some browsers cannot have multiple local
audio streams at once. For audio output previewing, local
stats need to be collected to detect changes in volume level.
Pull Request #435
* ref(p2p): use SDP 'inactive' for JVB
This commit gets rid of detach/attach logic and
replaces it with SDP media direction modification.
Now after switching to P2P instead of detaching local
tracks from the JVB peerconnection only the media direction
will be changed to 'inactive'. This will suspend media
transfer on the JVB connection.
It's meant to mitigate Chrome issue where it would randomly
choose to stop sending audio stream, after we modify it's
local SSRC.
* ref(SdpConsistency): cleanup 'recvonly'
Checking on 'recvonly' is no longer reliable way for detecting
whether video media is recvonly, because it can be set to
'inactive' at any point.
Added a check to make sure that the recvonly SSRC is not generated
more than once from '_createOfferOrAnswer'.
* log TPC instance
Logs the TraceablePeerConnection from LocalSdpMunger and
SdpConsistency as part of log messages. Given that there can be
2 TPCs at the same time it was hard to tell for which connection
a log message was printed.
* fix(SdpConsistency): depend on 'recvonly' direction
When createAnswer/createOffer returns SDP it will contain 'recvonly'
direction to reflect current media stream state even though we set
it to 'sendrecv' previously. Using 'hasAnyTracksOfType(VIDEO)' can
not be used to reliably detect 'recvonly' direction when doing video
mute, because muted video track is still in the TPC's map.
* doc(LocalSdpMunger): update description
LocalSdpMunger is currently used only for muted local video tracks.
* fix(P2P): enable P2P on Firefox
After 'detach/attach' is gone it seems that P2P works fine with Firefox.
* ref(TPC): simplify expression
* ref(SdpConsistency): do not pass whole TPC
There's no need to pass whole TPC instance if the only thing needed is
a logging prefix.