@vtx/player 1.7.12 → 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.
- package/README.md +2 -2
- package/lib/api/fetch.js +62 -91
- package/lib/api/fetch.js.map +1 -1
- package/lib/api/index.js +18 -63
- package/lib/api/index.js.map +1 -1
- package/lib/api/types.d.ts +6 -6
- package/lib/bd/PlayerManager.js +38 -68
- package/lib/bd/PlayerManager.js.map +1 -1
- package/lib/bill-player/index.d.ts +1 -1
- package/lib/bill-player/index.js +66 -121
- package/lib/bill-player/index.js.map +1 -1
- package/lib/bill-player/style/css.js +0 -9
- package/lib/bill-player/style/css.js.map +1 -1
- package/lib/bill-player/style/index.js +0 -9
- package/lib/bill-player/style/index.js.map +1 -1
- package/lib/bill-player/style/index.less +297 -297
- package/lib/components/set-tag-video/index.js +6 -34
- package/lib/components/set-tag-video/index.js.map +1 -1
- package/lib/components/set-tag-video/style/css.js.map +1 -1
- package/lib/components/set-tag-video/style/index.js.map +1 -1
- package/lib/components/set-tag-video/style/index.less +125 -125
- package/lib/components/split-screen/index.d.ts +1 -1
- package/lib/components/split-screen/index.js +3 -14
- package/lib/components/split-screen/index.js.map +1 -1
- package/lib/components/split-screen/style/css.js.map +1 -1
- package/lib/components/split-screen/style/index.js.map +1 -1
- package/lib/components/tag-video/index.js +10 -38
- package/lib/components/tag-video/index.js.map +1 -1
- package/lib/components/tag-video/style/css.js.map +1 -1
- package/lib/components/tag-video/style/index.js.map +1 -1
- package/lib/components/tag-video/style/index.less +69 -69
- package/lib/components/video-scale/index.d.ts +1 -1
- package/lib/components/video-scale/index.js +2 -9
- package/lib/components/video-scale/index.js.map +1 -1
- package/lib/components/video-scale/style/css.js.map +1 -1
- package/lib/components/video-scale/style/index.js.map +1 -1
- package/lib/context/index.js +0 -4
- package/lib/context/index.js.map +1 -1
- package/lib/controls/index.d.ts +11 -11
- package/lib/controls/index.js +46 -108
- package/lib/controls/index.js.map +1 -1
- package/lib/controls/style/css.js +0 -5
- package/lib/controls/style/css.js.map +1 -1
- package/lib/controls/style/index.js +0 -5
- package/lib/controls/style/index.js.map +1 -1
- package/lib/controls/style/index.less +188 -188
- package/lib/h264/PlayerManager.js +18 -27
- package/lib/h264/PlayerManager.js.map +1 -1
- package/lib/history-control/index.d.ts +2 -2
- package/lib/history-control/index.js +61 -121
- package/lib/history-control/index.js.map +1 -1
- package/lib/history-control/style/css.js +0 -6
- package/lib/history-control/style/css.js.map +1 -1
- package/lib/history-control/style/index.js +0 -6
- package/lib/history-control/style/index.js.map +1 -1
- package/lib/history-control/style/index.less +252 -252
- package/lib/history-control-v2/components/grid-item/index.js +38 -77
- package/lib/history-control-v2/components/grid-item/index.js.map +1 -1
- package/lib/history-control-v2/components/panel/index.js +44 -114
- package/lib/history-control-v2/components/panel/index.js.map +1 -1
- package/lib/history-control-v2/context.js +0 -2
- package/lib/history-control-v2/context.js.map +1 -1
- package/lib/history-control-v2/index.d.ts +4 -4
- package/lib/history-control-v2/index.js +97 -166
- package/lib/history-control-v2/index.js.map +1 -1
- package/lib/history-control-v2/style/css.js +0 -10
- package/lib/history-control-v2/style/css.js.map +1 -1
- package/lib/history-control-v2/style/index.js +0 -10
- package/lib/history-control-v2/style/index.js.map +1 -1
- package/lib/history-control-v2/style/index.less +437 -437
- package/lib/history-control-v2/utils.js +1 -21
- package/lib/history-control-v2/utils.js.map +1 -1
- package/lib/history-player/index.d.ts +1 -1
- package/lib/history-player/index.js +146 -205
- package/lib/history-player/index.js.map +1 -1
- package/lib/history-player/style/css.js +0 -3
- package/lib/history-player/style/css.js.map +1 -1
- package/lib/history-player/style/index.js +0 -3
- package/lib/history-player/style/index.js.map +1 -1
- package/lib/history-player/style/index.less +102 -102
- package/lib/hooks/useSettings.js +1 -6
- package/lib/hooks/useSettings.js.map +1 -1
- package/lib/icc/PlayerManager.js +26 -57
- package/lib/icc/PlayerManager.js.map +1 -1
- package/lib/icc/api.d.ts +0 -68
- package/lib/icc/api.js +2 -16
- package/lib/icc/api.js.map +1 -1
- package/lib/icons/index.d.ts +36 -36
- package/lib/icons/index.js +23 -171
- package/lib/icons/index.js.map +1 -1
- package/lib/icons/index.less +32 -32
- package/lib/index.js +0 -10
- package/lib/index.js.map +1 -1
- package/lib/live-channel-player/index.d.ts +1 -1
- package/lib/live-channel-player/index.js +32 -67
- package/lib/live-channel-player/index.js.map +1 -1
- package/lib/live-channel-player/style/css.js +0 -1
- package/lib/live-channel-player/style/css.js.map +1 -1
- package/lib/live-channel-player/style/index.js +0 -1
- package/lib/live-channel-player/style/index.js.map +1 -1
- package/lib/live-control/index.d.ts +2 -2
- package/lib/live-control/index.js +36 -86
- package/lib/live-control/index.js.map +1 -1
- package/lib/live-control/style/css.js +0 -4
- package/lib/live-control/style/css.js.map +1 -1
- package/lib/live-control/style/index.js +0 -4
- package/lib/live-control/style/index.js.map +1 -1
- package/lib/live-control/style/index.less +99 -99
- package/lib/live-control-v2/index.d.ts +3 -3
- package/lib/live-control-v2/index.js +109 -141
- package/lib/live-control-v2/index.js.map +1 -1
- package/lib/live-control-v2/style/css.js +0 -7
- package/lib/live-control-v2/style/css.js.map +1 -1
- package/lib/live-control-v2/style/index.js +0 -7
- package/lib/live-control-v2/style/index.js.map +1 -1
- package/lib/live-control-v2/style/index.less +192 -192
- package/lib/live-player/index.d.ts +2 -0
- package/lib/live-player/index.js +96 -136
- package/lib/live-player/index.js.map +1 -1
- package/lib/live-player/style/css.js +0 -2
- package/lib/live-player/style/css.js.map +1 -1
- package/lib/live-player/style/index.js +0 -2
- package/lib/live-player/style/index.js.map +1 -1
- package/lib/live-player/style/index.less +75 -75
- package/lib/player/index.d.ts +1 -1
- package/lib/player/index.js +79 -244
- package/lib/player/index.js.map +1 -1
- package/lib/rsl/PlayerManager.js +18 -64
- package/lib/rsl/PlayerManager.js.map +1 -1
- package/lib/typings/@vtx/utils/index.d.ts +28 -28
- package/lib/typings/h5player.d.ts +146 -146
- package/lib/typings/webrtcplayer.d.ts +56 -56
- package/lib/typings/wsplayer.d.ts +99 -99
- package/lib/utils/index.d.ts +1 -1
- package/lib/utils/index.js +12 -91
- package/lib/utils/index.js.map +1 -1
- package/lib/vite-env.d.ts +1 -1
- package/lib/vtxHls/PlayerManager.js +6 -20
- package/lib/vtxHls/PlayerManager.js.map +1 -1
- package/lib/vtxHls/WhepManager.js +9 -72
- package/lib/vtxHls/WhepManager.js.map +1 -1
- package/lib/webrtc/PlayerManager.js +28 -41
- package/lib/webrtc/PlayerManager.js.map +1 -1
- 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","
|
|
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":";;;;;;;;;;;;IAAMA,mBAAmB;EACrB,SAAAA,oBAAYC,GAAG,EAAE;IAAAC,eAAA,OAAAF,mBAAA;IACb,IAAI,CAACG,GAAG,GAAGF,GAAG,CAACE,GAAG;IAClB,IAAI,CAACC,KAAK,GAAGH,GAAG,CAACG,KAAK;IACtB,IAAI,CAACC,MAAM,GAAG,IAAI;IAClB,IAAI,CAACC,KAAK,GAAG,IAAI;IACjB,IAAI,CAACC,UAAU,CAAC,CAAC;EACrB;EACA;EAAAC,YAAA,CAAAR,mBAAA;IAAAS,GAAA;IAAAC,KAAA,EACA,SAAAH,WAAA,EAAa;MAAA,IAAAI,KAAA;MACT,IAAMP,KAAK,GAAG,IAAI,CAACA,KAAK;MACxB,IAAMQ,GAAG,GAAG,IAAIC,GAAG,CAAC;QAChBC,uBAAuB,EAAE;MAC7B,CAAC,CAAC;MACF,IAAI,CAACT,MAAM,GAAGO,GAAG;MACjB,IAAI,CAACP,MAAM,CAACU,EAAE,CAACF,GAAG,CAACG,MAAM,CAACC,KAAK,EAAE,UAACC,GAAG,EAAEC,IAAI,EAAK;QAC5C,IAAIA,IAAI,CAACC,IAAI,KAAKP,GAAG,CAACQ,UAAU,CAACC,WAAW,EAAE;UAC1CX,KAAI,CAACN,MAAM,CAACkB,iBAAiB,CAAC,CAAC;QACnC,CAAC,MACI,IAAIJ,IAAI,CAACK,KAAK,EAAE;UACjBb,KAAI,CAACL,KAAK,IAAImB,YAAY,CAACd,KAAI,CAACL,KAAK,CAAC;UACtCK,KAAI,CAACN,MAAM,CAACqB,OAAO,CAAC,CAAC;UACrBf,KAAI,CAACL,KAAK,GAAGqB,UAAU,CAAC;YAAA,OAAMhB,KAAI,CAACJ,UAAU,CAACH,KAAK,CAAC;UAAA,GAAE,GAAG,CAAC;QAC9D;MACJ,CAAC,CAAC;MACF,IAAI,CAACC,MAAM,CAACU,EAAE,CAACF,GAAG,CAACG,MAAM,CAACY,cAAc,EAAE,YAAM;QAC5CjB,KAAI,CAACN,MAAM,CAACwB,UAAU,IAAAC,MAAA,CAAInB,KAAI,CAACR,GAAG,eAAY,CAAC;MACnD,CAAC,CAAC;MACF,IAAI,CAACE,MAAM,CAACU,EAAE,CAACF,GAAG,CAACG,MAAM,CAACe,eAAe,EAAE,YAAM;QAC7C3B,KAAK,CAAC4B,IAAI,CAAC,CAAC;MAChB,CAAC,CAAC;MACF,IAAI,CAAC3B,MAAM,CAAC4B,WAAW,CAAC7B,KAAK,CAAC;IAClC;IACA;AACJ;AACA;AACA;EAHI;IAAAK,GAAA;IAAAC,KAAA,EAIA,SAAAwB,UAAUC,KAAK,EAAE;MACb,IAAI,CAACC,YAAY,IAAI,IAAI,CAACA,YAAY,CAACF,SAAS,CAACC,KAAK,CAAC;IAC3D;IACA;AACJ;AACA;AACA;EAHI;IAAA1B,GAAA;IAAAC,KAAA,EAIA,SAAA2B,MAAA,EAAQ;MACJ,IAAI,IAAI,CAAChC,MAAM,EAAE;QACb,IAAI,CAACA,MAAM,CAACqB,OAAO,CAAC,CAAC;QACrB,IAAI,CAACrB,MAAM,GAAG,IAAI;QAClB,IAAI,CAACC,KAAK,GAAG,IAAI;MACrB;IACJ;EAAC;IAAAG,GAAA;IAAAC,KAAA,EACD,SAAA4B,OAAA,EAAS;MACL,IAAI,CAACjC,MAAM,IAAI,IAAI,CAACA,MAAM,CAACkC,OAAO,CAAC,CAAC;IACxC;IACA;AACJ;AACA;EAFI;IAAA9B,GAAA;IAAAC,KAAA,EAGA,SAAA8B,cAAA,EAAgB;MACZ,IAAI,CAACnC,MAAM,CAACoC,UAAU,CAAC,CAAC;IAC5B;IACA;AACJ;AACA;AACA;EAHI;IAAAhC,GAAA;IAAAC,KAAA,EAIA,SAAAgC,iBAAiBC,aAAa,EAAE;MAC5B,IAAI,CAACtC,MAAM,CAACqC,gBAAgB,CAACC,aAAa,CAAC;IAC/C;IACA;AACJ;AACA;AACA;EAHI;IAAAlC,GAAA;IAAAC,KAAA,EAIA,SAAAkC,aAAaC,MAAM,EAAE;MACjB,IAAI,CAACxC,MAAM,CAACuC,YAAY,CAACC,MAAM,CAAC;IACpC;IACA;AACJ;AACA;AACA;EAHI;IAAApC,GAAA;IAAAC,KAAA,EAIA,SAAAoC,eAAeC,KAAK,EAAE;MAClB,IAAI,CAAC1C,MAAM,CAACyC,cAAc,CAACC,KAAK,CAAC;IACrC;EAAC;EAAA,OAAA/C,mBAAA;AAAA;AAAA,IAAAgD,QAAA,GAEUhD,mBAAmB;AAAAiD,OAAA,cAAAD,QAAA"}
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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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"}
|