@vtx/player 1.7.13 → 1.7.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/README.md +2 -2
  2. package/lib/api/fetch.js +62 -91
  3. package/lib/api/fetch.js.map +1 -1
  4. package/lib/api/index.js +18 -63
  5. package/lib/api/index.js.map +1 -1
  6. package/lib/api/types.d.ts +5 -5
  7. package/lib/bd/PlayerManager.js +38 -68
  8. package/lib/bd/PlayerManager.js.map +1 -1
  9. package/lib/bill-player/index.d.ts +1 -1
  10. package/lib/bill-player/index.js +66 -121
  11. package/lib/bill-player/index.js.map +1 -1
  12. package/lib/bill-player/style/css.js +0 -9
  13. package/lib/bill-player/style/css.js.map +1 -1
  14. package/lib/bill-player/style/index.js +0 -9
  15. package/lib/bill-player/style/index.js.map +1 -1
  16. package/lib/bill-player/style/index.less +297 -297
  17. package/lib/components/set-tag-video/index.js +6 -34
  18. package/lib/components/set-tag-video/index.js.map +1 -1
  19. package/lib/components/set-tag-video/style/css.js.map +1 -1
  20. package/lib/components/set-tag-video/style/index.js.map +1 -1
  21. package/lib/components/set-tag-video/style/index.less +125 -125
  22. package/lib/components/split-screen/index.d.ts +1 -1
  23. package/lib/components/split-screen/index.js +3 -14
  24. package/lib/components/split-screen/index.js.map +1 -1
  25. package/lib/components/split-screen/style/css.js.map +1 -1
  26. package/lib/components/split-screen/style/index.js.map +1 -1
  27. package/lib/components/tag-video/index.js +10 -38
  28. package/lib/components/tag-video/index.js.map +1 -1
  29. package/lib/components/tag-video/style/css.js.map +1 -1
  30. package/lib/components/tag-video/style/index.js.map +1 -1
  31. package/lib/components/tag-video/style/index.less +69 -69
  32. package/lib/components/video-scale/index.d.ts +1 -1
  33. package/lib/components/video-scale/index.js +2 -9
  34. package/lib/components/video-scale/index.js.map +1 -1
  35. package/lib/components/video-scale/style/css.js.map +1 -1
  36. package/lib/components/video-scale/style/index.js.map +1 -1
  37. package/lib/context/index.js +0 -4
  38. package/lib/context/index.js.map +1 -1
  39. package/lib/controls/index.d.ts +11 -11
  40. package/lib/controls/index.js +34 -99
  41. package/lib/controls/index.js.map +1 -1
  42. package/lib/controls/style/css.js +0 -5
  43. package/lib/controls/style/css.js.map +1 -1
  44. package/lib/controls/style/index.js +0 -5
  45. package/lib/controls/style/index.js.map +1 -1
  46. package/lib/controls/style/index.less +188 -188
  47. package/lib/h264/PlayerManager.js +18 -27
  48. package/lib/h264/PlayerManager.js.map +1 -1
  49. package/lib/history-control/index.d.ts +2 -2
  50. package/lib/history-control/index.js +61 -121
  51. package/lib/history-control/index.js.map +1 -1
  52. package/lib/history-control/style/css.js +0 -6
  53. package/lib/history-control/style/css.js.map +1 -1
  54. package/lib/history-control/style/index.js +0 -6
  55. package/lib/history-control/style/index.js.map +1 -1
  56. package/lib/history-control/style/index.less +252 -252
  57. package/lib/history-control-v2/components/grid-item/index.js +38 -77
  58. package/lib/history-control-v2/components/grid-item/index.js.map +1 -1
  59. package/lib/history-control-v2/components/panel/index.js +44 -114
  60. package/lib/history-control-v2/components/panel/index.js.map +1 -1
  61. package/lib/history-control-v2/context.js +0 -2
  62. package/lib/history-control-v2/context.js.map +1 -1
  63. package/lib/history-control-v2/index.d.ts +4 -4
  64. package/lib/history-control-v2/index.js +97 -166
  65. package/lib/history-control-v2/index.js.map +1 -1
  66. package/lib/history-control-v2/style/css.js +0 -10
  67. package/lib/history-control-v2/style/css.js.map +1 -1
  68. package/lib/history-control-v2/style/index.js +0 -10
  69. package/lib/history-control-v2/style/index.js.map +1 -1
  70. package/lib/history-control-v2/style/index.less +437 -437
  71. package/lib/history-control-v2/utils.js +1 -21
  72. package/lib/history-control-v2/utils.js.map +1 -1
  73. package/lib/history-player/index.d.ts +1 -1
  74. package/lib/history-player/index.js +146 -205
  75. package/lib/history-player/index.js.map +1 -1
  76. package/lib/history-player/style/css.js +0 -3
  77. package/lib/history-player/style/css.js.map +1 -1
  78. package/lib/history-player/style/index.js +0 -3
  79. package/lib/history-player/style/index.js.map +1 -1
  80. package/lib/history-player/style/index.less +102 -102
  81. package/lib/hooks/useSettings.js +1 -6
  82. package/lib/hooks/useSettings.js.map +1 -1
  83. package/lib/icc/PlayerManager.js +26 -57
  84. package/lib/icc/PlayerManager.js.map +1 -1
  85. package/lib/icc/api.d.ts +0 -68
  86. package/lib/icc/api.js +2 -16
  87. package/lib/icc/api.js.map +1 -1
  88. package/lib/icons/index.d.ts +36 -36
  89. package/lib/icons/index.js +23 -171
  90. package/lib/icons/index.js.map +1 -1
  91. package/lib/icons/index.less +32 -32
  92. package/lib/index.js +0 -10
  93. package/lib/index.js.map +1 -1
  94. package/lib/live-channel-player/index.d.ts +1 -1
  95. package/lib/live-channel-player/index.js +31 -67
  96. package/lib/live-channel-player/index.js.map +1 -1
  97. package/lib/live-channel-player/style/css.js +0 -1
  98. package/lib/live-channel-player/style/css.js.map +1 -1
  99. package/lib/live-channel-player/style/index.js +0 -1
  100. package/lib/live-channel-player/style/index.js.map +1 -1
  101. package/lib/live-control/index.d.ts +2 -2
  102. package/lib/live-control/index.js +35 -86
  103. package/lib/live-control/index.js.map +1 -1
  104. package/lib/live-control/style/css.js +0 -4
  105. package/lib/live-control/style/css.js.map +1 -1
  106. package/lib/live-control/style/index.js +0 -4
  107. package/lib/live-control/style/index.js.map +1 -1
  108. package/lib/live-control/style/index.less +99 -99
  109. package/lib/live-control-v2/index.d.ts +3 -3
  110. package/lib/live-control-v2/index.js +108 -141
  111. package/lib/live-control-v2/index.js.map +1 -1
  112. package/lib/live-control-v2/style/css.js +0 -7
  113. package/lib/live-control-v2/style/css.js.map +1 -1
  114. package/lib/live-control-v2/style/index.js +0 -7
  115. package/lib/live-control-v2/style/index.js.map +1 -1
  116. package/lib/live-control-v2/style/index.less +192 -192
  117. package/lib/live-player/index.js +95 -136
  118. package/lib/live-player/index.js.map +1 -1
  119. package/lib/live-player/style/css.js +0 -2
  120. package/lib/live-player/style/css.js.map +1 -1
  121. package/lib/live-player/style/index.js +0 -2
  122. package/lib/live-player/style/index.js.map +1 -1
  123. package/lib/live-player/style/index.less +75 -75
  124. package/lib/player/index.d.ts +1 -1
  125. package/lib/player/index.js +79 -244
  126. package/lib/player/index.js.map +1 -1
  127. package/lib/rsl/PlayerManager.js +18 -64
  128. package/lib/rsl/PlayerManager.js.map +1 -1
  129. package/lib/typings/@vtx/utils/index.d.ts +28 -28
  130. package/lib/typings/h5player.d.ts +146 -146
  131. package/lib/typings/webrtcplayer.d.ts +56 -56
  132. package/lib/typings/wsplayer.d.ts +99 -99
  133. package/lib/utils/index.d.ts +1 -1
  134. package/lib/utils/index.js +12 -91
  135. package/lib/utils/index.js.map +1 -1
  136. package/lib/vite-env.d.ts +1 -1
  137. package/lib/vtxHls/PlayerManager.js +6 -20
  138. package/lib/vtxHls/PlayerManager.js.map +1 -1
  139. package/lib/vtxHls/WhepManager.js +9 -72
  140. package/lib/vtxHls/WhepManager.js.map +1 -1
  141. package/lib/webrtc/PlayerManager.js +28 -41
  142. package/lib/webrtc/PlayerManager.js.map +1 -1
  143. package/package.json +125 -125
package/lib/vite-env.d.ts CHANGED
@@ -1 +1 @@
1
- /// <reference types="vite/client" />
1
+ /// <reference types="vite/client" />
@@ -4,30 +4,26 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports["default"] = void 0;
7
-
7
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
8
8
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
9
-
10
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
11
-
9
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
12
10
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
13
-
11
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
12
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
14
13
  var VtxHlsPlayerManager = /*#__PURE__*/function () {
15
14
  function VtxHlsPlayerManager(opt) {
16
15
  _classCallCheck(this, VtxHlsPlayerManager);
17
-
18
16
  this.url = opt.url;
19
17
  this.video = opt.video;
20
18
  this.player = null;
21
19
  this.timer = null;
22
20
  this.initPlayer();
23
- } //初始化视频插件
24
-
25
-
21
+ }
22
+ //初始化视频插件
26
23
  _createClass(VtxHlsPlayerManager, [{
27
24
  key: "initPlayer",
28
25
  value: function initPlayer() {
29
26
  var _this = this;
30
-
31
27
  var video = this.video;
32
28
  var hls = new Hls({
33
29
  maxLiveSyncPlaybackRate: 1.5
@@ -38,9 +34,7 @@ var VtxHlsPlayerManager = /*#__PURE__*/function () {
38
34
  _this.player.recoverMediaError();
39
35
  } else if (data.fatal) {
40
36
  _this.timer && clearTimeout(_this.timer);
41
-
42
37
  _this.player.destroy();
43
-
44
38
  _this.timer = setTimeout(function () {
45
39
  return _this.initPlayer(video);
46
40
  }, 300);
@@ -58,7 +52,6 @@ var VtxHlsPlayerManager = /*#__PURE__*/function () {
58
52
  * 倍速播放
59
53
  * @param {number} speed 速率 0.125 0.25 0.5 1 2 4 8 共7种速率
60
54
  */
61
-
62
55
  }, {
63
56
  key: "playSpeed",
64
57
  value: function playSpeed(speed) {
@@ -68,7 +61,6 @@ var VtxHlsPlayerManager = /*#__PURE__*/function () {
68
61
  * 关闭播放器
69
62
  * @param {number} index 可选,关闭指定索引的窗口的播放器,不传则表示关闭所有播放器
70
63
  */
71
-
72
64
  }, {
73
65
  key: "close",
74
66
  value: function close() {
@@ -86,7 +78,6 @@ var VtxHlsPlayerManager = /*#__PURE__*/function () {
86
78
  /**
87
79
  * 设置全屏
88
80
  */
89
-
90
81
  }, {
91
82
  key: "setFullScreen",
92
83
  value: function setFullScreen() {
@@ -96,7 +87,6 @@ var VtxHlsPlayerManager = /*#__PURE__*/function () {
96
87
  * 设置窗口自适应还是拉伸
97
88
  * @param {string} playerAdapter selfAdaption 自适应 | stretching 拉伸
98
89
  */
99
-
100
90
  }, {
101
91
  key: "setPlayerAdapter",
102
92
  value: function setPlayerAdapter(playerAdapter) {
@@ -106,7 +96,6 @@ var VtxHlsPlayerManager = /*#__PURE__*/function () {
106
96
  * 控制视频播放器显示的路数: 1 4 9 16 25,不会超过最大显示路数
107
97
  * @param {number} number
108
98
  */
109
-
110
99
  }, {
111
100
  key: "setPlayerNum",
112
101
  value: function setPlayerNum(number) {
@@ -116,17 +105,14 @@ var VtxHlsPlayerManager = /*#__PURE__*/function () {
116
105
  * 设置选中的播放器的索引
117
106
  * @param {number} index
118
107
  */
119
-
120
108
  }, {
121
109
  key: "setSelectIndex",
122
110
  value: function setSelectIndex(index) {
123
111
  this.player.setSelectIndex(index);
124
112
  }
125
113
  }]);
126
-
127
114
  return VtxHlsPlayerManager;
128
115
  }();
129
-
130
116
  var _default = VtxHlsPlayerManager;
131
117
  exports["default"] = _default;
132
118
  //# sourceMappingURL=PlayerManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlayerManager.js","names":["VtxHlsPlayerManager","opt","url","video","player","timer","initPlayer","hls","Hls","maxLiveSyncPlaybackRate","on","Events","ERROR","evt","data","type","ErrorTypes","MEDIA_ERROR","recoverMediaError","fatal","clearTimeout","destroy","setTimeout","MEDIA_ATTACHED","loadSource","MANIFEST_PARSED","play","attachMedia","speed","recordPlayer","playSpeed","setSize","fullScreen","playerAdapter","setPlayerAdapter","number","setPlayerNum","index","setSelectIndex"],"sources":["vtxHls/PlayerManager.js"],"sourcesContent":["class VtxHlsPlayerManager {\n constructor(opt) {\n this.url = opt.url;\n this.video = opt.video;\n this.player = null;\n this.timer = null;\n this.initPlayer();\n }\n //初始化视频插件\n initPlayer() {\n const video = this.video;\n const hls = new Hls({\n maxLiveSyncPlaybackRate: 1.5,\n });\n this.player = hls;\n this.player.on(Hls.Events.ERROR, (evt, data) => {\n if (data.type === Hls.ErrorTypes.MEDIA_ERROR) {\n this.player.recoverMediaError();\n }\n else if (data.fatal) {\n this.timer && clearTimeout(this.timer);\n this.player.destroy();\n this.timer = setTimeout(() => this.initPlayer(video), 300);\n }\n });\n this.player.on(Hls.Events.MEDIA_ATTACHED, () => {\n this.player.loadSource(`${this.url}index.m3u8`);\n });\n this.player.on(Hls.Events.MANIFEST_PARSED, () => {\n video.play();\n });\n this.player.attachMedia(video);\n }\n /**\n * 倍速播放\n * @param {number} speed 速率 0.125 0.25 0.5 1 2 4 8 共7种速率\n */\n playSpeed(speed) {\n this.recordPlayer && this.recordPlayer.playSpeed(speed);\n }\n /**\n * 关闭播放器\n * @param {number} index 可选,关闭指定索引的窗口的播放器,不传则表示关闭所有播放器\n */\n close() {\n if (this.player) {\n this.player.destroy();\n this.player = null;\n this.timer = null;\n }\n }\n resize() {\n this.player && this.player.setSize();\n }\n /**\n * 设置全屏\n */\n setFullScreen() {\n this.player.fullScreen();\n }\n /**\n * 设置窗口自适应还是拉伸\n * @param {string} playerAdapter selfAdaption 自适应 | stretching 拉伸\n */\n setPlayerAdapter(playerAdapter) {\n this.player.setPlayerAdapter(playerAdapter);\n }\n /**\n * 控制视频播放器显示的路数: 1 4 9 16 25,不会超过最大显示路数\n * @param {number} number\n */\n setPlayerNum(number) {\n this.player.setPlayerNum(number);\n }\n /**\n * 设置选中的播放器的索引\n * @param {number} index\n */\n setSelectIndex(index) {\n this.player.setSelectIndex(index);\n }\n}\nexport default VtxHlsPlayerManager;\n"],"mappings":";;;;;;;;;;;;;IAAMA,mB;EACF,6BAAYC,GAAZ,EAAiB;IAAA;;IACb,KAAKC,GAAL,GAAWD,GAAG,CAACC,GAAf;IACA,KAAKC,KAAL,GAAaF,GAAG,CAACE,KAAjB;IACA,KAAKC,MAAL,GAAc,IAAd;IACA,KAAKC,KAAL,GAAa,IAAb;IACA,KAAKC,UAAL;EACH,C,CACD;;;;;WACA,sBAAa;MAAA;;MACT,IAAMH,KAAK,GAAG,KAAKA,KAAnB;MACA,IAAMI,GAAG,GAAG,IAAIC,GAAJ,CAAQ;QAChBC,uBAAuB,EAAE;MADT,CAAR,CAAZ;MAGA,KAAKL,MAAL,GAAcG,GAAd;MACA,KAAKH,MAAL,CAAYM,EAAZ,CAAeF,GAAG,CAACG,MAAJ,CAAWC,KAA1B,EAAiC,UAACC,GAAD,EAAMC,IAAN,EAAe;QAC5C,IAAIA,IAAI,CAACC,IAAL,KAAcP,GAAG,CAACQ,UAAJ,CAAeC,WAAjC,EAA8C;UAC1C,KAAI,CAACb,MAAL,CAAYc,iBAAZ;QACH,CAFD,MAGK,IAAIJ,IAAI,CAACK,KAAT,EAAgB;UACjB,KAAI,CAACd,KAAL,IAAce,YAAY,CAAC,KAAI,CAACf,KAAN,CAA1B;;UACA,KAAI,CAACD,MAAL,CAAYiB,OAAZ;;UACA,KAAI,CAAChB,KAAL,GAAaiB,UAAU,CAAC;YAAA,OAAM,KAAI,CAAChB,UAAL,CAAgBH,KAAhB,CAAN;UAAA,CAAD,EAA+B,GAA/B,CAAvB;QACH;MACJ,CATD;MAUA,KAAKC,MAAL,CAAYM,EAAZ,CAAeF,GAAG,CAACG,MAAJ,CAAWY,cAA1B,EAA0C,YAAM;QAC5C,KAAI,CAACnB,MAAL,CAAYoB,UAAZ,WAA0B,KAAI,CAACtB,GAA/B;MACH,CAFD;MAGA,KAAKE,MAAL,CAAYM,EAAZ,CAAeF,GAAG,CAACG,MAAJ,CAAWc,eAA1B,EAA2C,YAAM;QAC7CtB,KAAK,CAACuB,IAAN;MACH,CAFD;MAGA,KAAKtB,MAAL,CAAYuB,WAAZ,CAAwBxB,KAAxB;IACH;IACD;AACJ;AACA;AACA;;;;WACI,mBAAUyB,KAAV,EAAiB;MACb,KAAKC,YAAL,IAAqB,KAAKA,YAAL,CAAkBC,SAAlB,CAA4BF,KAA5B,CAArB;IACH;IACD;AACJ;AACA;AACA;;;;WACI,iBAAQ;MACJ,IAAI,KAAKxB,MAAT,EAAiB;QACb,KAAKA,MAAL,CAAYiB,OAAZ;QACA,KAAKjB,MAAL,GAAc,IAAd;QACA,KAAKC,KAAL,GAAa,IAAb;MACH;IACJ;;;WACD,kBAAS;MACL,KAAKD,MAAL,IAAe,KAAKA,MAAL,CAAY2B,OAAZ,EAAf;IACH;IACD;AACJ;AACA;;;;WACI,yBAAgB;MACZ,KAAK3B,MAAL,CAAY4B,UAAZ;IACH;IACD;AACJ;AACA;AACA;;;;WACI,0BAAiBC,aAAjB,EAAgC;MAC5B,KAAK7B,MAAL,CAAY8B,gBAAZ,CAA6BD,aAA7B;IACH;IACD;AACJ;AACA;AACA;;;;WACI,sBAAaE,MAAb,EAAqB;MACjB,KAAK/B,MAAL,CAAYgC,YAAZ,CAAyBD,MAAzB;IACH;IACD;AACJ;AACA;AACA;;;;WACI,wBAAeE,KAAf,EAAsB;MAClB,KAAKjC,MAAL,CAAYkC,cAAZ,CAA2BD,KAA3B;IACH;;;;;;eAEUrC,mB"}
1
+ {"version":3,"file":"PlayerManager.js","names":["VtxHlsPlayerManager","opt","_classCallCheck","url","video","player","timer","initPlayer","_createClass","key","value","_this","hls","Hls","maxLiveSyncPlaybackRate","on","Events","ERROR","evt","data","type","ErrorTypes","MEDIA_ERROR","recoverMediaError","fatal","clearTimeout","destroy","setTimeout","MEDIA_ATTACHED","loadSource","concat","MANIFEST_PARSED","play","attachMedia","playSpeed","speed","recordPlayer","close","resize","setSize","setFullScreen","fullScreen","setPlayerAdapter","playerAdapter","setPlayerNum","number","setSelectIndex","index","_default","exports"],"sources":["vtxHls/PlayerManager.js"],"sourcesContent":["class VtxHlsPlayerManager {\n constructor(opt) {\n this.url = opt.url;\n this.video = opt.video;\n this.player = null;\n this.timer = null;\n this.initPlayer();\n }\n //初始化视频插件\n initPlayer() {\n const video = this.video;\n const hls = new Hls({\n maxLiveSyncPlaybackRate: 1.5,\n });\n this.player = hls;\n this.player.on(Hls.Events.ERROR, (evt, data) => {\n if (data.type === Hls.ErrorTypes.MEDIA_ERROR) {\n this.player.recoverMediaError();\n }\n else if (data.fatal) {\n this.timer && clearTimeout(this.timer);\n this.player.destroy();\n this.timer = setTimeout(() => this.initPlayer(video), 300);\n }\n });\n this.player.on(Hls.Events.MEDIA_ATTACHED, () => {\n this.player.loadSource(`${this.url}index.m3u8`);\n });\n this.player.on(Hls.Events.MANIFEST_PARSED, () => {\n video.play();\n });\n this.player.attachMedia(video);\n }\n /**\n * 倍速播放\n * @param {number} speed 速率 0.125 0.25 0.5 1 2 4 8 共7种速率\n */\n playSpeed(speed) {\n this.recordPlayer && this.recordPlayer.playSpeed(speed);\n }\n /**\n * 关闭播放器\n * @param {number} index 可选,关闭指定索引的窗口的播放器,不传则表示关闭所有播放器\n */\n close() {\n if (this.player) {\n this.player.destroy();\n this.player = null;\n this.timer = null;\n }\n }\n resize() {\n this.player && this.player.setSize();\n }\n /**\n * 设置全屏\n */\n setFullScreen() {\n this.player.fullScreen();\n }\n /**\n * 设置窗口自适应还是拉伸\n * @param {string} playerAdapter selfAdaption 自适应 | stretching 拉伸\n */\n setPlayerAdapter(playerAdapter) {\n this.player.setPlayerAdapter(playerAdapter);\n }\n /**\n * 控制视频播放器显示的路数: 1 4 9 16 25,不会超过最大显示路数\n * @param {number} number\n */\n setPlayerNum(number) {\n this.player.setPlayerNum(number);\n }\n /**\n * 设置选中的播放器的索引\n * @param {number} index\n */\n setSelectIndex(index) {\n this.player.setSelectIndex(index);\n }\n}\nexport default VtxHlsPlayerManager;\n"],"mappings":"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"}
@@ -1,99 +1,78 @@
1
1
  "use strict";
2
2
 
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports["default"] = void 0;
7
-
8
8
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
9
-
10
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
11
-
9
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
12
10
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
13
-
11
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
12
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
14
13
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
15
-
16
14
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
17
-
18
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
19
-
15
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
20
16
  var restartPause = 2000;
21
-
22
17
  var linkToIceServers = function linkToIceServers(links) {
23
18
  return links !== null ? links.split(', ').map(function (link) {
24
19
  var m = link.match(/^<(.+?)>; rel="ice-server"(; username="(.*?)"; credential="(.*?)"; credential-type="password")?/i);
25
20
  var ret = {
26
21
  urls: [m[1]]
27
22
  };
28
-
29
23
  if (m[3] !== undefined) {
30
24
  ret.username = unquoteCredential(m[3]);
31
25
  ret.credential = unquoteCredential(m[4]);
32
26
  ret.credentialType = 'password';
33
27
  }
34
-
35
28
  return ret;
36
29
  }) : [];
37
30
  };
38
-
39
31
  var editOffer = function editOffer(offer) {
40
32
  var sections = offer.sdp.split('m=');
41
-
42
33
  for (var i = 0; i < sections.length; i++) {
43
34
  var section = sections[i];
44
-
45
35
  if (section.startsWith('audio')) {
46
36
  sections[i] = enableStereoOpus(section);
47
37
  }
48
38
  }
49
-
50
39
  offer.sdp = sections.join('m=');
51
40
  };
52
-
53
41
  var enableStereoOpus = function enableStereoOpus(section) {
54
42
  var opusPayloadFormat = '';
55
43
  var lines = section.split('\r\n');
56
-
57
44
  for (var i = 0; i < lines.length; i++) {
58
45
  if (lines[i].startsWith('a=rtpmap:') && lines[i].toLowerCase().includes('opus/')) {
59
46
  opusPayloadFormat = lines[i].slice('a=rtpmap:'.length).split(' ')[0];
60
47
  break;
61
48
  }
62
49
  }
63
-
64
50
  if (opusPayloadFormat === '') {
65
51
  return section;
66
52
  }
67
-
68
53
  for (var _i = 0; _i < lines.length; _i++) {
69
54
  if (lines[_i].startsWith('a=fmtp:' + opusPayloadFormat + ' ')) {
70
55
  if (!lines[_i].includes('stereo')) {
71
56
  lines[_i] += ';stereo=1';
72
57
  }
73
-
74
58
  if (!lines[_i].includes('sprop-stereo')) {
75
59
  lines[_i] += ';sprop-stereo=1';
76
60
  }
77
61
  }
78
62
  }
79
-
80
63
  return lines.join('\r\n');
81
64
  };
82
-
83
65
  var parseOffer = function parseOffer(offer) {
84
66
  var ret = {
85
67
  iceUfrag: '',
86
68
  icePwd: '',
87
69
  medias: []
88
70
  };
89
-
90
71
  var _iterator = _createForOfIteratorHelper(offer.split('\r\n')),
91
- _step;
92
-
72
+ _step;
93
73
  try {
94
74
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
95
75
  var line = _step.value;
96
-
97
76
  if (line.startsWith('m=')) {
98
77
  ret.medias.push(line.slice('m='.length));
99
78
  } else if (ret.iceUfrag === '' && line.startsWith('a=ice-ufrag:')) {
@@ -107,25 +86,19 @@ var parseOffer = function parseOffer(offer) {
107
86
  } finally {
108
87
  _iterator.f();
109
88
  }
110
-
111
89
  return ret;
112
90
  };
113
-
114
91
  var generateSdpFragment = function generateSdpFragment(offerData, candidates) {
115
92
  var candidatesByMedia = {};
116
-
117
93
  var _iterator2 = _createForOfIteratorHelper(candidates),
118
- _step2;
119
-
94
+ _step2;
120
95
  try {
121
96
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
122
97
  var candidate = _step2.value;
123
98
  var _mid = candidate.sdpMLineIndex;
124
-
125
99
  if (candidatesByMedia[_mid] === undefined) {
126
100
  candidatesByMedia[_mid] = [];
127
101
  }
128
-
129
102
  candidatesByMedia[_mid].push(candidate);
130
103
  }
131
104
  } catch (err) {
@@ -133,23 +106,17 @@ var generateSdpFragment = function generateSdpFragment(offerData, candidates) {
133
106
  } finally {
134
107
  _iterator2.f();
135
108
  }
136
-
137
109
  var frag = 'a=ice-ufrag:' + offerData.iceUfrag + '\r\n' + 'a=ice-pwd:' + offerData.icePwd + '\r\n';
138
110
  var mid = 0;
139
-
140
111
  var _iterator3 = _createForOfIteratorHelper(offerData.medias),
141
- _step3;
142
-
112
+ _step3;
143
113
  try {
144
114
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
145
115
  var media = _step3.value;
146
-
147
116
  if (candidatesByMedia[mid] !== undefined) {
148
117
  frag += 'm=' + media + '\r\n' + 'a=mid:' + mid + '\r\n';
149
-
150
118
  var _iterator4 = _createForOfIteratorHelper(candidatesByMedia[mid]),
151
- _step4;
152
-
119
+ _step4;
153
120
  try {
154
121
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
155
122
  var _candidate = _step4.value;
@@ -161,7 +128,6 @@ var generateSdpFragment = function generateSdpFragment(offerData, candidates) {
161
128
  _iterator4.f();
162
129
  }
163
130
  }
164
-
165
131
  mid++;
166
132
  }
167
133
  } catch (err) {
@@ -169,14 +135,11 @@ var generateSdpFragment = function generateSdpFragment(offerData, candidates) {
169
135
  } finally {
170
136
  _iterator3.f();
171
137
  }
172
-
173
138
  return frag;
174
139
  };
175
-
176
140
  var WHEPClient = /*#__PURE__*/function () {
177
141
  function WHEPClient(opt) {
178
142
  _classCallCheck(this, WHEPClient);
179
-
180
143
  this.url = opt.url;
181
144
  this.video = opt.video;
182
145
  this.pc = null;
@@ -185,12 +148,10 @@ var WHEPClient = /*#__PURE__*/function () {
185
148
  this.queuedCandidates = [];
186
149
  this.start();
187
150
  }
188
-
189
151
  _createClass(WHEPClient, [{
190
152
  key: "start",
191
153
  value: function start() {
192
154
  var _this = this;
193
-
194
155
  console.log('requesting ICE servers');
195
156
  fetch(new URL('whep', this.url), {
196
157
  method: 'OPTIONS'
@@ -198,7 +159,6 @@ var WHEPClient = /*#__PURE__*/function () {
198
159
  return _this.onIceServers(res);
199
160
  })["catch"](function (err) {
200
161
  console.log('error: ' + err);
201
-
202
162
  _this.scheduleRestart();
203
163
  });
204
164
  }
@@ -206,7 +166,6 @@ var WHEPClient = /*#__PURE__*/function () {
206
166
  key: "onIceServers",
207
167
  value: function onIceServers(res) {
208
168
  var _this2 = this;
209
-
210
169
  this.pc = new RTCPeerConnection({
211
170
  iceServers: linkToIceServers(res.headers.get('Link'))
212
171
  });
@@ -217,20 +176,16 @@ var WHEPClient = /*#__PURE__*/function () {
217
176
  this.pc.addTransceiver('audio', {
218
177
  direction: direction
219
178
  });
220
-
221
179
  this.pc.onicecandidate = function (evt) {
222
180
  return _this2.onLocalCandidate(evt);
223
181
  };
224
-
225
182
  this.pc.oniceconnectionstatechange = function () {
226
183
  return _this2.onConnectionState();
227
184
  };
228
-
229
185
  this.pc.ontrack = function (evt) {
230
186
  console.log('new track:', evt.track.kind);
231
187
  _this2.video.srcObject = evt.streams[0];
232
188
  };
233
-
234
189
  this.pc.createOffer().then(function (offer) {
235
190
  return _this2.onLocalOffer(offer);
236
191
  });
@@ -239,7 +194,6 @@ var WHEPClient = /*#__PURE__*/function () {
239
194
  key: "onLocalOffer",
240
195
  value: function onLocalOffer(offer) {
241
196
  var _this3 = this;
242
-
243
197
  editOffer(offer);
244
198
  this.offerData = parseOffer(offer.sdp);
245
199
  this.pc.setLocalDescription(offer);
@@ -254,7 +208,6 @@ var WHEPClient = /*#__PURE__*/function () {
254
208
  if (res.status !== 201) {
255
209
  throw new Error('bad status code');
256
210
  }
257
-
258
211
  _this3.sessionUrl = new URL(res.headers.get('location'), _this3.url).toString();
259
212
  return res.text();
260
213
  }).then(function (sdp) {
@@ -264,7 +217,6 @@ var WHEPClient = /*#__PURE__*/function () {
264
217
  }));
265
218
  })["catch"](function (err) {
266
219
  console.log('error: ' + err);
267
-
268
220
  _this3.scheduleRestart();
269
221
  });
270
222
  }
@@ -274,9 +226,7 @@ var WHEPClient = /*#__PURE__*/function () {
274
226
  if (this.restartTimeout !== null) {
275
227
  return;
276
228
  }
277
-
278
229
  console.log('peer connection state:', this.pc.iceConnectionState);
279
-
280
230
  switch (this.pc.iceConnectionState) {
281
231
  case 'disconnected':
282
232
  this.scheduleRestart();
@@ -288,9 +238,7 @@ var WHEPClient = /*#__PURE__*/function () {
288
238
  if (this.restartTimeout !== null) {
289
239
  return;
290
240
  }
291
-
292
241
  this.pc.setRemoteDescription(answer);
293
-
294
242
  if (this.queuedCandidates.length !== 0) {
295
243
  this.sendLocalCandidates(this.queuedCandidates);
296
244
  this.queuedCandidates = [];
@@ -302,7 +250,6 @@ var WHEPClient = /*#__PURE__*/function () {
302
250
  if (this.restartTimeout !== null) {
303
251
  return;
304
252
  }
305
-
306
253
  if (evt.candidate !== null) {
307
254
  if (this.sessionUrl === '') {
308
255
  this.queuedCandidates.push(evt.candidate);
@@ -315,7 +262,6 @@ var WHEPClient = /*#__PURE__*/function () {
315
262
  key: "sendLocalCandidates",
316
263
  value: function sendLocalCandidates(candidates) {
317
264
  var _this4 = this;
318
-
319
265
  fetch(this.sessionUrl + window.location.search, {
320
266
  method: 'PATCH',
321
267
  headers: {
@@ -329,7 +275,6 @@ var WHEPClient = /*#__PURE__*/function () {
329
275
  }
330
276
  })["catch"](function (err) {
331
277
  console.log('error: ' + err);
332
-
333
278
  _this4.scheduleRestart();
334
279
  });
335
280
  }
@@ -337,22 +282,17 @@ var WHEPClient = /*#__PURE__*/function () {
337
282
  key: "scheduleRestart",
338
283
  value: function scheduleRestart() {
339
284
  var _this5 = this;
340
-
341
285
  if (this.restartTimeout !== null) {
342
286
  return;
343
287
  }
344
-
345
288
  if (this.pc !== null) {
346
289
  this.pc.close();
347
290
  this.pc = null;
348
291
  }
349
-
350
292
  this.restartTimeout = window.setTimeout(function () {
351
293
  _this5.restartTimeout = null;
352
-
353
294
  _this5.start();
354
295
  }, restartPause);
355
-
356
296
  if (this.sessionUrl) {
357
297
  fetch(this.sessionUrl, {
358
298
  method: 'DELETE'
@@ -364,14 +304,11 @@ var WHEPClient = /*#__PURE__*/function () {
364
304
  console.log('delete session error: ' + err);
365
305
  });
366
306
  }
367
-
368
307
  this.sessionUrl = '';
369
308
  this.queuedCandidates = [];
370
309
  }
371
310
  }]);
372
-
373
311
  return WHEPClient;
374
312
  }();
375
-
376
313
  exports["default"] = WHEPClient;
377
314
  //# sourceMappingURL=WhepManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WhepManager.js","names":["restartPause","linkToIceServers","links","split","map","link","m","match","ret","urls","undefined","username","unquoteCredential","credential","credentialType","editOffer","offer","sections","sdp","i","length","section","startsWith","enableStereoOpus","join","opusPayloadFormat","lines","toLowerCase","includes","slice","parseOffer","iceUfrag","icePwd","medias","line","push","generateSdpFragment","offerData","candidates","candidatesByMedia","candidate","mid","sdpMLineIndex","frag","media","WHEPClient","opt","url","video","pc","restartTimeout","sessionUrl","queuedCandidates","start","console","log","fetch","URL","method","then","res","onIceServers","err","scheduleRestart","RTCPeerConnection","iceServers","headers","get","direction","addTransceiver","onicecandidate","evt","onLocalCandidate","oniceconnectionstatechange","onConnectionState","ontrack","track","kind","srcObject","streams","createOffer","onLocalOffer","setLocalDescription","body","status","Error","toString","text","onRemoteAnswer","RTCSessionDescription","type","iceConnectionState","answer","setRemoteDescription","sendLocalCandidates","window","location","search","close","setTimeout"],"sources":["vtxHls/WhepManager.js"],"sourcesContent":["const restartPause = 2000;\nconst linkToIceServers = (links) => links !== null\n ? links.split(', ').map((link) => {\n const m = link.match(/^<(.+?)>; rel=\"ice-server\"(; username=\"(.*?)\"; credential=\"(.*?)\"; credential-type=\"password\")?/i);\n const ret = {\n urls: [m[1]],\n };\n if (m[3] !== undefined) {\n ret.username = unquoteCredential(m[3]);\n ret.credential = unquoteCredential(m[4]);\n ret.credentialType = 'password';\n }\n return ret;\n })\n : [];\nconst editOffer = (offer) => {\n const sections = offer.sdp.split('m=');\n for (let i = 0; i < sections.length; i++) {\n const section = sections[i];\n if (section.startsWith('audio')) {\n sections[i] = enableStereoOpus(section);\n }\n }\n offer.sdp = sections.join('m=');\n};\nconst enableStereoOpus = (section) => {\n let opusPayloadFormat = '';\n let lines = section.split('\\r\\n');\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].startsWith('a=rtpmap:') && lines[i].toLowerCase().includes('opus/')) {\n opusPayloadFormat = lines[i].slice('a=rtpmap:'.length).split(' ')[0];\n break;\n }\n }\n if (opusPayloadFormat === '') {\n return section;\n }\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].startsWith('a=fmtp:' + opusPayloadFormat + ' ')) {\n if (!lines[i].includes('stereo')) {\n lines[i] += ';stereo=1';\n }\n if (!lines[i].includes('sprop-stereo')) {\n lines[i] += ';sprop-stereo=1';\n }\n }\n }\n return lines.join('\\r\\n');\n};\nconst parseOffer = (offer) => {\n const ret = {\n iceUfrag: '',\n icePwd: '',\n medias: [],\n };\n for (const line of offer.split('\\r\\n')) {\n if (line.startsWith('m=')) {\n ret.medias.push(line.slice('m='.length));\n }\n else if (ret.iceUfrag === '' && line.startsWith('a=ice-ufrag:')) {\n ret.iceUfrag = line.slice('a=ice-ufrag:'.length);\n }\n else if (ret.icePwd === '' && line.startsWith('a=ice-pwd:')) {\n ret.icePwd = line.slice('a=ice-pwd:'.length);\n }\n }\n return ret;\n};\nconst generateSdpFragment = (offerData, candidates) => {\n const candidatesByMedia = {};\n for (const candidate of candidates) {\n const mid = candidate.sdpMLineIndex;\n if (candidatesByMedia[mid] === undefined) {\n candidatesByMedia[mid] = [];\n }\n candidatesByMedia[mid].push(candidate);\n }\n let frag = 'a=ice-ufrag:' + offerData.iceUfrag + '\\r\\n' + 'a=ice-pwd:' + offerData.icePwd + '\\r\\n';\n let mid = 0;\n for (const media of offerData.medias) {\n if (candidatesByMedia[mid] !== undefined) {\n frag += 'm=' + media + '\\r\\n' + 'a=mid:' + mid + '\\r\\n';\n for (const candidate of candidatesByMedia[mid]) {\n frag += 'a=' + candidate.candidate + '\\r\\n';\n }\n }\n mid++;\n }\n return frag;\n};\nexport default class WHEPClient {\n constructor(opt) {\n this.url = opt.url;\n this.video = opt.video;\n this.pc = null;\n this.restartTimeout = null;\n this.sessionUrl = '';\n this.queuedCandidates = [];\n this.start();\n }\n start() {\n console.log('requesting ICE servers');\n fetch(new URL('whep', this.url), {\n method: 'OPTIONS',\n })\n .then((res) => this.onIceServers(res))\n .catch((err) => {\n console.log('error: ' + err);\n this.scheduleRestart();\n });\n }\n onIceServers(res) {\n this.pc = new RTCPeerConnection({\n iceServers: linkToIceServers(res.headers.get('Link')),\n });\n const direction = 'sendrecv';\n this.pc.addTransceiver('video', { direction });\n this.pc.addTransceiver('audio', { direction });\n this.pc.onicecandidate = (evt) => this.onLocalCandidate(evt);\n this.pc.oniceconnectionstatechange = () => this.onConnectionState();\n this.pc.ontrack = (evt) => {\n console.log('new track:', evt.track.kind);\n this.video.srcObject = evt.streams[0];\n };\n this.pc.createOffer().then((offer) => this.onLocalOffer(offer));\n }\n onLocalOffer(offer) {\n editOffer(offer);\n this.offerData = parseOffer(offer.sdp);\n this.pc.setLocalDescription(offer);\n console.log('sending offer');\n fetch(new URL('whep', this.url), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/sdp',\n },\n body: offer.sdp,\n })\n .then((res) => {\n if (res.status !== 201) {\n throw new Error('bad status code');\n }\n this.sessionUrl = new URL(res.headers.get('location'), this.url).toString();\n return res.text();\n })\n .then((sdp) => this.onRemoteAnswer(new RTCSessionDescription({\n type: 'answer',\n sdp,\n })))\n .catch((err) => {\n console.log('error: ' + err);\n this.scheduleRestart();\n });\n }\n onConnectionState() {\n if (this.restartTimeout !== null) {\n return;\n }\n console.log('peer connection state:', this.pc.iceConnectionState);\n switch (this.pc.iceConnectionState) {\n case 'disconnected':\n this.scheduleRestart();\n }\n }\n onRemoteAnswer(answer) {\n if (this.restartTimeout !== null) {\n return;\n }\n this.pc.setRemoteDescription(answer);\n if (this.queuedCandidates.length !== 0) {\n this.sendLocalCandidates(this.queuedCandidates);\n this.queuedCandidates = [];\n }\n }\n onLocalCandidate(evt) {\n if (this.restartTimeout !== null) {\n return;\n }\n if (evt.candidate !== null) {\n if (this.sessionUrl === '') {\n this.queuedCandidates.push(evt.candidate);\n }\n else {\n this.sendLocalCandidates([evt.candidate]);\n }\n }\n }\n sendLocalCandidates(candidates) {\n fetch(this.sessionUrl + window.location.search, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/trickle-ice-sdpfrag',\n 'If-Match': '*',\n },\n body: generateSdpFragment(this.offerData, candidates),\n })\n .then((res) => {\n if (res.status !== 204) {\n throw new Error('bad status code');\n }\n })\n .catch((err) => {\n console.log('error: ' + err);\n this.scheduleRestart();\n });\n }\n scheduleRestart() {\n if (this.restartTimeout !== null) {\n return;\n }\n if (this.pc !== null) {\n this.pc.close();\n this.pc = null;\n }\n this.restartTimeout = window.setTimeout(() => {\n this.restartTimeout = null;\n this.start();\n }, restartPause);\n if (this.sessionUrl) {\n fetch(this.sessionUrl, {\n method: 'DELETE',\n })\n .then((res) => {\n if (res.status !== 200) {\n throw new Error('bad status code');\n }\n })\n .catch((err) => {\n console.log('delete session error: ' + err);\n });\n }\n this.sessionUrl = '';\n this.queuedCandidates = [];\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"WhepManager.js","names":["restartPause","linkToIceServers","links","split","map","link","m","match","ret","urls","undefined","username","unquoteCredential","credential","credentialType","editOffer","offer","sections","sdp","i","length","section","startsWith","enableStereoOpus","join","opusPayloadFormat","lines","toLowerCase","includes","slice","parseOffer","iceUfrag","icePwd","medias","_iterator","_createForOfIteratorHelper","_step","s","n","done","line","value","push","err","e","f","generateSdpFragment","offerData","candidates","candidatesByMedia","_iterator2","_step2","candidate","mid","sdpMLineIndex","frag","_iterator3","_step3","media","_iterator4","_step4","WHEPClient","opt","_classCallCheck","url","video","pc","restartTimeout","sessionUrl","queuedCandidates","start","_createClass","key","_this","console","log","fetch","URL","method","then","res","onIceServers","scheduleRestart","_this2","RTCPeerConnection","iceServers","headers","get","direction","addTransceiver","onicecandidate","evt","onLocalCandidate","oniceconnectionstatechange","onConnectionState","ontrack","track","kind","srcObject","streams","createOffer","onLocalOffer","_this3","setLocalDescription","body","status","Error","toString","text","onRemoteAnswer","RTCSessionDescription","type","iceConnectionState","answer","setRemoteDescription","sendLocalCandidates","_this4","window","location","search","_this5","close","setTimeout","exports"],"sources":["vtxHls/WhepManager.js"],"sourcesContent":["const restartPause = 2000;\nconst linkToIceServers = (links) => links !== null\n ? links.split(', ').map((link) => {\n const m = link.match(/^<(.+?)>; rel=\"ice-server\"(; username=\"(.*?)\"; credential=\"(.*?)\"; credential-type=\"password\")?/i);\n const ret = {\n urls: [m[1]],\n };\n if (m[3] !== undefined) {\n ret.username = unquoteCredential(m[3]);\n ret.credential = unquoteCredential(m[4]);\n ret.credentialType = 'password';\n }\n return ret;\n })\n : [];\nconst editOffer = (offer) => {\n const sections = offer.sdp.split('m=');\n for (let i = 0; i < sections.length; i++) {\n const section = sections[i];\n if (section.startsWith('audio')) {\n sections[i] = enableStereoOpus(section);\n }\n }\n offer.sdp = sections.join('m=');\n};\nconst enableStereoOpus = (section) => {\n let opusPayloadFormat = '';\n let lines = section.split('\\r\\n');\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].startsWith('a=rtpmap:') && lines[i].toLowerCase().includes('opus/')) {\n opusPayloadFormat = lines[i].slice('a=rtpmap:'.length).split(' ')[0];\n break;\n }\n }\n if (opusPayloadFormat === '') {\n return section;\n }\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].startsWith('a=fmtp:' + opusPayloadFormat + ' ')) {\n if (!lines[i].includes('stereo')) {\n lines[i] += ';stereo=1';\n }\n if (!lines[i].includes('sprop-stereo')) {\n lines[i] += ';sprop-stereo=1';\n }\n }\n }\n return lines.join('\\r\\n');\n};\nconst parseOffer = (offer) => {\n const ret = {\n iceUfrag: '',\n icePwd: '',\n medias: [],\n };\n for (const line of offer.split('\\r\\n')) {\n if (line.startsWith('m=')) {\n ret.medias.push(line.slice('m='.length));\n }\n else if (ret.iceUfrag === '' && line.startsWith('a=ice-ufrag:')) {\n ret.iceUfrag = line.slice('a=ice-ufrag:'.length);\n }\n else if (ret.icePwd === '' && line.startsWith('a=ice-pwd:')) {\n ret.icePwd = line.slice('a=ice-pwd:'.length);\n }\n }\n return ret;\n};\nconst generateSdpFragment = (offerData, candidates) => {\n const candidatesByMedia = {};\n for (const candidate of candidates) {\n const mid = candidate.sdpMLineIndex;\n if (candidatesByMedia[mid] === undefined) {\n candidatesByMedia[mid] = [];\n }\n candidatesByMedia[mid].push(candidate);\n }\n let frag = 'a=ice-ufrag:' + offerData.iceUfrag + '\\r\\n' + 'a=ice-pwd:' + offerData.icePwd + '\\r\\n';\n let mid = 0;\n for (const media of offerData.medias) {\n if (candidatesByMedia[mid] !== undefined) {\n frag += 'm=' + media + '\\r\\n' + 'a=mid:' + mid + '\\r\\n';\n for (const candidate of candidatesByMedia[mid]) {\n frag += 'a=' + candidate.candidate + '\\r\\n';\n }\n }\n mid++;\n }\n return frag;\n};\nexport default class WHEPClient {\n constructor(opt) {\n this.url = opt.url;\n this.video = opt.video;\n this.pc = null;\n this.restartTimeout = null;\n this.sessionUrl = '';\n this.queuedCandidates = [];\n this.start();\n }\n start() {\n console.log('requesting ICE servers');\n fetch(new URL('whep', this.url), {\n method: 'OPTIONS',\n })\n .then((res) => this.onIceServers(res))\n .catch((err) => {\n console.log('error: ' + err);\n this.scheduleRestart();\n });\n }\n onIceServers(res) {\n this.pc = new RTCPeerConnection({\n iceServers: linkToIceServers(res.headers.get('Link')),\n });\n const direction = 'sendrecv';\n this.pc.addTransceiver('video', { direction });\n this.pc.addTransceiver('audio', { direction });\n this.pc.onicecandidate = (evt) => this.onLocalCandidate(evt);\n this.pc.oniceconnectionstatechange = () => this.onConnectionState();\n this.pc.ontrack = (evt) => {\n console.log('new track:', evt.track.kind);\n this.video.srcObject = evt.streams[0];\n };\n this.pc.createOffer().then((offer) => this.onLocalOffer(offer));\n }\n onLocalOffer(offer) {\n editOffer(offer);\n this.offerData = parseOffer(offer.sdp);\n this.pc.setLocalDescription(offer);\n console.log('sending offer');\n fetch(new URL('whep', this.url), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/sdp',\n },\n body: offer.sdp,\n })\n .then((res) => {\n if (res.status !== 201) {\n throw new Error('bad status code');\n }\n this.sessionUrl = new URL(res.headers.get('location'), this.url).toString();\n return res.text();\n })\n .then((sdp) => this.onRemoteAnswer(new RTCSessionDescription({\n type: 'answer',\n sdp,\n })))\n .catch((err) => {\n console.log('error: ' + err);\n this.scheduleRestart();\n });\n }\n onConnectionState() {\n if (this.restartTimeout !== null) {\n return;\n }\n console.log('peer connection state:', this.pc.iceConnectionState);\n switch (this.pc.iceConnectionState) {\n case 'disconnected':\n this.scheduleRestart();\n }\n }\n onRemoteAnswer(answer) {\n if (this.restartTimeout !== null) {\n return;\n }\n this.pc.setRemoteDescription(answer);\n if (this.queuedCandidates.length !== 0) {\n this.sendLocalCandidates(this.queuedCandidates);\n this.queuedCandidates = [];\n }\n }\n onLocalCandidate(evt) {\n if (this.restartTimeout !== null) {\n return;\n }\n if (evt.candidate !== null) {\n if (this.sessionUrl === '') {\n this.queuedCandidates.push(evt.candidate);\n }\n else {\n this.sendLocalCandidates([evt.candidate]);\n }\n }\n }\n sendLocalCandidates(candidates) {\n fetch(this.sessionUrl + window.location.search, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/trickle-ice-sdpfrag',\n 'If-Match': '*',\n },\n body: generateSdpFragment(this.offerData, candidates),\n })\n .then((res) => {\n if (res.status !== 204) {\n throw new Error('bad status code');\n }\n })\n .catch((err) => {\n console.log('error: ' + err);\n this.scheduleRestart();\n });\n }\n scheduleRestart() {\n if (this.restartTimeout !== null) {\n return;\n }\n if (this.pc !== null) {\n this.pc.close();\n this.pc = null;\n }\n this.restartTimeout = window.setTimeout(() => {\n this.restartTimeout = null;\n this.start();\n }, restartPause);\n if (this.sessionUrl) {\n fetch(this.sessionUrl, {\n method: 'DELETE',\n })\n .then((res) => {\n if (res.status !== 200) {\n throw new Error('bad status code');\n }\n })\n .catch((err) => {\n console.log('delete session error: ' + err);\n });\n }\n this.sessionUrl = '';\n this.queuedCandidates = [];\n }\n}\n"],"mappings":"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"}