ortc_media_test.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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/transport/v2/test"
  11. "github.com/pion/webrtc/v3/pkg/media"
  12. "github.com/stretchr/testify/assert"
  13. )
  14. func Test_ORTC_Media(t *testing.T) {
  15. lim := test.TimeOut(time.Second * 20)
  16. defer lim.Stop()
  17. report := test.CheckRoutines(t)
  18. defer report()
  19. stackA, stackB, err := newORTCPair()
  20. assert.NoError(t, err)
  21. assert.NoError(t, stackA.api.mediaEngine.RegisterDefaultCodecs())
  22. assert.NoError(t, stackB.api.mediaEngine.RegisterDefaultCodecs())
  23. assert.NoError(t, signalORTCPair(stackA, stackB))
  24. track, err := NewTrackLocalStaticSample(RTPCodecCapability{MimeType: MimeTypeVP8}, "video", "pion")
  25. assert.NoError(t, err)
  26. rtpSender, err := stackA.api.NewRTPSender(track, stackA.dtls)
  27. assert.NoError(t, err)
  28. assert.NoError(t, rtpSender.Send(rtpSender.GetParameters()))
  29. rtpReceiver, err := stackB.api.NewRTPReceiver(RTPCodecTypeVideo, stackB.dtls)
  30. assert.NoError(t, err)
  31. assert.NoError(t, rtpReceiver.Receive(RTPReceiveParameters{Encodings: []RTPDecodingParameters{
  32. {RTPCodingParameters: rtpSender.GetParameters().Encodings[0].RTPCodingParameters},
  33. }}))
  34. seenPacket, seenPacketCancel := context.WithCancel(context.Background())
  35. go func() {
  36. track := rtpReceiver.Track()
  37. _, _, err := track.ReadRTP()
  38. assert.NoError(t, err)
  39. seenPacketCancel()
  40. }()
  41. func() {
  42. for range time.Tick(time.Millisecond * 20) {
  43. select {
  44. case <-seenPacket.Done():
  45. return
  46. default:
  47. assert.NoError(t, track.WriteSample(media.Sample{Data: []byte{0xAA}, Duration: time.Second}))
  48. }
  49. }
  50. }()
  51. assert.NoError(t, rtpSender.Stop())
  52. assert.NoError(t, rtpReceiver.Stop())
  53. assert.NoError(t, stackA.close())
  54. assert.NoError(t, stackB.close())
  55. }