Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 30 additions & 26 deletions peerconnection.go
Original file line number Diff line number Diff line change
Expand Up @@ -1725,7 +1725,7 @@ func (pc *PeerConnection) handleNonMediaBandwidthProbe() {
}
}

func (pc *PeerConnection) handleIncomingSSRC(rtpStream *srtp.ReadStreamSRTP, ssrc SSRC) error { //nolint:gocyclo,gocognit,cyclop,lll
func (pc *PeerConnection) handleIncomingSSRC(rtpStream *srtp.ReadStreamSRTP, ssrc SSRC) error { //nolint:gocyclo,maintidx,gocognit,cyclop,lll
remoteDescription := pc.RemoteDescription()
if remoteDescription == nil {
return errPeerConnRemoteDescriptionNil
Expand Down Expand Up @@ -1840,43 +1840,47 @@ func (pc *PeerConnection) handleIncomingSSRC(rtpStream *srtp.ReadStreamSRTP, ssr

// if the first packet didn't contain simuilcast IDs, then probe more packets
var paddingOnly bool
for readCount := 0; readCount <= simulcastProbeCount; readCount++ {
if mid == "" || (rid == "" && rsid == "") {
// skip padding only packets for probing
if paddingOnly {
readCount--
}

i, attributes, err := interceptor.Read(b, nil)
if err != nil {
return err
}
readCount := 0
for (mid == "" || (rid == "" && rsid == "")) && readCount < simulcastProbeCount {
// skip padding only packets for probing
if paddingOnly {
readCount--
}

peekedPackets = append(peekedPackets, &peekedPacket{
payload: slices.Clone(b[:i]),
attributes: attributes,
})
i, attributes, err := interceptor.Read(b, nil)
if err != nil {
return err
}

mid, rid, rsid, paddingOnly, err = handleUnknownRTPPacket(
b[:i], uint8(midExtensionID), //nolint:gosec // G115
uint8(streamIDExtensionID), //nolint:gosec // G115
uint8(repairStreamIDExtensionID), //nolint:gosec // G115
)
if err != nil {
return err
}
peekedPackets = append(peekedPackets, &peekedPacket{
payload: slices.Clone(b[:i]),
attributes: attributes,
})

continue
mid, rid, rsid, paddingOnly, err = handleUnknownRTPPacket(
b[:i], uint8(midExtensionID), //nolint:gosec // G115
uint8(streamIDExtensionID), //nolint:gosec // G115
uint8(repairStreamIDExtensionID), //nolint:gosec // G115
)
if err != nil {
return err
}
readCount++
}

if mid != "" && (rid != "" || rsid != "") {
for _, t := range pc.GetTransceivers() {
receiver := t.Receiver()
if t.Mid() != mid || receiver == nil {
continue
}

if rsid != "" {
return receiver.receiveForRtx(SSRC(0), rsid, streamInfo, readStream, interceptor, rtcpReadStream, rtcpInterceptor)
return receiver.receiveForRtx(
SSRC(0), rsid, streamInfo,
readStream, interceptor,
rtcpReadStream, rtcpInterceptor,
)
}

track, err := receiver.receiveForRid(
Expand Down
Loading