(t *testing.T)
| 599 | } |
| 600 | |
| 601 | func TestConfigureAudioTransceiver(t *testing.T) { |
| 602 | for _, testcase := range []struct { |
| 603 | nack bool |
| 604 | stereo bool |
| 605 | }{ |
| 606 | {false, false}, |
| 607 | {true, false}, |
| 608 | {false, true}, |
| 609 | {true, true}, |
| 610 | } { |
| 611 | t.Run(fmt.Sprintf("nack=%v,stereo=%v", testcase.nack, testcase.stereo), func(t *testing.T) { |
| 612 | var me webrtc.MediaEngine |
| 613 | registerCodecs(&me, []*livekit.Codec{{Mime: mime.MimeTypeOpus.String()}}, RTCPFeedbackConfig{Audio: []webrtc.RTCPFeedback{{Type: webrtc.TypeRTCPFBNACK}}}, false) |
| 614 | pc, err := webrtc.NewAPI(webrtc.WithMediaEngine(&me)).NewPeerConnection(webrtc.Configuration{}) |
| 615 | require.NoError(t, err) |
| 616 | defer pc.Close() |
| 617 | tr, err := pc.AddTransceiverFromKind(webrtc.RTPCodecTypeAudio, webrtc.RTPTransceiverInit{Direction: webrtc.RTPTransceiverDirectionSendonly}) |
| 618 | require.NoError(t, err) |
| 619 | |
| 620 | configureSenderAudio(tr, testcase.stereo, testcase.nack, nil) |
| 621 | codecs := tr.Sender().GetParameters().Codecs |
| 622 | for _, codec := range codecs { |
| 623 | if mime.IsMimeTypeStringOpus(codec.MimeType) { |
| 624 | require.Equal(t, testcase.stereo, strings.Contains(codec.SDPFmtpLine, "sprop-stereo=1")) |
| 625 | var nackEnabled bool |
| 626 | for _, fb := range codec.RTCPFeedback { |
| 627 | if fb.Type == webrtc.TypeRTCPFBNACK { |
| 628 | nackEnabled = true |
| 629 | break |
| 630 | } |
| 631 | } |
| 632 | require.Equal(t, testcase.nack, nackEnabled) |
| 633 | } |
| 634 | } |
| 635 | }) |
| 636 | } |
| 637 | } |
| 638 | |
| 639 | // When answering a subscriber offer, the sender's audio payload type must echo |
| 640 | // the payload type the offer assigned (RFC 3264), otherwise Firefox decodes no |
nothing calls this directly
no test coverage detected