You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

SampleSdpStrings.js 9.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. /* eslint-disable max-len*/
  2. /* jshint maxlen:false*/
  3. import * as transform from 'sdp-transform';
  4. // A generic sdp session block
  5. const baseSessionSdp = ''
  6. + 'v=0\r\n'
  7. + 'o=- 814997227879783433 5 IN IP4 127.0.0.1\r\n'
  8. + 's=-\r\n'
  9. + 't=0 0\r\n'
  10. + 'a=msid-semantic: WMS 0836cc8e-a7bb-47e9-affb-0599414bc56d\r\n'
  11. + 'a=group:BUNDLE audio video data\r\n';
  12. // A basic sdp audio mline with a single stream
  13. const baseAudioMLineSdp = ''
  14. + 'm=audio 54405 RTP/SAVPF 111 103 104 126\r\n'
  15. + 'c=IN IP4 172.29.32.39\r\n'
  16. + 'a=rtpmap:111 opus/48000/2\r\n'
  17. + 'a=rtpmap:103 ISAC/16000\r\n'
  18. + 'a=rtpmap:104 ISAC/32000\r\n'
  19. + 'a=rtpmap:126 telephone-event/8000\r\n'
  20. + 'a=fmtp:111 minptime=10;useinbandfec=1\r\n'
  21. + 'a=rtcp:9 IN IP4 0.0.0.0\r\n'
  22. + 'a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\n'
  23. + 'a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n'
  24. + 'a=setup:passive\r\n'
  25. + 'a=mid:audio\r\n'
  26. + 'a=sendrecv\r\n'
  27. + 'a=ice-ufrag:adPg\r\n'
  28. + 'a=ice-pwd:Xsr05Mq8S7CR44DAnusZE26F\r\n'
  29. + 'a=fingerprint:sha-256 6A:39:DE:11:24:AD:2E:4E:63:D6:69:D3:85:05:53:C7:3C:38:A4:B7:91:74:C0:91:44:FC:94:63:7F:01:AB:A9\r\n'
  30. + 'a=candidate:1581043602 1 udp 2122260223 172.29.32.39 54405 typ host generation 0\r\n'
  31. + 'a=ssrc:124723944 cname:peDGrDD6WsxUOki/\r\n'
  32. + 'a=ssrc:124723944 msid:dcbb0236-cea5-402e-9e9a-595c65ffcc2a 40abf2d3-a415-4c68-8c17-2a038e8bebcf\r\n'
  33. + 'a=ssrc:124723944 mslabel:dcbb0236-cea5-402e-9e9a-595c65ffcc2a\r\n'
  34. + 'a=ssrc:124723944 label:40abf2d3-a415-4c68-8c17-2a038e8bebcf\r\n'
  35. + 'a=rtcp-mux\r\n';
  36. // A basic sdp application mline
  37. const baseDataMLineSdp = ''
  38. + 'm=application 9 DTLS/SCTP 5000\r\n'
  39. + 'c=IN IP4 0.0.0.0\r\n'
  40. + 'b=AS:30\r\n'
  41. + 'a=setup:passive\r\n'
  42. + 'a=mid:data\r\n'
  43. + 'a=ice-ufrag:adPg\r\n'
  44. + 'a=ice-pwd:Xsr05Mq8S7CR44DAnusZE26F\r\n'
  45. + 'a=fingerprint:sha-256 6A:39:DE:11:24:AD:2E:4E:63:D6:69:D3:85:05:53:C7:3C:38:A4:B7:91:74:C0:91:44:FC:94:63:7F:01:AB:A9\r\n'
  46. + 'a=sctpmap:5000 webrtc-datachannel 1024\r\n';
  47. // A basic sdp video mline with a single stream
  48. const plainVideoMLineSdp = ''
  49. + 'm=video 9 RTP/SAVPF 100\r\n'
  50. + 'c=IN IP4 0.0.0.0\r\n'
  51. + 'a=rtpmap:100 VP8/90000\r\n'
  52. + 'a=rtcp:9 IN IP4 0.0.0.0\r\n'
  53. + 'a=rtcp-fb:100 ccm fir\r\n'
  54. + 'a=rtcp-fb:100 nack\r\n'
  55. + 'a=rtcp-fb:100 nack pli\r\n'
  56. + 'a=rtcp-fb:100 goog-remb\r\n'
  57. + 'a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n'
  58. + 'a=setup:passive\r\n'
  59. + 'a=mid:video\r\n'
  60. + 'a=sendrecv\r\n'
  61. + 'a=ice-ufrag:adPg\r\n'
  62. + 'a=ice-pwd:Xsr05Mq8S7CR44DAnusZE26F\r\n'
  63. + 'a=fingerprint:sha-256 6A:39:DE:11:24:AD:2E:4E:63:D6:69:D3:85:05:53:C7:3C:38:A4:B7:91:74:C0:91:44:FC:94:63:7F:01:AB:A9\r\n'
  64. + 'a=ssrc:1757014965 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  65. + 'a=ssrc:1757014965 cname:peDGrDD6WsxUOki/\r\n'
  66. + 'a=rtcp-mux\r\n';
  67. // A basic sdp video mline with a single stream and multiple codecs
  68. const multiCodecVideoMLine = ''
  69. + 'm=video 9 RTP/SAVPF 100 126 97\r\n'
  70. + 'c=IN IP4 0.0.0.0\r\n'
  71. + 'a=rtpmap:100 VP8/90000\r\n'
  72. + 'a=rtpmap:126 H264/90000\r\n'
  73. + 'a=rtpmap:97 H264/90000\r\n'
  74. + 'a=rtcp:9 IN IP4 0.0.0.0\r\n'
  75. + 'a=rtcp-fb:100 ccm fir\r\n'
  76. + 'a=rtcp-fb:100 nack\r\n'
  77. + 'a=rtcp-fb:100 nack pli\r\n'
  78. + 'a=rtcp-fb:100 goog-remb\r\n'
  79. + 'a=fmtp:126 profile-level-id=42e01f;level-asymmetry-allowed=1;packetization-mode=1\r\n'
  80. + 'a=fmtp:97 profile-level-id=42e01f;level-asymmetry-allowed=1\r\n'
  81. + 'a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n'
  82. + 'a=setup:passive\r\n'
  83. + 'a=mid:video\r\n'
  84. + 'a=sendrecv\r\n'
  85. + 'a=ice-ufrag:adPg\r\n'
  86. + 'a=ice-pwd:Xsr05Mq8S7CR44DAnusZE26F\r\n'
  87. + 'a=fingerprint:sha-256 6A:39:DE:11:24:AD:2E:4E:63:D6:69:D3:85:05:53:C7:3C:38:A4:B7:91:74:C0:91:44:FC:94:63:7F:01:AB:A9\r\n'
  88. + 'a=ssrc:1757014965 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  89. + 'a=ssrc:1757014965 cname:peDGrDD6WsxUOki/\r\n'
  90. + 'a=rtcp-mux\r\n';
  91. // An sdp video mline with 3 simulcast streams
  92. const simulcastVideoMLineSdp = ''
  93. + 'm=video 9 RTP/SAVPF 100\r\n'
  94. + 'c=IN IP4 0.0.0.0\r\n'
  95. + 'a=rtpmap:100 VP8/90000\r\n'
  96. + 'a=rtcp:9 IN IP4 0.0.0.0\r\n'
  97. + 'a=rtcp-fb:100 ccm fir\r\n'
  98. + 'a=rtcp-fb:100 nack\r\n'
  99. + 'a=rtcp-fb:100 nack pli\r\n'
  100. + 'a=rtcp-fb:100 goog-remb\r\n'
  101. + 'a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n'
  102. + 'a=setup:passive\r\n'
  103. + 'a=mid:video\r\n'
  104. + 'a=sendrecv\r\n'
  105. + 'a=ice-ufrag:adPg\r\n'
  106. + 'a=ice-pwd:Xsr05Mq8S7CR44DAnusZE26F\r\n'
  107. + 'a=fingerprint:sha-256 6A:39:DE:11:24:AD:2E:4E:63:D6:69:D3:85:05:53:C7:3C:38:A4:B7:91:74:C0:91:44:FC:94:63:7F:01:AB:A9\r\n'
  108. + 'a=ssrc:1757014965 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  109. + 'a=ssrc:1757014965 cname:peDGrDD6WsxUOki/\r\n'
  110. + 'a=ssrc:1479742055 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  111. + 'a=ssrc:1479742055 cname:peDGrDD6WsxUOki/\r\n'
  112. + 'a=ssrc:1089111804 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  113. + 'a=ssrc:1089111804 cname:peDGrDD6WsxUOki/\r\n'
  114. + 'a=ssrc-group:SIM 1757014965 1479742055 1089111804\r\n'
  115. + 'a=rtcp-mux\r\n';
  116. // An sdp video mline with a single video stream and a
  117. // corresponding rtx stream
  118. const rtxVideoMLineSdp = ''
  119. + 'm=video 9 RTP/SAVPF 100 96\r\n'
  120. + 'c=IN IP4 0.0.0.0\r\n'
  121. + 'a=rtpmap:100 VP8/90000\r\n'
  122. + 'a=fmtp:96 apt=100\r\n'
  123. + 'a=rtcp:9 IN IP4 0.0.0.0\r\n'
  124. + 'a=rtcp-fb:100 ccm fir\r\n'
  125. + 'a=rtcp-fb:100 nack\r\n'
  126. + 'a=rtcp-fb:100 nack pli\r\n'
  127. + 'a=rtcp-fb:100 goog-remb\r\n'
  128. + 'a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n'
  129. + 'a=setup:passive\r\n'
  130. + 'a=mid:video\r\n'
  131. + 'a=sendrecv\r\n'
  132. + 'a=ice-ufrag:adPg\r\n'
  133. + 'a=ice-pwd:Xsr05Mq8S7CR44DAnusZE26F\r\n'
  134. + 'a=fingerprint:sha-256 6A:39:DE:11:24:AD:2E:4E:63:D6:69:D3:85:05:53:C7:3C:38:A4:B7:91:74:C0:91:44:FC:94:63:7F:01:AB:A9\r\n'
  135. + 'a=ssrc:1757014965 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  136. + 'a=ssrc:1757014965 cname:peDGrDD6WsxUOki/\r\n'
  137. + 'a=ssrc:984899560 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  138. + 'a=ssrc:984899560 cname:peDGrDD6WsxUOki/\r\n'
  139. + 'a=ssrc-group:FID 1757014965 984899560\r\n'
  140. + 'a=rtcp-mux\r\n';
  141. // An sdp video mline with 3 simulcast streams and 3 rtx streams
  142. const simulcastRtxVideoMLineSdp = ''
  143. + 'm=video 9 RTP/SAVPF 100 96\r\n'
  144. + 'c=IN IP4 0.0.0.0\r\n'
  145. + 'a=rtpmap:100 VP8/90000\r\n'
  146. + 'a=fmtp:96 apt=100\r\n'
  147. + 'a=rtcp:9 IN IP4 0.0.0.0\r\n'
  148. + 'a=rtcp-fb:100 ccm fir\r\n'
  149. + 'a=rtcp-fb:100 nack\r\n'
  150. + 'a=rtcp-fb:100 nack pli\r\n'
  151. + 'a=rtcp-fb:100 goog-remb\r\n'
  152. + 'a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n'
  153. + 'a=setup:passive\r\n'
  154. + 'a=mid:video\r\n'
  155. + 'a=sendrecv\r\n'
  156. + 'a=ice-ufrag:adPg\r\n'
  157. + 'a=ice-pwd:Xsr05Mq8S7CR44DAnusZE26F\r\n'
  158. + 'a=fingerprint:sha-256 6A:39:DE:11:24:AD:2E:4E:63:D6:69:D3:85:05:53:C7:3C:38:A4:B7:91:74:C0:91:44:FC:94:63:7F:01:AB:A9\r\n'
  159. + 'a=ssrc:1757014965 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  160. + 'a=ssrc:1757014965 cname:peDGrDD6WsxUOki/\r\n'
  161. + 'a=ssrc:1479742055 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  162. + 'a=ssrc:1479742055 cname:peDGrDD6WsxUOki/\r\n'
  163. + 'a=ssrc:1089111804 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  164. + 'a=ssrc:1089111804 cname:peDGrDD6WsxUOki/\r\n'
  165. + 'a=ssrc:855213044 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  166. + 'a=ssrc:855213044 cname:peDGrDD6WsxUOki/\r\n'
  167. + 'a=ssrc:984899560 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  168. + 'a=ssrc:984899560 cname:peDGrDD6WsxUOki/\r\n'
  169. + 'a=ssrc:2963867077 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  170. + 'a=ssrc:2963867077 cname:peDGrDD6WsxUOki/\r\n'
  171. + 'a=ssrc-group:FID 1757014965 984899560\r\n'
  172. + 'a=ssrc-group:FID 1479742055 855213044\r\n'
  173. + 'a=ssrc-group:FID 1089111804 2963867077\r\n'
  174. + 'a=ssrc-group:SIM 1757014965 1479742055 1089111804\r\n'
  175. + 'a=rtcp-mux\r\n';
  176. // A full sdp string representing a client doing simulcast
  177. const simulcastSdpStr = baseSessionSdp + baseAudioMLineSdp + simulcastVideoMLineSdp + baseDataMLineSdp;
  178. // A full sdp string representing a client doing simulcast and rtx
  179. const simulcastRtxSdpStr = baseSessionSdp + baseAudioMLineSdp + simulcastRtxVideoMLineSdp + baseDataMLineSdp;
  180. // A full sdp string representing a client doing a single video stream
  181. const plainVideoSdpStr = baseSessionSdp + baseAudioMLineSdp + plainVideoMLineSdp + baseDataMLineSdp;
  182. // A full sdp string representing a client doing a single video stream with rtx
  183. const rtxVideoSdpStr = baseSessionSdp + baseAudioMLineSdp + rtxVideoMLineSdp + baseDataMLineSdp;
  184. // A full sdp string representing a client doing a single video stream with multiple codec options
  185. const multiCodecVideoSdpStr = baseSessionSdp + baseAudioMLineSdp + multiCodecVideoMLine + baseDataMLineSdp;
  186. export const simulcastSdp = transform.parse(simulcastSdpStr);
  187. export const simulcastRtxSdp = transform.parse(simulcastRtxSdpStr);
  188. export const plainVideoSdp = transform.parse(plainVideoSdpStr);
  189. export const rtxVideoSdp = transform.parse(rtxVideoSdpStr);
  190. export const multiCodecVideoSdp = transform.parse(multiCodecVideoSdpStr);
  191. /* eslint-enable max-len*/