rtpreceiver_go_test.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
  2. // SPDX-License-Identifier: MIT
  3. //go:build !js
  4. // +build !js
  5. package webrtc
  6. import (
  7. "context"
  8. "testing"
  9. "time"
  10. "github.com/pion/webrtc/v3/pkg/media"
  11. "github.com/stretchr/testify/assert"
  12. )
  13. func TestSetRTPParameters(t *testing.T) {
  14. sender, receiver, wan := createVNetPair(t)
  15. outgoingTrack, err := NewTrackLocalStaticSample(RTPCodecCapability{MimeType: MimeTypeVP8}, "video", "pion")
  16. assert.NoError(t, err)
  17. _, err = sender.AddTrack(outgoingTrack)
  18. assert.NoError(t, err)
  19. // Those parameters wouldn't make sense in a real application,
  20. // but for the sake of the test we just need different values.
  21. p := RTPParameters{
  22. Codecs: []RTPCodecParameters{
  23. {
  24. RTPCodecCapability: RTPCodecCapability{MimeTypeOpus, 48000, 2, "minptime=10;useinbandfec=1", []RTCPFeedback{{"nack", ""}}},
  25. PayloadType: 111,
  26. },
  27. },
  28. HeaderExtensions: []RTPHeaderExtensionParameter{
  29. {URI: "urn:ietf:params:rtp-hdrext:sdes:mid"},
  30. {URI: "urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id"},
  31. {URI: "urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id"},
  32. },
  33. }
  34. seenPacket, seenPacketCancel := context.WithCancel(context.Background())
  35. receiver.OnTrack(func(trackRemote *TrackRemote, r *RTPReceiver) {
  36. r.SetRTPParameters(p)
  37. incomingTrackCodecs := r.Track().Codec()
  38. assert.EqualValues(t, p.HeaderExtensions, r.Track().params.HeaderExtensions)
  39. assert.EqualValues(t, p.Codecs[0].MimeType, incomingTrackCodecs.MimeType)
  40. assert.EqualValues(t, p.Codecs[0].ClockRate, incomingTrackCodecs.ClockRate)
  41. assert.EqualValues(t, p.Codecs[0].Channels, incomingTrackCodecs.Channels)
  42. assert.EqualValues(t, p.Codecs[0].SDPFmtpLine, incomingTrackCodecs.SDPFmtpLine)
  43. assert.EqualValues(t, p.Codecs[0].RTCPFeedback, incomingTrackCodecs.RTCPFeedback)
  44. assert.EqualValues(t, p.Codecs[0].PayloadType, incomingTrackCodecs.PayloadType)
  45. seenPacketCancel()
  46. })
  47. peerConnectionsConnected := untilConnectionState(PeerConnectionStateConnected, sender, receiver)
  48. assert.NoError(t, signalPair(sender, receiver))
  49. peerConnectionsConnected.Wait()
  50. assert.NoError(t, outgoingTrack.WriteSample(media.Sample{Data: []byte{0xAA}, Duration: time.Second}))
  51. <-seenPacket.Done()
  52. assert.NoError(t, wan.Stop())
  53. closePairNow(t, sender, receiver)
  54. }