Tags: zoops/webrtc
Tags
Fix Simulcast + non-simulcast remote tracks Problem: -------- In the following negotiation sequence, the Simulcast track is lost. 1. Remote Offer with Simulcast tracks with rids 2. A new track added to Remote Offer with tracks using SSRCs When the updated `offer` is received, the Simulcast transceiver's receiver gets overwritten because the tracks from SDP is compared against current transceivers. The current transceiver for the Simulcast track already had SSRCs set as media has been received. But, tracks read from the SDP only has `rid`. So, no current transceiver matches and hence a new receiver is created which clobeers the good Simulcast receiver. Fix: ---- - Prioritize search by `rid`. - Also found a case of a loop where the index was missing entries in the loop. Fix it. Testing: -------- - The above case works
Use transceiver's codec in getCodecs Issue: ------ A transceiver's codecs can be modified using `SetCodecPreferences`. When retrieving codecs from the transceiver after changing codec preferences of the transceiver (for example changing the SDPFmtpLine), the filter function was using codec from the media engine. Thus, the change from `SetCodecPreferences` is lost. Fix: ---- - When a match is found (either exact or partial), use the codec from the transceiver instead of media engine. - Based on feedback, add checks to ensure that PayloadType is not set incorrectly (i. e. set with a default of 0). If it is set to 0, use the PayloadType from the media engine, i. e. negotiated value. Testing: -------- - Modify SDPFmtpLine of a codec of a transceiver using `SetCodecPreferences` method of `RTPTransceiver`. - Invoke `GetParamters` of `RTPREceiver` and ensure that `Codecs` has the SDPFmtpLine modification. Before this change the change was not reflected in the returned `Codecs`. - Check that SDP has payload from codec set via SetCodecPreferences
Add InterceptorFactory Interceptors are being accidentally misused by users. The issue is that an Interceptor can be re-used between multiple PeerConnections. Interceptors were designed to only be single PeerConnection aware, so state is being corrupted. Instead we are now going to provide InterceptorFactories. The default API of pion/webrtc will now be safe to use between PeerConnections. Resolves webrtc#1956
Add InterceptorFactory Interceptors are being accidentally misused by users. The issue is that an Interceptor can be re-used between multiple PeerConnections. Interceptors were designed to only be single PeerConnection aware, so state is being corrupted. Instead we are now going to provide InterceptorFactories. The default API of pion/webrtc will now be safe to use between PeerConnections. Resolves webrtc#1956
Fix filterTrackWithSSRC This function would only consider tracks with at least one SSRC assigned. If it processed a RID based track it would discard it.
Enable TWCC by default Add functions to configure TWCC reports and TWCC header extensions. Only TWCC reports are enabled by default, because there is no Congestion Controller available to handle reports from a remote peer, yet.
Fix double loop in data channel ID generation (*SCTPTransport).generateAndSetDataChannelID performed a double loop to find the next available data channel ID. This changes that behavior to generate a lookup map with the taken IDs first, so generating a data channel ID takes much less time. Before, it would take more than 1000ms to generate the next data channel ID once you had roughly 50k of them. Now it only takes 4ms at that same point. Fixes pion#1945
PreviousNext