client_test.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package webrtc
  2. import (
  3. "testing"
  4. "github.com/AlexxIT/go2rtc/pkg/core"
  5. "github.com/pion/webrtc/v3"
  6. "github.com/stretchr/testify/assert"
  7. "github.com/stretchr/testify/require"
  8. )
  9. func TestClient(t *testing.T) {
  10. api, err := NewAPI()
  11. require.Nil(t, err)
  12. pc, err := api.NewPeerConnection(webrtc.Configuration{})
  13. require.Nil(t, err)
  14. prod := NewConn(pc)
  15. medias := []*core.Media{
  16. {Kind: core.KindVideo, Direction: core.DirectionRecvonly},
  17. {Kind: core.KindAudio, Direction: core.DirectionRecvonly},
  18. {Kind: core.KindAudio, Direction: core.DirectionSendonly},
  19. }
  20. offer, err := prod.CreateOffer(medias)
  21. require.Nil(t, err)
  22. assert.NotEmpty(t, offer)
  23. require.Len(t, prod.pc.GetReceivers(), 2)
  24. require.Len(t, prod.pc.GetSenders(), 1)
  25. answer := `v=0
  26. o=- 1934370540648269799 1678277622 IN IP4 0.0.0.0
  27. s=-
  28. t=0 0
  29. a=fingerprint:sha-256 77:8C:9A:62:51:81:69:EA:4E:BE:93:6B:4E:DF:51:D2:2F:E3:DF:E7:F4:8A:18:1A:C0:74:FA:AE:B8:98:29:9B
  30. a=extmap-allow-mixed
  31. a=group:BUNDLE 0 1 2
  32. m=video 9 UDP/TLS/RTP/SAVPF 97
  33. c=IN IP4 0.0.0.0
  34. a=setup:active
  35. a=mid:0
  36. a=ice-ufrag:xxx
  37. a=ice-pwd:xxx
  38. a=rtcp-mux
  39. a=rtcp-rsize
  40. a=rtpmap:97 H264/90000
  41. a=fmtp:97 packetization-mode=1;profile-level-id=42e01f
  42. a=extmap:1 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
  43. a=ssrc:2815449682 cname:go2rtc
  44. a=ssrc:2815449682 msid:go2rtc video
  45. a=ssrc:2815449682 mslabel:go2rtc
  46. a=ssrc:2815449682 label:video
  47. a=msid:go2rtc video
  48. a=sendonly
  49. m=audio 9 UDP/TLS/RTP/SAVPF 8
  50. c=IN IP4 0.0.0.0
  51. a=setup:active
  52. a=mid:1
  53. a=ice-ufrag:xxx
  54. a=ice-pwd:xxx
  55. a=rtcp-mux
  56. a=rtcp-rsize
  57. a=rtpmap:8 PCMA/8000
  58. a=extmap:1 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
  59. a=ssrc:1392166302 cname:go2rtc
  60. a=ssrc:1392166302 msid:go2rtc audio
  61. a=ssrc:1392166302 mslabel:go2rtc
  62. a=ssrc:1392166302 label:audio
  63. a=msid:go2rtc audio
  64. a=sendonly
  65. m=audio 9 UDP/TLS/RTP/SAVPF 0
  66. c=IN IP4 0.0.0.0
  67. a=setup:active
  68. a=mid:2
  69. a=ice-ufrag:xxx
  70. a=ice-pwd:xxx
  71. a=rtcp-mux
  72. a=rtcp-rsize
  73. a=rtpmap:0 PCMU/8000
  74. a=extmap:1 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
  75. a=recvonly
  76. `
  77. err = prod.SetAnswer(answer)
  78. require.Nil(t, err)
  79. sender := prod.pc.GetSenders()[0]
  80. caps := webrtc.RTPCodecCapability{
  81. MimeType: webrtc.MimeTypePCMU,
  82. ClockRate: 8000,
  83. Channels: 0,
  84. }
  85. track := sender.Track()
  86. track, err = webrtc.NewTrackLocalStaticRTP(caps, track.ID(), track.StreamID())
  87. require.Nil(t, err)
  88. err = sender.ReplaceTrack(track)
  89. require.Nil(t, err)
  90. }
  91. func TestUnmarshalICEServers(t *testing.T) {
  92. s := `[{"credential":"xxx","urls":"xxx","username":"xxx"},{"credential":null,"urls":"xxx","username":null}]`
  93. servers, err := UnmarshalICEServers([]byte(s))
  94. require.Nil(t, err)
  95. require.Len(t, servers, 2)
  96. }