Refactor streamsForSSRC to return struct

This commit is contained in:
Joe Turki
2025-11-18 09:49:11 +02:00
parent 5eb9d49c4a
commit e710dae6fe
3 changed files with 34 additions and 11 deletions

View File

@@ -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
}

View File

@@ -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

View File

@@ -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,