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 21KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515
  1. /* eslint-disable max-len*/
  2. import * as transform from 'sdp-transform';
  3. // A generic sdp session block
  4. const baseSessionSdp = ''
  5. + 'v=0\r\n'
  6. + 'o=- 814997227879783433 5 IN IP4 127.0.0.1\r\n'
  7. + 's=-\r\n'
  8. + 't=0 0\r\n'
  9. + 'a=msid-semantic: WMS 0836cc8e-a7bb-47e9-affb-0599414bc56d\r\n'
  10. + 'a=group:BUNDLE audio video data\r\n';
  11. // A basic sdp audio mline with a single stream
  12. const baseAudioMLineSdp = ''
  13. + 'm=audio 54405 RTP/SAVPF 111 103 104 126\r\n'
  14. + 'c=IN IP4 172.29.32.39\r\n'
  15. + 'a=rtpmap:111 opus/48000/2\r\n'
  16. + 'a=rtpmap:103 ISAC/16000\r\n'
  17. + 'a=rtpmap:104 ISAC/32000\r\n'
  18. + 'a=rtpmap:126 telephone-event/8000\r\n'
  19. + 'a=fmtp:111 minptime=10;useinbandfec=1\r\n'
  20. + 'a=rtcp:9 IN IP4 0.0.0.0\r\n'
  21. + 'a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\n'
  22. + 'a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n'
  23. + 'a=setup:passive\r\n'
  24. + 'a=mid:audio\r\n'
  25. + 'a=sendrecv\r\n'
  26. + 'a=ice-ufrag:adPg\r\n'
  27. + 'a=ice-pwd:Xsr05Mq8S7CR44DAnusZE26F\r\n'
  28. + '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'
  29. + 'a=candidate:1581043602 1 udp 2122260223 172.29.32.39 54405 typ host generation 0\r\n'
  30. + 'a=ssrc:124723944 cname:peDGrDD6WsxUOki/\r\n'
  31. + 'a=ssrc:124723944 msid:dcbb0236-cea5-402e-9e9a-595c65ffcc2a 40abf2d3-a415-4c68-8c17-2a038e8bebcf\r\n'
  32. + 'a=ssrc:124723944 mslabel:dcbb0236-cea5-402e-9e9a-595c65ffcc2a\r\n'
  33. + 'a=ssrc:124723944 label:40abf2d3-a415-4c68-8c17-2a038e8bebcf\r\n'
  34. + 'a=rtcp-mux\r\n';
  35. // A basic sdp application mline
  36. const baseDataMLineSdp = ''
  37. + 'm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\n'
  38. + 'c=IN IP4 0.0.0.0\r\n'
  39. + 'b=AS:30\r\n'
  40. + 'a=setup:passive\r\n'
  41. + 'a=mid:data\r\n'
  42. + 'a=ice-ufrag:adPg\r\n'
  43. + 'a=ice-pwd:Xsr05Mq8S7CR44DAnusZE26F\r\n'
  44. + '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'
  45. + 'a=sctp-port:5000\r\n'
  46. + 'a=max-message-size:262144\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 96 97 98 99 102 121 127 120\r\n'
  70. + 'c=IN IP4 0.0.0.0\r\n'
  71. + 'a=rtpmap:96 VP8/90000\r\n'
  72. + 'a=rtpmap:97 rtx/90000\r\n'
  73. + 'a=rtpmap:98 VP9/90000\r\n'
  74. + 'a=rtpmap:99 rtx/90000\r\n'
  75. + 'a=rtpmap:102 H264/90000\r\n'
  76. + 'a=rtpmap:121 rtx/90000\r\n'
  77. + 'a=rtpmap:127 H264/90000\r\n'
  78. + 'a=rtpmap:120 rtx/90000\r\n'
  79. + 'a=rtcp:9 IN IP4 0.0.0.0\r\n'
  80. + 'a=rtcp-fb:96 ccm fir\r\n'
  81. + 'a=rtcp-fb:96 transport-cc\r\n'
  82. + 'a=rtcp-fb:96 nack\r\n'
  83. + 'a=rtcp-fb:96 nack pli\r\n'
  84. + 'a=rtcp-fb:96 goog-remb\r\n'
  85. + 'a=rtcp-fb:98 ccm fir\r\n'
  86. + 'a=rtcp-fb:98 transport-cc\r\n'
  87. + 'a=rtcp-fb:98 nack\r\n'
  88. + 'a=rtcp-fb:98 nack pli\r\n'
  89. + 'a=rtcp-fb:98 goog-remb\r\n'
  90. + 'a=rtcp-fb:102 ccm fir\r\n'
  91. + 'a=rtcp-fb:102 transport-cc\r\n'
  92. + 'a=rtcp-fb:102 nack\r\n'
  93. + 'a=rtcp-fb:102 nack pli\r\n'
  94. + 'a=rtcp-fb:102 goog-remb\r\n'
  95. + 'a=rtcp-fb:127 ccm fir\r\n'
  96. + 'a=rtcp-fb:127 transport-cc\r\n'
  97. + 'a=rtcp-fb:127 nack\r\n'
  98. + 'a=rtcp-fb:127 nack pli\r\n'
  99. + 'a=rtcp-fb:127 goog-remb\r\n'
  100. + 'a=fmtp:97 apt=96\r\n'
  101. + 'a=fmtp:98 profile-id=0\r\n'
  102. + 'a=fmtp:102 profile-level-id=42e01f;level-asymmetry-allowed=1;packetization-mode=1\r\n'
  103. + 'a=fmtp:121 apt=102\r\n'
  104. + 'a=fmtp:127 profile-level-id=42e01f;level-asymmetry-allowed=1:packetization-mode=0\r\n'
  105. + 'a=fmtp:120 apt=127\r\n'
  106. + 'a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n'
  107. + 'a=setup:passive\r\n'
  108. + 'a=mid:video\r\n'
  109. + 'a=sendrecv\r\n'
  110. + 'a=ice-ufrag:adPg\r\n'
  111. + 'a=ice-pwd:Xsr05Mq8S7CR44DAnusZE26F\r\n'
  112. + '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'
  113. + 'a=ssrc:1757014965 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  114. + 'a=ssrc:1757014965 cname:peDGrDD6WsxUOki/\r\n'
  115. + 'a=rtcp-mux\r\n';
  116. // An sdp video mline with 3 simulcast streams
  117. const simulcastVideoMLineSdp = ''
  118. + 'm=video 9 RTP/SAVPF 100\r\n'
  119. + 'c=IN IP4 0.0.0.0\r\n'
  120. + 'a=rtpmap:100 VP8/90000\r\n'
  121. + 'a=rtcp:9 IN IP4 0.0.0.0\r\n'
  122. + 'a=rtcp-fb:100 ccm fir\r\n'
  123. + 'a=rtcp-fb:100 nack\r\n'
  124. + 'a=rtcp-fb:100 nack pli\r\n'
  125. + 'a=rtcp-fb:100 goog-remb\r\n'
  126. + 'a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n'
  127. + 'a=setup:passive\r\n'
  128. + 'a=mid:video\r\n'
  129. + 'a=sendrecv\r\n'
  130. + 'a=ice-ufrag:adPg\r\n'
  131. + 'a=ice-pwd:Xsr05Mq8S7CR44DAnusZE26F\r\n'
  132. + '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'
  133. + 'a=ssrc:1757014965 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  134. + 'a=ssrc:1757014965 cname:peDGrDD6WsxUOki/\r\n'
  135. + 'a=ssrc:1479742055 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  136. + 'a=ssrc:1479742055 cname:peDGrDD6WsxUOki/\r\n'
  137. + 'a=ssrc:1089111804 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  138. + 'a=ssrc:1089111804 cname:peDGrDD6WsxUOki/\r\n'
  139. + 'a=ssrc-group:SIM 1757014965 1479742055 1089111804\r\n'
  140. + 'a=rtcp-mux\r\n';
  141. // An sdp video mline with a single video stream and a
  142. // corresponding rtx stream
  143. const rtxVideoMLineSdp = ''
  144. + 'm=video 9 RTP/SAVPF 100 96\r\n'
  145. + 'c=IN IP4 0.0.0.0\r\n'
  146. + 'a=rtpmap:100 VP8/90000\r\n'
  147. + 'a=fmtp:96 apt=100\r\n'
  148. + 'a=rtcp:9 IN IP4 0.0.0.0\r\n'
  149. + 'a=rtcp-fb:100 ccm fir\r\n'
  150. + 'a=rtcp-fb:100 nack\r\n'
  151. + 'a=rtcp-fb:100 nack pli\r\n'
  152. + 'a=rtcp-fb:100 goog-remb\r\n'
  153. + 'a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n'
  154. + 'a=setup:passive\r\n'
  155. + 'a=mid:video\r\n'
  156. + 'a=sendrecv\r\n'
  157. + 'a=ice-ufrag:adPg\r\n'
  158. + 'a=ice-pwd:Xsr05Mq8S7CR44DAnusZE26F\r\n'
  159. + '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'
  160. + 'a=ssrc:1757014965 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  161. + 'a=ssrc:1757014965 cname:peDGrDD6WsxUOki/\r\n'
  162. + 'a=ssrc:984899560 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  163. + 'a=ssrc:984899560 cname:peDGrDD6WsxUOki/\r\n'
  164. + 'a=ssrc-group:FID 1757014965 984899560\r\n'
  165. + 'a=rtcp-mux\r\n';
  166. // An sdp video mline with 3 simulcast streams and 3 rtx streams
  167. const simulcastRtxVideoMLineSdp = ''
  168. + 'm=video 9 RTP/SAVPF 100 96\r\n'
  169. + 'c=IN IP4 0.0.0.0\r\n'
  170. + 'a=rtpmap:100 VP8/90000\r\n'
  171. + 'a=fmtp:96 apt=100\r\n'
  172. + 'a=rtcp:9 IN IP4 0.0.0.0\r\n'
  173. + 'a=rtcp-fb:100 ccm fir\r\n'
  174. + 'a=rtcp-fb:100 nack\r\n'
  175. + 'a=rtcp-fb:100 nack pli\r\n'
  176. + 'a=rtcp-fb:100 goog-remb\r\n'
  177. + 'a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n'
  178. + 'a=setup:passive\r\n'
  179. + 'a=mid:video\r\n'
  180. + 'a=sendonly\r\n'
  181. + 'a=ice-ufrag:adPg\r\n'
  182. + 'a=ice-pwd:Xsr05Mq8S7CR44DAnusZE26F\r\n'
  183. + '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'
  184. + 'a=ssrc:1757014965 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  185. + 'a=ssrc:1757014965 cname:peDGrDD6WsxUOki/\r\n'
  186. + 'a=ssrc:1479742055 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  187. + 'a=ssrc:1479742055 cname:peDGrDD6WsxUOki/\r\n'
  188. + 'a=ssrc:1089111804 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  189. + 'a=ssrc:1089111804 cname:peDGrDD6WsxUOki/\r\n'
  190. + 'a=ssrc:855213044 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  191. + 'a=ssrc:855213044 cname:peDGrDD6WsxUOki/\r\n'
  192. + 'a=ssrc:984899560 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  193. + 'a=ssrc:984899560 cname:peDGrDD6WsxUOki/\r\n'
  194. + 'a=ssrc:2963867077 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  195. + 'a=ssrc:2963867077 cname:peDGrDD6WsxUOki/\r\n'
  196. + 'a=ssrc-group:FID 1757014965 984899560\r\n'
  197. + 'a=ssrc-group:FID 1479742055 855213044\r\n'
  198. + 'a=ssrc-group:FID 1089111804 2963867077\r\n'
  199. + 'a=ssrc-group:SIM 1757014965 1479742055 1089111804\r\n'
  200. + 'a=rtcp-mux\r\n';
  201. const simulcastRtxVideoMLineSdpReplacedTrack = ''
  202. + 'm=video 9 RTP/SAVPF 100 96\r\n'
  203. + 'c=IN IP4 0.0.0.0\r\n'
  204. + 'a=rtpmap:100 VP8/90000\r\n'
  205. + 'a=fmtp:96 apt=100\r\n'
  206. + 'a=rtcp:9 IN IP4 0.0.0.0\r\n'
  207. + 'a=rtcp-fb:100 ccm fir\r\n'
  208. + 'a=rtcp-fb:100 nack\r\n'
  209. + 'a=rtcp-fb:100 nack pli\r\n'
  210. + 'a=rtcp-fb:100 goog-remb\r\n'
  211. + 'a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n'
  212. + 'a=setup:passive\r\n'
  213. + 'a=mid:video\r\n'
  214. + 'a=sendonly\r\n'
  215. + 'a=ice-ufrag:adPg\r\n'
  216. + 'a=ice-pwd:Xsr05Mq8S7CR44DAnusZE26F\r\n'
  217. + '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'
  218. + 'a=ssrc:1234567890 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d abcdesfgh\r\n'
  219. + 'a=ssrc:1234567890 cname:peDGrDD6WsxUOki/\r\n'
  220. + 'a=ssrc:2345678901 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d abcdesfgh\r\n'
  221. + 'a=ssrc:2345678901 cname:peDGrDD6WsxUOki/\r\n'
  222. + 'a=ssrc:3456789012 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d abcdesfgh\r\n'
  223. + 'a=ssrc:3456789012 cname:peDGrDD6WsxUOki/\r\n'
  224. + 'a=ssrc:4567890123 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d abcdesfgh\r\n'
  225. + 'a=ssrc:4567890123 cname:peDGrDD6WsxUOki/\r\n'
  226. + 'a=ssrc:5678901234 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d abcdesfgh\r\n'
  227. + 'a=ssrc:5678901234 cname:peDGrDD6WsxUOki/\r\n'
  228. + 'a=ssrc:6789012345 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d abcdesfgh\r\n'
  229. + 'a=ssrc:6789012345 cname:peDGrDD6WsxUOki/\r\n'
  230. + 'a=ssrc-group:FID 1234567890 2345678901\r\n'
  231. + 'a=ssrc-group:FID 3456789012 4567890123\r\n'
  232. + 'a=ssrc-group:FID 5678901234 6789012345\r\n'
  233. + 'a=ssrc-group:SIM 1757014965 3456789012 5678901234\r\n'
  234. + 'a=rtcp-mux\r\n';
  235. // An sdp video mline with 1 video ssrc, 1 video rtx ssrc and one flexfec ssrc
  236. const flexFecVideoMLineSdp = ''
  237. + 'm=video 9 RTP/SAVPF 100 107 101 96 99 97 109\r\n'
  238. + 'c=IN IP4 0.0.0.0\r\n'
  239. + 'a=rtcp:9 IN IP4 0.0.0.0\r\n'
  240. + 'a=ice-ufrag:aLBh\r\n'
  241. + 'a=ice-pwd:7IeqrWG5ryCW2X47Lso8XYdK\r\n'
  242. + 'a=ice-options:trickle\r\n'
  243. + 'a=fingerprint:sha-256 78:3C:F9:96:85:FB:20:25:F8:2F:AB:37:8B:8B:17:29:EF:54:7B:7C:17:2E:90:02:8A:A1:8F:A7:F9:C5:F2:90\r\n'
  244. + 'a=setup:active\r\n'
  245. + 'a=mid:video\r\n'
  246. + 'a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n'
  247. + 'a=sendrecv\r\n'
  248. + 'a=rtcp-mux\r\n'
  249. + 'a=rtpmap:100 VP8/90000\r\n'
  250. + 'a=rtcp-fb:100 goog-remb\r\n'
  251. + 'a=rtcp-fb:100 ccm fir\r\n'
  252. + 'a=rtcp-fb:100 nack\r\n'
  253. + 'a=rtcp-fb:100 nack pli\r\n'
  254. + 'a=rtpmap:107 h264/90000\r\n'
  255. + 'a=rtcp-fb:107 goog-remb\r\n'
  256. + 'a=rtcp-fb:107 ccm fir\r\n'
  257. + 'a=rtcp-fb:107 nack\r\n'
  258. + 'a=rtcp-fb:107 nack pli\r\n'
  259. + 'a=fmtp:107 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\n'
  260. + 'a=rtpmap:101 VP9/90000\r\n'
  261. + 'a=rtcp-fb:101 goog-remb\r\n'
  262. + 'a=rtcp-fb:101 ccm fir\r\n'
  263. + 'a=rtcp-fb:101 nack\r\n'
  264. + 'a=rtcp-fb:101 nack pli\r\n'
  265. + 'a=rtpmap:96 rtx/90000\r\n'
  266. + 'a=fmtp:96 apt=100\r\n'
  267. + 'a=rtpmap:99 rtx/90000\r\n'
  268. + 'a=fmtp:99 apt=107\r\n'
  269. + 'a=rtpmap:97 rtx/90000\r\n'
  270. + 'a=fmtp:97 apt=101\r\n'
  271. + 'a=rtpmap:109 flexfec-03/90000\r\n'
  272. + 'a=fmtp:109 repair-window=10000000\r\n'
  273. + 'a=ssrc-group:FID 2864950112 2236303754\r\n'
  274. + 'a=ssrc-group:FEC-FR 2864950112 116623191\r\n'
  275. + 'a=ssrc:2864950112 cname:mT86hcsCZwQBPh6R\r\n'
  276. + 'a=ssrc:2864950112 msid:a2548ae2-32e8-4b09-89bc-b11f3e49ac5a b3e3d760-6b1b-48bd-8519-9d6261311d28\r\n'
  277. + 'a=ssrc:2864950112 mslabel:a2548ae2-32e8-4b09-89bc-b11f3e49ac5a\r\n'
  278. + 'a=ssrc:2864950112 label:b3e3d760-6b1b-48bd-8519-9d6261311d28\r\n'
  279. + 'a=ssrc:2236303754 cname:mT86hcsCZwQBPh6R\r\n'
  280. + 'a=ssrc:2236303754 msid:a2548ae2-32e8-4b09-89bc-b11f3e49ac5a b3e3d760-6b1b-48bd-8519-9d6261311d28\r\n'
  281. + 'a=ssrc:2236303754 mslabel:a2548ae2-32e8-4b09-89bc-b11f3e49ac5a\r\n'
  282. + 'a=ssrc:2236303754 label:b3e3d760-6b1b-48bd-8519-9d6261311d28\r\n'
  283. + 'a=ssrc:116623191 cname:mT86hcsCZwQBPh6R\r\n'
  284. + 'a=ssrc:116623191 msid:a2548ae2-32e8-4b09-89bc-b11f3e49ac5a b3e3d760-6b1b-48bd-8519-9d6261311d28\r\n'
  285. + 'a=ssrc:116623191 mslabel:a2548ae2-32e8-4b09-89bc-b11f3e49ac5a\r\n'
  286. + 'a=ssrc:116623191 label:b3e3d760-6b1b-48bd-8519-9d6261311d28\r\n';
  287. const recvOnlyAudioMline = ''
  288. + 'm=audio 54405 RTP/SAVPF 111 103 104 126\r\n'
  289. + 'c=IN IP4 172.29.32.39\r\n'
  290. + 'a=rtpmap:111 opus/48000/2\r\n'
  291. + 'a=rtpmap:103 ISAC/16000\r\n'
  292. + 'a=rtpmap:104 ISAC/32000\r\n'
  293. + 'a=rtpmap:126 telephone-event/8000\r\n'
  294. + 'a=fmtp:111 minptime=10;useinbandfec=1\r\n'
  295. + 'a=rtcp:9 IN IP4 0.0.0.0\r\n'
  296. + 'a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\n'
  297. + 'a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n'
  298. + 'a=setup:passive\r\n'
  299. + 'a=mid:audio\r\n'
  300. + 'a=recvonly\r\n'
  301. + 'a=ice-ufrag:adPg\r\n'
  302. + 'a=ice-pwd:Xsr05Mq8S7CR44DAnusZE26F\r\n'
  303. + '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'
  304. + 'a=candidate:1581043602 1 udp 2122260223 172.29.32.39 54405 typ host generation 0\r\n'
  305. + 'a=ssrc:124723944 cname:peDGrDD6WsxUOki\r\n'
  306. + 'a=rtcp-mux\r\n';
  307. const recvOnlyVideoMline = ''
  308. + 'm=video 9 RTP/SAVPF 96 97 98 99 102 121 127 120\r\n'
  309. + 'c=IN IP4 0.0.0.0\r\n'
  310. + 'a=rtpmap:96 VP8/90000\r\n'
  311. + 'a=rtpmap:97 rtx/90000\r\n'
  312. + 'a=rtpmap:98 VP9/90000\r\n'
  313. + 'a=rtpmap:99 rtx/90000\r\n'
  314. + 'a=rtpmap:102 H264/90000\r\n'
  315. + 'a=rtpmap:121 rtx/90000\r\n'
  316. + 'a=rtpmap:127 H264/90000\r\n'
  317. + 'a=rtpmap:120 rtx/90000\r\n'
  318. + 'a=rtcp:9 IN IP4 0.0.0.0\r\n'
  319. + 'a=rtcp-fb:96 ccm fir\r\n'
  320. + 'a=rtcp-fb:96 transport-cc\r\n'
  321. + 'a=rtcp-fb:96 nack\r\n'
  322. + 'a=rtcp-fb:96 nack pli\r\n'
  323. + 'a=rtcp-fb:96 goog-remb\r\n'
  324. + 'a=rtcp-fb:98 ccm fir\r\n'
  325. + 'a=rtcp-fb:98 transport-cc\r\n'
  326. + 'a=rtcp-fb:98 nack\r\n'
  327. + 'a=rtcp-fb:98 nack pli\r\n'
  328. + 'a=rtcp-fb:98 goog-remb\r\n'
  329. + 'a=rtcp-fb:102 ccm fir\r\n'
  330. + 'a=rtcp-fb:102 transport-cc\r\n'
  331. + 'a=rtcp-fb:102 nack\r\n'
  332. + 'a=rtcp-fb:102 nack pli\r\n'
  333. + 'a=rtcp-fb:102 goog-remb\r\n'
  334. + 'a=rtcp-fb:127 ccm fir\r\n'
  335. + 'a=rtcp-fb:127 transport-cc\r\n'
  336. + 'a=rtcp-fb:127 nack\r\n'
  337. + 'a=rtcp-fb:127 nack pli\r\n'
  338. + 'a=rtcp-fb:127 goog-remb\r\n'
  339. + 'a=fmtp:97 apt=96\r\n'
  340. + 'a=fmtp:98 profile-id=0\r\n'
  341. + 'a=fmtp:102 profile-level-id=42e01f;level-asymmetry-allowed=1;packetization-mode=1\r\n'
  342. + 'a=fmtp:121 apt=102\r\n'
  343. + 'a=fmtp:127 profile-level-id=42e01f;level-asymmetry-allowed=1:packetization-mode=0\r\n'
  344. + 'a=fmtp:120 apt=127\r\n'
  345. + 'a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n'
  346. + 'a=setup:passive\r\n'
  347. + 'a=mid:video\r\n'
  348. + 'a=recvonly\r\n'
  349. + 'a=ice-ufrag:adPg\r\n'
  350. + 'a=ice-pwd:Xsr05Mq8S7CR44DAnusZE26F\r\n'
  351. + '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'
  352. + 'a=ssrc:1757014965 cname:peDGrDD6WsxUOki\r\n'
  353. + 'a=rtcp-mux\r\n';
  354. const videoMlineFF = ''
  355. + 'm=video 9 RTP/SAVPF 100 96\r\n'
  356. + 'c=IN IP4 0.0.0.0\r\n'
  357. + 'a=rtpmap:100 VP8/90000\r\n'
  358. + 'a=fmtp:96 apt=100\r\n'
  359. + 'a=rtcp:9 IN IP4 0.0.0.0\r\n'
  360. + 'a=rtcp-fb:100 ccm fir\r\n'
  361. + 'a=rtcp-fb:100 nack\r\n'
  362. + 'a=rtcp-fb:100 nack pli\r\n'
  363. + 'a=rtcp-fb:100 goog-remb\r\n'
  364. + 'a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n'
  365. + 'a=setup:passive\r\n'
  366. + 'a=mid:video\r\n'
  367. + 'a=sendrecv\r\n'
  368. + 'a=ice-ufrag:adPg\r\n'
  369. + 'a=ice-pwd:Xsr05Mq8S7CR44DAnusZE26F\r\n'
  370. + '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'
  371. + 'a=ssrc:984899560 msid:- bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  372. + 'a=ssrc:984899560 cname:peDGrDD6WsxUOki/\r\n'
  373. + 'a=rtcp-mux\r\n';
  374. const videoLineP2pFF = ''
  375. + 'm=video 9 RTP/SAVPF 100 96\r\n'
  376. + 'c=IN IP4 0.0.0.0\r\n'
  377. + 'a=rtpmap:100 VP8/90000\r\n'
  378. + 'a=fmtp:96 apt=100\r\n'
  379. + 'a=rtcp:9 IN IP4 0.0.0.0\r\n'
  380. + 'a=rtcp-fb:100 ccm fir\r\n'
  381. + 'a=rtcp-fb:100 nack\r\n'
  382. + 'a=rtcp-fb:100 nack pli\r\n'
  383. + 'a=rtcp-fb:100 goog-remb\r\n'
  384. + 'a=msid:6149665b-f876-4a28-ac10-f92fc308b01a 5d5d4fbd-edbb-404f-8285-2543a401c426\r\n'
  385. + 'a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n'
  386. + 'a=setup:passive\r\n'
  387. + 'a=mid:video\r\n'
  388. + 'a=sendrecv\r\n'
  389. + 'a=ice-ufrag:adPg\r\n'
  390. + 'a=ice-pwd:Xsr05Mq8S7CR44DAnusZE26F\r\n'
  391. + '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'
  392. + 'a=ssrc:984899560 cname:peDGrDD6WsxUOki/\r\n'
  393. + 'a=rtcp-mux\r\n';
  394. // An sdp video mline with 3 simulcast streams
  395. const simulcastVideoMLineNoRtxSdp = ''
  396. + 'm=video 9 RTP/SAVPF 100\r\n'
  397. + 'c=IN IP4 0.0.0.0\r\n'
  398. + 'a=rtpmap:100 VP8/90000\r\n'
  399. + 'a=rtcp:9 IN IP4 0.0.0.0\r\n'
  400. + 'a=rtcp-fb:100 ccm fir\r\n'
  401. + 'a=rtcp-fb:100 nack\r\n'
  402. + 'a=rtcp-fb:100 nack pli\r\n'
  403. + 'a=rtcp-fb:100 goog-remb\r\n'
  404. + 'a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n'
  405. + 'a=setup:passive\r\n'
  406. + 'a=mid:video\r\n'
  407. + 'a=sendonly\r\n'
  408. + 'a=ice-ufrag:adPg\r\n'
  409. + 'a=ice-pwd:Xsr05Mq8S7CR44DAnusZE26F\r\n'
  410. + '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'
  411. + 'a=ssrc:1757014965 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  412. + 'a=ssrc:1757014965 cname:peDGrDD6WsxUOki/\r\n'
  413. + 'a=ssrc:1479742055 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  414. + 'a=ssrc:1479742055 cname:peDGrDD6WsxUOki/\r\n'
  415. + 'a=ssrc:1089111804 msid:0836cc8e-a7bb-47e9-affb-0599414bc56d bdbd2c0a-7959-4578-8db5-9a6a1aec4ecf\r\n'
  416. + 'a=ssrc:1089111804 cname:peDGrDD6WsxUOki/\r\n'
  417. + 'a=ssrc-group:SIM 1757014965 1479742055 1089111804\r\n'
  418. + 'a=rtcp-mux\r\n';
  419. // A full sdp string representing a client doing simulcast
  420. const simulcastSdpStr = baseSessionSdp + baseAudioMLineSdp + simulcastVideoMLineSdp + baseDataMLineSdp;
  421. // A full sdp string representing a remote client doing simucast when RTX is not negotiated with the jvb.
  422. const simulcastNoRtxSdpStr = baseSessionSdp + baseAudioMLineSdp + simulcastVideoMLineNoRtxSdp;
  423. // A full sdp string representing a client doing simulcast and rtx
  424. const simulcastRtxSdpStr = baseSessionSdp + baseAudioMLineSdp + simulcastRtxVideoMLineSdp + baseDataMLineSdp;
  425. // A full sdp string representing a client doing simulcast and rtx with a different track and SSRCs.
  426. const simulcastRtxSdpTrackReplaced = baseSessionSdp + baseAudioMLineSdp + simulcastRtxVideoMLineSdpReplacedTrack;
  427. // A full sdp string representing a client doing a single video stream
  428. const plainVideoSdpStr = baseSessionSdp + baseAudioMLineSdp + plainVideoMLineSdp + baseDataMLineSdp;
  429. // A full sdp string representing a client doing a single video stream with rtx
  430. const rtxVideoSdpStr = baseSessionSdp + baseAudioMLineSdp + rtxVideoMLineSdp + baseDataMLineSdp;
  431. // A full sdp string representing a client doing a single video stream with multiple codec options
  432. const multiCodecVideoSdpStr = baseSessionSdp + baseAudioMLineSdp + multiCodecVideoMLine + baseDataMLineSdp;
  433. // A full sdp string representing a client doing a single video stream with flexfec
  434. const flexFecSdpStr = baseSessionSdp + baseAudioMLineSdp + flexFecVideoMLineSdp + baseDataMLineSdp;
  435. // A full sdp string representing a client that doesn't have local sources added on Firefox.
  436. const recvOnlySdpStr = baseSessionSdp + recvOnlyAudioMline + recvOnlyVideoMline;
  437. // A full sdp string representing a Firefox client with msid set to '-'.
  438. const sdpFirefoxStr = baseSessionSdp + baseAudioMLineSdp + videoMlineFF;
  439. // A full sdp string representing a Firefox client with missing msid attribute.
  440. const sdpFirefoxP2pStr = baseSessionSdp + baseAudioMLineSdp + videoLineP2pFF;
  441. export default {
  442. get simulcastSdp() {
  443. return transform.parse(simulcastSdpStr);
  444. },
  445. get simulcastNoRtxSdp() {
  446. return transform.parse(simulcastNoRtxSdpStr);
  447. },
  448. get simulcastRtxSdp() {
  449. return transform.parse(simulcastRtxSdpStr);
  450. },
  451. get simulcastRtxSdpReplacedTrack() {
  452. return transform.parse(simulcastRtxSdpTrackReplaced);
  453. },
  454. get plainVideoSdp() {
  455. return transform.parse(plainVideoSdpStr);
  456. },
  457. get rtxVideoSdp() {
  458. return transform.parse(rtxVideoSdpStr);
  459. },
  460. get multiCodecVideoSdp() {
  461. return transform.parse(multiCodecVideoSdpStr);
  462. },
  463. get flexFecSdp() {
  464. return transform.parse(flexFecSdpStr);
  465. },
  466. get recvOnlySdp() {
  467. return transform.parse(recvOnlySdpStr);
  468. },
  469. get firefoxSdp() {
  470. return transform.parse(sdpFirefoxStr);
  471. },
  472. get firefoxP2pSdp() {
  473. return transform.parse(sdpFirefoxP2pStr);
  474. }
  475. };
  476. /* eslint-enable max-len*/