- 
                Notifications
    
You must be signed in to change notification settings  - Fork 1.8k
 
Open
Description
In Galene, I'm using SetCodecPreferences to ensure that we negotiate the right codec for a track forwarded to a client. Unfortunately, this has the side effect of disabling RTX.
Here's a full test:
package rtxtest
import (
	"strings"
	"testing"
	"github.com/pion/webrtc/v4"
)
func TestRTX(t *testing.T) {
	t.Run("NoSetCodecPreferences", func(t *testing.T) { testRTX(t, false) })
	t.Run("SetCodecPreferences", func(t *testing.T) { testRTX(t, true) })
}
func testRTX(t *testing.T, setPreferences bool) {
	pc, err := webrtc.NewPeerConnection(webrtc.Configuration{})
	if err != nil {
		t.Fatalf("NewPeerConnection: %v", err)
	}
	transceiver, err := pc.AddTransceiverFromKind(
		webrtc.RTPCodecTypeVideo,
		webrtc.RTPTransceiverInit{
			Direction: webrtc.RTPTransceiverDirectionRecvonly,
		},
	)
	if setPreferences {
		codec := webrtc.RTPCodecCapability{
			"video/vp8", 90000, 0, "", nil,
		}
		err := transceiver.SetCodecPreferences(
			[]webrtc.RTPCodecParameters{
				{
					RTPCodecCapability: codec,
				},
			},
		)
		if err != nil {
			t.Errorf("SetCodecPreferences: %v", err)
		}
	}
	if err != nil {
		t.Fatalf("AddTransceiverFromKind: %v", err)
	}
	offer, err := pc.CreateOffer(nil)
	if err != nil {
		t.Fatalf("CreateOffer: %v", err)
	}
	if !strings.Contains(offer.SDP, "apt=96") {
		t.Errorf("Didn't try to negotiate RTX")
	}
}