Make the client send ICE failed notification to let Jicofo know
that the ICE connection with the bridge has failed. It can then
re-create the channels and send new transport in the
'transport-replace' message to give it another try.
Also adds a bridge session ID so that Jicofo can discard outdated
requests. When a bridge dies multiple clients may send ICE failed
notifications at the same time. Jicofo will detect bridge failure
when processing the first one and it must not act on the following
requests for the broken bridge session which is no longer current.
A bridge session ID will be sent in new 'bridge-session' XML element
which is part of either 'session-initiate' or 'transport-replace'
message. The server's region is moved to this element as well as
it's part of a bridge session.
feat(screenshare): support remote wireless screenshare (#857)
* feat(screenshare): support remote wireless screenshare
- ProxyConnectionService is exposed and meant to be the
facade for creating and updating a peer connection with
another peer, outside of the muc.
- ProxyConnectionPC wraps JingleSessionPC so the peer
connection handling can be reused.
* attempt to make more configurable
ref(JingleSessionPC): tear down remote streams state
Reset the state of remote MediaStreams in order to fix sequence number
synchronization problem. When a conference is moved to another bridge or
if channels are re-allocated the bridge looses the most recent sequence
number seen by the client which makes Chrome drop all video packets
until the JVB catches up with the sequence numbers (if at all).
Changes the behavior to actively open new WebRTC Data Channel instead
of waiting for the JVB to do it.
Adds ICE_RESTART_SUCCESS event used to re-initialize the data channel in
case of ICE restart where the conference could have been moved to
another bridge.
Handles private messages received by speakerstats component.
Updates speakers stats with values received by the spealerstats component, all the logic is activate only in case we discover speakerstats component address from disco-info and the incoming message is coming from that component.
When the main domain advertises component with type 'speakerstats' every participant will send message to the component with the name of the room where this happen.
The code for handling device availability has been disabled for a long time,
plus it's ill named since it represents 2 abstractions: lack of permissions and
lack of devices.
Time for it to rest in the git graveyard.
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.
The case where we had created recvonly streams (start muted on FF) and we are unmuting, this creates a sendrecv stream and adds msid, we need to signal msid so listeners to be notified and create appropriate audio/video element and to start receiving the stream.
* Update reference to Prosody bugtracker.
* Updated refernce to Prosody module.
* Remove unused child element.
The child element in the query suggests that a specific host is being requested. Neither
the Prosody implementation nor the XEP-0215 specification defines this element. Its
inclusion is ignored by the XEP-0215 server implementation.
When receiving presence, the XML is converted to JSON. In
the process, Strophe.getText is used, which calls its
xmlescape utility function. This is not desired as the
raw value is desired, especially for display name.
Note: this issue only affects presence as it is the only
place that call the helper packet2JSON, which is the only
place that calls Strophe.getText.
ref(recording): change implementation to match VideoSIPGW (#769)
* ref(recording): change implementation to match VideoSIPGW
VideoSIPGW takes in a chat room and uses instance variables
on the chat room. RecordingManager has been changed to
mirror this approach because of the case where jitsi is
deployed on a domain requiring authentication. In that
case, the initial chat room is created and fails, a
new chat room (connection) is created for authentication,
authentication is put onto the failed chat room, and the
failed chat room is used. As such, recordingManager
should not be tied to chat room creation itself but
rather tied to the first chat room.
* squash: use git mv to detect capitalization change
fix(migration): reject the data channel to restart it (#760)
* fix(migration): reject the data channel to restart it
Starting on chrome 63, an error occurs when renegotiating
with the new bridge on bridge migration when the SDP sections
do not match, which occurs when removing the data channel
section. Not doing the double renegotiate prevents the data
channel from being reopened. The way around this, while still
avoing the error, is to reject the data channel section instead
of removing it to trigger a new data channel.
* squash: reword comments
* Support layer suspension
Add support for a message which notifies the endpoint whether or not it
is selected (meaning its HD stream is in use). If it is not
selected and enableLayerSuspension is set to true then it will impose a
bandwidth limit in the SDP to suspend sending the higher layers.
* only add the IS_SELECTED_CHANGED listener in JingleSessionPC if layer
suspension is enabled
this prevents doing a local o/a when we don't need it
fix(migration): do not do double offer-answer for Chrome 63 and up (#755)
When switching bridges, removing the "data" section from the SDP
and doing a double offer-answer results in an error starting on
Chrome 63. So on 63 and up, do a single off-answer without
removing the "data" section.
feat(recording): frontend logic can support live streaming and recording (#741)
* feat(recording): frontend logic can support live streaming and recording
Instead of either live streaming or recording, now both can live together.
The changes to facilitate such include the following:
- Remove the old recording.js module which allowed one recording at a time.
- Remove events for live stream url changes as the url is now part of a
sesssion and not fired independently.
- Availability of sipgw and recording are gone. Instead sessions have a
failure reason. For sipgw sessions, store that failure and emit it to
listeners.
- Create a new recordingManager singleton that can start/stop sessions
and handle updating known state of those sessions. Known state is
emitted through one event.
- Create a JibriSession model to encapsulate state of a session.
* update comments, use map to store sessions
* always pass in focusmucjid
* try to fix jibrisession docs and remove default null
feat: Exposes sending JSON payload through XMPP. (#723)
* feat: Exposes sending JSON payload through XMPP.
Incudes only the payload when firing events for JSON trannsported
through XMPP.
* squash: Addresses feedback.
* squash: Addresses more feedback.
feat(recording): show the YouTube live stream URL (#736)
* feat(recording): show the YouTube live stream URL
- Pass you_tube_broadcast_id to Jibri so it can create a
YouTube link for the live stream.
- Emit the liveStreamViewURL (the YouTube link) when it
is received from the participant doing the recording.
* set member.liveStreamViewURL only when truthy
* refactor packet2JSON to not use jquery
also added unit tests for it and switched to use chrome-headless instead
of phantomjs
* update package-lock
* squash: undo sha512 to sha1 conversion in package-lock