...to advertise track's muted state and the video type.
For now, if the source name signaling flag is enabled, both legacy and
new <SourceInfo> element will be used at the same time. This is to be
able to interoperate with legacy clients and start testing the new
format at the same time. Whenever possible <SourceInfo> will be used
as main source of truth with the fallback to legacy <audiomuted/>,
<videomuted/> and <videotype/> elements.
ref(JingleSessionPC) Do not renegotiate on every local source change.
Instead rely on the 'negotiationneeded' event fired by the browser for JVB connection. This makes local source changes faster even if the modification queue is backed up.
* ref(TPC) Configure encodings in one go.
Configure the active state, maxBitrate and degradation preference in one go instead of configuring them separately.
* squash: Address review comments.
* squash: fix a comment.
fix(Jingle) Reverse the order of ssrcs signaled for Firefox.
This fixes an issue where the bridge doesn't forward the HD stream from Firefox to other users in the call. The order of the ssrcs produced by the browser is from Highest resolution to lowest whereas the bridge assumes it to be from lowest to highest as is the case in Chrome and Safari.
fix(tpc) fix extracting ssrc map when using single stream
In unified plan we'll take the ssrcs off the first audio / video stream, but we
were assuming both would be present.
This commit fixes that, since the Spot wireless screen sharing feature uses a
dedicated TPC just with a video stream.
feat(BridgeChannel): Signal a new videoType for high fps screenshare.
This lets the bridge adjust the bitrate allocation for this source so that layers with higher fps are prioritized over layers with higher resolution.
As a result, endpoints with restricted downlink will receive a high fps low resolution share as opposed to a high resolution low fps screenshare.
fix: Missed SSRCs in Unified Plan with several "ssrc-group:FID" groups. (#1658)
* fix: Missed SSRCs in Unified Plan with several "ssrc-group:FID" groups.
`TpcUtils.ensureCorrectOrderOfSsrcs()` takes into account only the first `ssrs-group`, and it causes missed `ssrs` attributes. It results in an error during `peerconnection.setRemoteDescription()`.
For fixing `ensureCorrectOrderOfSsrcs()`, all `ssrs-group` are traversed and all distinct `ssrs` are preserved with keeping their order.
* test: Added extra tests for `TpcUtils.ensureCorrectOrderOfSsrcs()`
fix(JingleSessionPC): Disable unified-plan for p2p chrome.
Do not enable unified plan for p2p chrome by default until StartMutedTest is fixed.
Fix media direction for case when there are no local and remote sources, should be set to 'inactive' in that case.
fix(codec-selection): Fix VP9 codec switching issue in Chrome unified-plan.
Munge only the m-line that corresponds to the source that the browser will be sending.
Do not select VP9 on Firefox.
Detect support for RTCRtpTransceiver#setCodecPreferences correctly.
fix(RTC): In unified-plan mode, disable the low resolution streams for low fps SS.
In unified plan impl, it is not possible to enable/disable simulcast during the call since the same sender is re-used for all local video tracks. Therefore, disable the low resolution simulcast streams for low fps screensharing so that the bridge forwards only the highest resolution stream which is important for low fps screensharing.
fix(TPC): Do not remove ssrcs from remote desc for p2p.
In unified plan, re-use of m-line (i.e., adding an SSRC, removing it and then adding it back) causes the browser to not render the media on Chrome and Safari. The WebRTC spec is not clear as to how browsers have to behave, this doesn't cause any issues on Firefox. As a workaround, only change the media direction and leave the ssrc in the remote desc. This automatically triggers a 'removetrack' event on the associated MediaStream and the track can be removed from the UI.
feat(RTC): Add the ability to change desktop share fps.
Provide a method for changing the capture fps for desktop tracks during the call. These changes to the lib are needed for making it configurable from the UI.
fix(RTC): Adjust the media direction for p2p conn.
For p2p connections, the media direction needs to be adjusted after every source-add/source-remove is processed based on the availability of local sources.
fix(CodecSelection): Call RTCRtpTransceiver#setCodecPreferences before renegotiation.
Call RTCRtpTransceiver#setCodecPreferences with the preferrred codec order before every createOffer/createAnswer. This ensures that the codec preference is enforced even when there is no local description available yet while the preferred codec is being set immediately after media session creation.
fix(TPC): Do not configure encodings on Safari until reneg.
Avoid configuring the encodings on Chromium/Safari until simulcast is configured for the newly added track using SDP munging which happens during the renegotiation.
fix(JingleSession): Move the ssrc identifier generation to LocalSdpMunger.
When a msid attribute is missing in the 'a=ssrc' line, use the local endpoint id as an indentifier. Move this generation logic to LocalSdpMunger. Also suppress notifying Jicfo of a ssrc change on Firefox when the change is a result of the media being suspended on the jvb connection.
fix(TPC): Use addTrack instead of addStream in Unified-plan impl.
Do not try to configure encodings on the sender until they are available. This fixes an issue on Chrome (running in unified-plan mode) where unmuting the local source throws a 'Read-only field modified in setParameters()' error.