diff --git a/go.mod b/go.mod index c709634d..a1c10b71 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/pion/datachannel v1.5.9 github.com/pion/dtls/v3 v3.0.2 github.com/pion/ice/v4 v4.0.1 - github.com/pion/interceptor v0.1.32 + github.com/pion/interceptor v0.1.34 github.com/pion/logging v0.2.2 github.com/pion/randutil v0.1.0 github.com/pion/rtcp v1.2.14 diff --git a/go.sum b/go.sum index 7a56ca1d..bec6efe0 100644 --- a/go.sum +++ b/go.sum @@ -41,8 +41,8 @@ github.com/pion/dtls/v3 v3.0.2 h1:425DEeJ/jfuTTghhUDW0GtYZYIwwMtnKKJNMcWccTX0= github.com/pion/dtls/v3 v3.0.2/go.mod h1:dfIXcFkKoujDQ+jtd8M6RgqKK3DuaUilm3YatAbGp5k= github.com/pion/ice/v4 v4.0.1 h1:2d3tPoTR90F3TcGYeXUwucGlXI3hds96cwv4kjZmb9s= github.com/pion/ice/v4 v4.0.1/go.mod h1:2dpakjpd7+74L5j3TAe6gvkbI5UIzOgAnkimm9SuHvA= -github.com/pion/interceptor v0.1.32 h1:DYbusOBhWKjPMiA5ifyczW03Tnh12gCaYn4VOvLMGk4= -github.com/pion/interceptor v0.1.32/go.mod h1:JzxbJ4umVTlZAf+/utHzNesY8tmRkM2lVmkS82TTj8Y= +github.com/pion/interceptor v0.1.34 h1:jb1MG9LTdQ4VVCSZDUbUzjeJNngzz4dBXcr2dL+ejfA= +github.com/pion/interceptor v0.1.34/go.mod h1:JzxbJ4umVTlZAf+/utHzNesY8tmRkM2lVmkS82TTj8Y= github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= github.com/pion/mdns/v2 v2.0.7 h1:c9kM8ewCgjslaAmicYMFQIde2H9/lrZpjBkN8VwoVtM= diff --git a/interceptor.go b/interceptor.go index 03b31def..59c97b47 100644 --- a/interceptor.go +++ b/interceptor.go @@ -159,7 +159,8 @@ func (i *interceptorToTrackLocalWriter) Write(b []byte) (int, error) { return i.WriteRTP(&packet.Header, packet.Payload) } -func createStreamInfo(id string, ssrc, ssrcFEC, ssrcRTX SSRC, payloadType PayloadType, codec RTPCodecCapability, webrtcHeaderExtensions []RTPHeaderExtensionParameter) *interceptor.StreamInfo { +// nolint: unparam +func createStreamInfo(id string, ssrc, ssrcRTX, ssrcFEC SSRC, payloadType, payloadTypeRTX, payloadTypeFEC PayloadType, codec RTPCodecCapability, webrtcHeaderExtensions []RTPHeaderExtensionParameter) *interceptor.StreamInfo { headerExtensions := make([]interceptor.RTPHeaderExtension, 0, len(webrtcHeaderExtensions)) for _, h := range webrtcHeaderExtensions { headerExtensions = append(headerExtensions, interceptor.RTPHeaderExtension{ID: h.ID, URI: h.URI}) @@ -171,17 +172,19 @@ func createStreamInfo(id string, ssrc, ssrcFEC, ssrcRTX SSRC, payloadType Payloa } return &interceptor.StreamInfo{ - ID: id, - Attributes: interceptor.Attributes{}, - SSRC: uint32(ssrc), - SSRCRetransmission: uint32(ssrcRTX), - SSRCForwardErrorCorrection: uint32(ssrcFEC), - PayloadType: uint8(payloadType), - RTPHeaderExtensions: headerExtensions, - MimeType: codec.MimeType, - ClockRate: codec.ClockRate, - Channels: codec.Channels, - SDPFmtpLine: codec.SDPFmtpLine, - RTCPFeedback: feedbacks, + ID: id, + Attributes: interceptor.Attributes{}, + SSRC: uint32(ssrc), + SSRCRetransmission: uint32(ssrcRTX), + SSRCForwardErrorCorrection: uint32(ssrcFEC), + PayloadType: uint8(payloadType), + PayloadTypeRetransmission: uint8(payloadTypeRTX), + PayloadTypeForwardErrorCorrection: uint8(payloadTypeFEC), + RTPHeaderExtensions: headerExtensions, + MimeType: codec.MimeType, + ClockRate: codec.ClockRate, + Channels: codec.Channels, + SDPFmtpLine: codec.SDPFmtpLine, + RTCPFeedback: feedbacks, } } diff --git a/peerconnection.go b/peerconnection.go index 0415368e..35823660 100644 --- a/peerconnection.go +++ b/peerconnection.go @@ -1621,7 +1621,7 @@ func (pc *PeerConnection) handleIncomingSSRC(rtpStream io.Reader, ssrc SSRC) err return err } - streamInfo := createStreamInfo("", ssrc, 0, 0, params.Codecs[0].PayloadType, params.Codecs[0].RTPCodecCapability, params.HeaderExtensions) + streamInfo := createStreamInfo("", ssrc, 0, 0, params.Codecs[0].PayloadType, 0, 0, params.Codecs[0].RTPCodecCapability, params.HeaderExtensions) readStream, interceptor, rtcpReadStream, rtcpInterceptor, err := pc.dtlsTransport.streamsForSSRC(ssrc, *streamInfo) if err != nil { return err diff --git a/rtpcodec.go b/rtpcodec.go index dbe34633..68beae8d 100644 --- a/rtpcodec.go +++ b/rtpcodec.go @@ -126,13 +126,13 @@ func codecParametersFuzzySearch(needle RTPCodecParameters, haystack []RTPCodecPa } // Given a CodecParameters find the RTX CodecParameters if one exists -func findRTXCodecParameters(needle PayloadType, haystack []RTPCodecParameters) (RTPCodecParameters, bool) { +func findRTXPayloadType(needle PayloadType, haystack []RTPCodecParameters) PayloadType { aptStr := fmt.Sprintf("apt=%d", needle) for _, c := range haystack { if aptStr == c.SDPFmtpLine { - return c, true + return c.PayloadType } } - return RTPCodecParameters{}, false + return PayloadType(0) } diff --git a/rtpreceiver.go b/rtpreceiver.go index 595194db..ba1afb55 100644 --- a/rtpreceiver.go +++ b/rtpreceiver.go @@ -210,14 +210,14 @@ func (r *RTPReceiver) startReceive(parameters RTPReceiveParameters) error { return fmt.Errorf("%w: %d", errRTPReceiverWithSSRCTrackStreamNotFound, parameters.Encodings[i].SSRC) } - t.streamInfo = createStreamInfo("", parameters.Encodings[i].SSRC, 0, 0, 0, codec, globalParams.HeaderExtensions) + t.streamInfo = createStreamInfo("", parameters.Encodings[i].SSRC, 0, 0, 0, 0, 0, codec, globalParams.HeaderExtensions) var err error if t.rtpReadStream, t.rtpInterceptor, t.rtcpReadStream, t.rtcpInterceptor, err = r.transport.streamsForSSRC(parameters.Encodings[i].SSRC, *t.streamInfo); err != nil { return err } if rtxSsrc := parameters.Encodings[i].RTX.SSRC; rtxSsrc != 0 { - streamInfo := createStreamInfo("", rtxSsrc, 0, 0, 0, codec, globalParams.HeaderExtensions) + streamInfo := createStreamInfo("", rtxSsrc, 0, 0, 0, 0, 0, codec, globalParams.HeaderExtensions) rtpReadStream, rtpInterceptor, rtcpReadStream, rtcpInterceptor, err := r.transport.streamsForSSRC(rtxSsrc, *streamInfo) if err != nil { return err diff --git a/rtpsender.go b/rtpsender.go index 79c476ec..b50ad865 100644 --- a/rtpsender.go +++ b/rtpsender.go @@ -305,6 +305,7 @@ func (r *RTPSender) Send(parameters RTPSendParameters) error { trackEncoding := r.trackEncodings[idx] srtpStream := &srtpWriterFuture{ssrc: parameters.Encodings[idx].SSRC, rtpSender: r} writeStream := &interceptorToTrackLocalWriter{} + rtpParameters := r.api.mediaEngine.getRTPParametersByKind(trackEncoding.track.Kind(), []RTPTransceiverDirection{RTPTransceiverDirectionSendonly}) trackEncoding.srtpStream = srtpStream trackEncoding.ssrc = parameters.Encodings[idx].SSRC @@ -312,7 +313,7 @@ func (r *RTPSender) Send(parameters RTPSendParameters) error { trackEncoding.ssrcFEC = parameters.Encodings[idx].FEC.SSRC trackEncoding.context = &baseTrackLocalContext{ id: r.id, - params: r.api.mediaEngine.getRTPParametersByKind(trackEncoding.track.Kind(), []RTPTransceiverDirection{RTPTransceiverDirectionSendonly}), + params: rtpParameters, ssrc: parameters.Encodings[idx].SSRC, ssrcFEC: parameters.Encodings[idx].FEC.SSRC, ssrcRTX: parameters.Encodings[idx].RTX.SSRC, @@ -332,6 +333,8 @@ func (r *RTPSender) Send(parameters RTPSendParameters) error { parameters.Encodings[idx].RTX.SSRC, parameters.Encodings[idx].FEC.SSRC, codec.PayloadType, + findRTXPayloadType(codec.PayloadType, rtpParameters.Codecs), + 0, codec.RTPCodecCapability, parameters.HeaderExtensions, ) diff --git a/track_local_static.go b/track_local_static.go index 5295d44a..d4ca1ed5 100644 --- a/track_local_static.go +++ b/track_local_static.go @@ -66,17 +66,12 @@ func (s *TrackLocalStaticRTP) Bind(t TrackLocalContext) (RTPCodecParameters, err parameters := RTPCodecParameters{RTPCodecCapability: s.codec} if codec, matchType := codecParametersFuzzySearch(parameters, t.CodecParameters()); matchType != codecMatchNone { - var payloadTypeRTX PayloadType - if rtxParameters, ok := findRTXCodecParameters(codec.PayloadType, t.CodecParameters()); ok { - payloadTypeRTX = rtxParameters.PayloadType - } - s.bindings = append(s.bindings, trackBinding{ ssrc: t.SSRC(), ssrcRTX: t.SSRCRetransmission(), ssrcFEC: t.SSRCForwardErrorCorrection(), payloadType: codec.PayloadType, - payloadTypeRTX: payloadTypeRTX, + payloadTypeRTX: findRTXPayloadType(codec.PayloadType, t.CodecParameters()), writeStream: t.WriteStream(), id: t.ID(), })