diff --git a/dtlstransport.go b/dtlstransport.go index e0b575a1..cb838482 100644 --- a/dtlstransport.go +++ b/dtlstransport.go @@ -65,6 +65,13 @@ type simulcastStreamPair struct { srtcp *srtp.ReadStreamSRTCP } +type streamsForSSRCResult struct { + rtpReadStream *srtp.ReadStreamSRTP + rtpInterceptor interceptor.RTPReader + rtcpReadStream *srtp.ReadStreamSRTCP + rtcpInterceptor interceptor.RTCPReader +} + // NewDTLSTransport creates a new DTLSTransport. // This constructor is part of the ORTC API. It is not // meant to be used together with the basic WebRTC API. @@ -530,15 +537,15 @@ func (t *DTLSTransport) storeSimulcastStream( func (t *DTLSTransport) streamsForSSRC( ssrc SSRC, streamInfo interceptor.StreamInfo, -) (*srtp.ReadStreamSRTP, interceptor.RTPReader, *srtp.ReadStreamSRTCP, interceptor.RTCPReader, error) { +) (*streamsForSSRCResult, error) { srtpSession, err := t.getSRTPSession() if err != nil { - return nil, nil, nil, nil, err + return nil, err } rtpReadStream, err := srtpSession.OpenReadStream(uint32(ssrc)) if err != nil { - return nil, nil, nil, nil, err + return nil, err } rtpInterceptor := t.api.interceptor.BindRemoteStream( @@ -554,12 +561,12 @@ func (t *DTLSTransport) streamsForSSRC( srtcpSession, err := t.getSRTCPSession() if err != nil { - return nil, nil, nil, nil, err + return nil, err } rtcpReadStream, err := srtcpSession.OpenReadStream(uint32(ssrc)) if err != nil { - return nil, nil, nil, nil, err + return nil, err } rtcpInterceptor := t.api.interceptor.BindRTCPReader(interceptor.RTCPReaderFunc( @@ -570,5 +577,10 @@ func (t *DTLSTransport) streamsForSSRC( }), ) - return rtpReadStream, rtpInterceptor, rtcpReadStream, rtcpInterceptor, nil + return &streamsForSSRCResult{ + rtpReadStream: rtpReadStream, + rtpInterceptor: rtpInterceptor, + rtcpReadStream: rtcpReadStream, + rtcpInterceptor: rtcpInterceptor, + }, nil } diff --git a/peerconnection.go b/peerconnection.go index 6c9aa549..63bd397b 100644 --- a/peerconnection.go +++ b/peerconnection.go @@ -1780,10 +1780,14 @@ func (pc *PeerConnection) handleIncomingSSRC(rtpStream io.Reader, ssrc SSRC) err params.Codecs[0].RTPCodecCapability, params.HeaderExtensions, ) - readStream, interceptor, rtcpReadStream, rtcpInterceptor, err := pc.dtlsTransport.streamsForSSRC(ssrc, *streamInfo) + result, err := pc.dtlsTransport.streamsForSSRC(ssrc, *streamInfo) if err != nil { return err } + readStream := result.rtpReadStream + interceptor := result.rtpInterceptor + rtcpReadStream := result.rtcpReadStream + rtcpInterceptor := result.rtcpInterceptor // try to read simulcast IDs from the packet we already have var mid, rid, rsid string diff --git a/rtpreceiver.go b/rtpreceiver.go index 6e2e0ccd..aa0312db 100644 --- a/rtpreceiver.go +++ b/rtpreceiver.go @@ -231,22 +231,29 @@ func (r *RTPReceiver) startReceive(parameters RTPReceiveParameters) error { //no codec, globalParams.HeaderExtensions, ) - var err error - //nolint:lll // # TODO refactor - if streams.rtpReadStream, streams.rtpInterceptor, streams.rtcpReadStream, streams.rtcpInterceptor, err = r.transport.streamsForSSRC(parameters.Encodings[i].SSRC, *streams.streamInfo); err != nil { + result, err := r.transport.streamsForSSRC(parameters.Encodings[i].SSRC, *streams.streamInfo) + if err != nil { return err } + streams.rtpReadStream = result.rtpReadStream + streams.rtpInterceptor = result.rtpInterceptor + streams.rtcpReadStream = result.rtcpReadStream + streams.rtcpInterceptor = result.rtcpInterceptor if rtxSsrc := parameters.Encodings[i].RTX.SSRC; rtxSsrc != 0 { streamInfo := createStreamInfo("", rtxSsrc, 0, 0, 0, 0, 0, codec, globalParams.HeaderExtensions) - rtpReadStream, rtpInterceptor, rtcpReadStream, rtcpInterceptor, err := r.transport.streamsForSSRC( + result, err = r.transport.streamsForSSRC( rtxSsrc, *streamInfo, ) if err != nil { return err } + rtpReadStream := result.rtpReadStream + rtpInterceptor := result.rtpInterceptor + rtcpReadStream := result.rtcpReadStream + rtcpInterceptor := result.rtcpInterceptor if err = r.receiveForRtx( rtxSsrc,