@gcorevideo/player 2.28.36 → 2.29.0
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/assets/media-control/media-control.scss +8 -6
- package/assets/multi-camera/multicamera.ejs +27 -23
- package/assets/multi-camera/style.scss +7 -34
- package/assets/style/main.scss +2 -2
- package/dist/core.js +8 -6
- package/dist/index.css +427 -449
- package/dist/index.embed.js +8 -45
- package/dist/index.js +77 -181
- package/docs/api/player.md +22 -9
- package/docs/api/player.mediacontrol.setkeepvisible.md +56 -0
- package/docs/api/player.multicamera.md +0 -28
- package/docs/api/player.multiccamerasourceinfo.md +27 -0
- package/docs/api/{player.multicamera.unbindevents.md → player.multisourcesmode.md} +4 -7
- package/docs/api/player.sourcecontroller.md +0 -37
- package/lib/playback/dash-playback/DashPlayback.d.ts +2 -1
- package/lib/playback/dash-playback/DashPlayback.d.ts.map +1 -1
- package/lib/playback/hls-playback/HlsPlayback.d.ts +2 -1
- package/lib/playback/hls-playback/HlsPlayback.d.ts.map +1 -1
- package/lib/playback/types.d.ts +9 -0
- package/lib/playback/types.d.ts.map +1 -1
- package/lib/playback.types.d.ts +0 -6
- package/lib/playback.types.d.ts.map +1 -1
- package/lib/plugins/multi-camera/MultiCamera.d.ts +21 -4
- package/lib/plugins/multi-camera/MultiCamera.d.ts.map +1 -1
- package/lib/plugins/multi-camera/MultiCamera.js +70 -134
- package/lib/plugins/source-controller/SourceController.d.ts +0 -39
- package/lib/plugins/source-controller/SourceController.d.ts.map +1 -1
- package/lib/plugins/source-controller/SourceController.js +0 -39
- package/lib/utils/mediaSources.d.ts +4 -0
- package/lib/utils/mediaSources.d.ts.map +1 -1
- package/lib/utils/mediaSources.js +8 -6
- package/package.json +1 -1
- package/src/playback/dash-playback/DashPlayback.ts +1 -2
- package/src/playback/hls-playback/HlsPlayback.ts +1 -1
- package/src/playback/types.ts +10 -0
- package/src/playback.types.ts +0 -6
- package/src/plugins/multi-camera/MultiCamera.ts +103 -166
- package/src/plugins/source-controller/SourceController.ts +0 -39
- package/src/plugins/subtitles/ClosedCaptions.ts +1 -1
- package/src/utils/mediaSources.ts +10 -6
- package/tsconfig.tsbuildinfo +1 -1
- package/docs/api/player.multicamera.activebyid.md +0 -67
package/dist/index.embed.js
CHANGED
|
@@ -12554,6 +12554,9 @@ var PlayerEvent;
|
|
|
12554
12554
|
PlayerEvent["VolumeUpdate"] = "volumeupdate";
|
|
12555
12555
|
})(PlayerEvent || (PlayerEvent = {}));
|
|
12556
12556
|
|
|
12557
|
+
const MIME_TYPES_HLS = ['application/x-mpegurl', 'application/vnd.apple.mpegurl'];
|
|
12558
|
+
const MIME_TYPE_HLS = MIME_TYPES_HLS[0];
|
|
12559
|
+
const MIME_TYPE_DASH = 'application/dash+xml';
|
|
12557
12560
|
// TODO rewrite using the Playback classes and canPlay static methods
|
|
12558
12561
|
function buildMediaSourcesList(sources, priorityTransport = 'dash') {
|
|
12559
12562
|
const playbacks = Loader.registeredPlaybacks;
|
|
@@ -12592,22 +12595,21 @@ function wrapSource(s) {
|
|
|
12592
12595
|
}
|
|
12593
12596
|
function guessMimeType(s) {
|
|
12594
12597
|
if (s.endsWith('.mpd')) {
|
|
12595
|
-
return
|
|
12598
|
+
return MIME_TYPE_DASH;
|
|
12596
12599
|
}
|
|
12597
12600
|
if (s.endsWith('.m3u8')) {
|
|
12598
|
-
|
|
12599
|
-
return 'application/x-mpegurl';
|
|
12601
|
+
return MIME_TYPE_HLS;
|
|
12600
12602
|
}
|
|
12601
12603
|
}
|
|
12602
12604
|
function isDashSource(source, mimeType) {
|
|
12603
12605
|
if (mimeType) {
|
|
12604
|
-
return mimeType ===
|
|
12606
|
+
return mimeType === MIME_TYPE_DASH; // TODO consider video/mp4
|
|
12605
12607
|
}
|
|
12606
12608
|
return source.endsWith('.mpd');
|
|
12607
12609
|
}
|
|
12608
12610
|
function isHlsSource(source, mimeType) {
|
|
12609
12611
|
if (mimeType) {
|
|
12610
|
-
return
|
|
12612
|
+
return MIME_TYPES_HLS.includes(mimeType.toLowerCase());
|
|
12611
12613
|
}
|
|
12612
12614
|
return source.endsWith('.m3u8');
|
|
12613
12615
|
}
|
|
@@ -57001,7 +57003,7 @@ class ErrorScreen extends UICorePlugin {
|
|
|
57001
57003
|
|
|
57002
57004
|
insertStyle(".player-logo[data-logo] {\n position: absolute;\n z-index: 2;\n width: 100%;\n height: 100%;\n}\n\n.clappr-logo {\n position: absolute;\n}");
|
|
57003
57005
|
|
|
57004
|
-
insertStyle("*,\n:focus,\n:visited {\n outline: none !important;\n}\n\n.multicamera[data-multicamera] {\n
|
|
57006
|
+
insertStyle("*,\n:focus,\n:visited {\n outline: none !important;\n}\n\n.multicamera[data-multicamera] {\n position: relative;\n order: 80;\n}\n.multicamera[data-multicamera] button {\n background-color: transparent;\n color: #fff;\n font-family: Roboto, \"Open Sans\", Arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n border: none;\n font-size: 14px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 20px;\n}\n.multicamera[data-multicamera] button svg {\n height: 20px;\n position: relative;\n}\n.multicamera[data-multicamera] button:hover {\n color: #c9c9c9;\n}\n.multicamera[data-multicamera] button.changing {\n animation: pulse 0.5s infinite alternate;\n}\n.multicamera[data-multicamera] > ul {\n padding: 6px 0;\n right: -24px;\n width: 245px;\n list-style-type: none;\n position: absolute;\n bottom: 48px;\n border-radius: 4px;\n display: none;\n background-color: rgba(74, 74, 74, 0.9);\n}\n.multicamera[data-multicamera] > ul::after {\n content: \"\";\n position: absolute;\n top: 100%;\n left: 85%;\n margin-left: -10px;\n width: 0;\n height: 0;\n border-top: 10px solid rgba(74, 74, 74, 0.9);\n border-right: 10px solid transparent;\n border-left: 10px solid transparent;\n}\n.multicamera[data-multicamera] li {\n font-size: 10px;\n cursor: pointer;\n}\n.multicamera[data-multicamera] li .multicamera-item {\n display: flex;\n padding: 10px 0;\n justify-content: center;\n position: relative;\n}\n.multicamera[data-multicamera] li .multicamera-item[data-mulitcamera-selector-live=false] .multicamera-screenshot {\n opacity: 0.5;\n}\n.multicamera[data-multicamera] li .multicamera-item[data-mulitcamera-selector-live=false] .multicamera-text {\n opacity: 0.5;\n}\n.multicamera[data-multicamera] li .multicamera-item[data-mulitcamera-selector-live=false]:hover {\n background-color: rgba(0, 0, 0, 0);\n}\n.multicamera[data-multicamera] li .multicamera-item[data-mulitcamera-selector-live=false] {\n pointer-events: none;\n}\n.multicamera[data-multicamera] li .multicamera-item:hover, .multicamera[data-multicamera] li .multicamera-item.multicamera-active {\n background-color: rgba(0, 0, 0, 0.3);\n}\n.multicamera[data-multicamera] li .multicamera-item .multicamera-screenshot {\n width: 80px;\n height: 60px;\n}\n.multicamera[data-multicamera] li .multicamera-item .multicamera-screenshot img {\n width: 80px;\n height: 60px;\n}\n.multicamera[data-multicamera] li .multicamera-item .multicamera-text {\n width: 120px;\n text-align: left;\n margin-left: 15px;\n}\n.multicamera[data-multicamera] li .multicamera-item .multicamera-text .multicamera-title,\n.multicamera[data-multicamera] li .multicamera-item .multicamera-text .multicamera-description {\n width: 120px;\n height: 20px;\n font-family: Roboto, \"Open Sans\", Arial, sans-serif;\n font-size: 14px;\n font-weight: normal;\n font-style: normal;\n font-stretch: normal;\n line-height: 1.43;\n letter-spacing: normal;\n text-align: left;\n color: #fff;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n.multicamera[data-multicamera] li .multicamera-item .multicamera-text .multicamera-description {\n opacity: 0.6;\n}");
|
|
57005
57007
|
|
|
57006
57008
|
const pipIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M21.05 3.00001C21.302 3.00001 21.5435 3.10003 21.7217 3.27833C21.9 3.45646 22 3.69802 22 3.95003V10.6H20.1V4.90003H4.90001V18.2H10.6V20.1H3.95001C3.69802 20.1 3.45647 20 3.27832 19.8217C3.10002 19.6436 3 19.402 3 19.15V3.95001C3 3.69802 3.10002 3.45647 3.27832 3.27832C3.45644 3.10002 3.69801 3 3.95001 3L21.05 3.00001ZM21.05 12.5C21.302 12.5 21.5435 12.6 21.7217 12.7783C21.9 12.9565 22 13.198 22 13.45V19.15C22 19.402 21.9 19.6436 21.7217 19.8217C21.5436 20 21.302 20.1 21.05 20.1H13.45C13.198 20.1 12.9564 20 12.7783 19.8217C12.6 19.6436 12.5 19.402 12.5 19.15V13.45C12.5 13.198 12.6 12.9565 12.7783 12.7783C12.9564 12.6 13.198 12.5 13.45 12.5H21.05ZM7.47178 6.12823L9.60928 8.26572L11.5501 6.32492V11.5499H6.32509L8.26589 9.60911L6.12839 7.47161L7.47178 6.12823Z\"\n fill=\"#C9C9C9\"/>\n</svg>\n";
|
|
57007
57009
|
|
|
@@ -58301,45 +58303,6 @@ function noSync(cb) {
|
|
|
58301
58303
|
* `PLUGIN` that is managing the automatic failover between media sources.
|
|
58302
58304
|
* @public
|
|
58303
58305
|
* @remarks
|
|
58304
|
-
* Have a look at the {@link https://miro.com/app/board/uXjVLiN15tY=/?share_link_id=390327585787 | source failover diagram} for the details
|
|
58305
|
-
* on how sources ordering and selection works. Below is a simplified diagram:
|
|
58306
|
-
*
|
|
58307
|
-
* ```markdown
|
|
58308
|
-
* sources_list:
|
|
58309
|
-
* - a.mpd | +--------------------+
|
|
58310
|
-
* - b.m3u8 |--->| init |
|
|
58311
|
-
* - ... | |--------------------|
|
|
58312
|
-
* | current_source = 0 |
|
|
58313
|
-
* +--------------------+
|
|
58314
|
-
* |
|
|
58315
|
-
* | source = a.mpd
|
|
58316
|
-
* | playback = dash.js
|
|
58317
|
-
* v
|
|
58318
|
-
* +------------------+
|
|
58319
|
-
* +-->| load source |
|
|
58320
|
-
* | +---------|--------+
|
|
58321
|
-
* | v
|
|
58322
|
-
* | +------------------+
|
|
58323
|
-
* | | play |
|
|
58324
|
-
* | +---------|--------+
|
|
58325
|
-
* | |
|
|
58326
|
-
* | v
|
|
58327
|
-
* | +-----------------------+
|
|
58328
|
-
* | | on playback_error |
|
|
58329
|
-
* | |-----------------------|
|
|
58330
|
-
* | | current_source = |
|
|
58331
|
-
* | | (current_source + 1) |
|
|
58332
|
-
* | | % len sources_list |
|
|
58333
|
-
* | | |
|
|
58334
|
-
* | | delay 1..3s |
|
|
58335
|
-
* | +---------------|-------+
|
|
58336
|
-
* | |
|
|
58337
|
-
* | source=b.m3u8 |
|
|
58338
|
-
* | playback=hls.js |
|
|
58339
|
-
* +-------------------+
|
|
58340
|
-
*
|
|
58341
|
-
* ```
|
|
58342
|
-
*
|
|
58343
58306
|
* @example
|
|
58344
58307
|
* ```ts
|
|
58345
58308
|
* import { SourceController } from '@gcorevideo/player'
|
package/dist/index.js
CHANGED
|
@@ -12778,6 +12778,9 @@ var PlayerEvent;
|
|
|
12778
12778
|
PlayerEvent["VolumeUpdate"] = "volumeupdate";
|
|
12779
12779
|
})(PlayerEvent || (PlayerEvent = {}));
|
|
12780
12780
|
|
|
12781
|
+
const MIME_TYPES_HLS = ['application/x-mpegurl', 'application/vnd.apple.mpegurl'];
|
|
12782
|
+
const MIME_TYPE_HLS = MIME_TYPES_HLS[0];
|
|
12783
|
+
const MIME_TYPE_DASH = 'application/dash+xml';
|
|
12781
12784
|
// TODO rewrite using the Playback classes and canPlay static methods
|
|
12782
12785
|
function buildMediaSourcesList(sources, priorityTransport = 'dash') {
|
|
12783
12786
|
const playbacks = Loader.registeredPlaybacks;
|
|
@@ -12817,22 +12820,21 @@ function wrapSource(s) {
|
|
|
12817
12820
|
}
|
|
12818
12821
|
function guessMimeType(s) {
|
|
12819
12822
|
if (s.endsWith('.mpd')) {
|
|
12820
|
-
return
|
|
12823
|
+
return MIME_TYPE_DASH;
|
|
12821
12824
|
}
|
|
12822
12825
|
if (s.endsWith('.m3u8')) {
|
|
12823
|
-
|
|
12824
|
-
return 'application/x-mpegurl';
|
|
12826
|
+
return MIME_TYPE_HLS;
|
|
12825
12827
|
}
|
|
12826
12828
|
}
|
|
12827
12829
|
function isDashSource(source, mimeType) {
|
|
12828
12830
|
if (mimeType) {
|
|
12829
|
-
return mimeType ===
|
|
12831
|
+
return mimeType === MIME_TYPE_DASH; // TODO consider video/mp4
|
|
12830
12832
|
}
|
|
12831
12833
|
return source.endsWith('.mpd');
|
|
12832
12834
|
}
|
|
12833
12835
|
function isHlsSource(source, mimeType) {
|
|
12834
12836
|
if (mimeType) {
|
|
12835
|
-
return
|
|
12837
|
+
return MIME_TYPES_HLS.includes(mimeType.toLowerCase());
|
|
12836
12838
|
}
|
|
12837
12839
|
return source.endsWith('.m3u8');
|
|
12838
12840
|
}
|
|
@@ -51567,7 +51569,7 @@ class Player {
|
|
|
51567
51569
|
}
|
|
51568
51570
|
}
|
|
51569
51571
|
|
|
51570
|
-
var version$1 = "2.
|
|
51572
|
+
var version$1 = "2.29.0";
|
|
51571
51573
|
|
|
51572
51574
|
var packages = {
|
|
51573
51575
|
"node_modules/@clappr/core": {
|
|
@@ -57958,14 +57960,10 @@ class Logo extends UIContainerPlugin {
|
|
|
57958
57960
|
}
|
|
57959
57961
|
}
|
|
57960
57962
|
|
|
57961
|
-
const pluginHtml$3 = "<button data-multicamera-button class='gcore-skin-button-color'>\n <span class=\"multicamera-icon\"></span>\n</button>\n\n<ul class=\"gcore-skin-bg-color\">\n <% for (var i
|
|
57963
|
+
const pluginHtml$3 = "<button data-multicamera-button class='gcore-skin-button-color media-control-button'>\n <span class=\"multicamera-icon\"></span>\n</button>\n\n<ul class=\"gcore-skin-bg-color\">\n <% for (var i=0; i < streams.length; i++) { %>\n <% if(!streams[i].live && multisources_mode==='only_live' ) { %>\n <% continue; %>\n <% } %>\n <li>\n <div class=\"multicamera-item\" data-multicamera-selector-live=\"<%= streams[i].live %>\"\n data-multicamera-selector-select=\"<%= streams[i].id %>\">\n <div class=\"multicamera-screenshot\">\n <% if (streams[i].screenshot) { %>\n <img src=\"<%= streams[i].screenshot %>\" alt=\"<%= streams[i].title %>\" />\n <% } %>\n </div>\n <div class=\"multicamera-text gcore-skin-text-color\">\n <% if (streams[i].title) { %>\n <div class=\"multicamera-title gcore-skin-text-color\">\n <%= streams[i].title %>\n </div>\n <% } %>\n <% if (streams[i].description) { %>\n <div class=\"multicamera-description gcore-skin-text-color\">\n <%= streams[i].description %>\n </div>\n <% } %>\n </div>\n </div>\n </li>\n <% } %>\n</ul>";
|
|
57962
57964
|
|
|
57963
57965
|
const streamsIcon = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"20\" viewBox=\"0 0 24 20\">\n <path fill=\"#FFF\" fill-rule=\"nonzero\" d=\"M24 1.5v13a1.5 1.5 0 0 1-1.5 1.5h-1a.5.5 0 0 1-.5-.5v-10A2.5 2.5 0 0 0 18.5 3h-14a.5.5 0 0 1-.5-.5v-1A1.5 1.5 0 0 1 5.5 0h17A1.5 1.5 0 0 1 24 1.5M12.724 12.447l-5 2.5a.505.505 0 0 1-.487-.021A.503.503 0 0 1 7 14.5v-5c0-.173.09-.334.237-.426a.505.505 0 0 1 .487-.021l5 2.5a.5.5 0 0 1 0 .894M18.5 4h-17C.673 4 0 4.673 0 5.5v13c0 .827.673 1.5 1.5 1.5h17c.827 0 1.5-.673 1.5-1.5v-13c0-.827-.673-1.5-1.5-1.5\"/>\n</svg>\n";
|
|
57964
57966
|
|
|
57965
|
-
const streamsMomentoIcon = "<svg id=\"Слой_1\" data-name=\"Слой 1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 230.73 173.61\"><defs><style>.cls-1{fill:#fff;}</style></defs><path class=\"cls-1\" d=\"M71.82,16.09c11.43,0,22.87-.05,34.31,0,12,.06,19.45,7.45,19.7,19.52.23,11.31.23,11.31,11.81,11.31q24.36,0,48.73,0c12.74,0,20.21,7.3,20.27,19.88q.11,24.12,0,48.23c-.06,12.66-7.12,19.65-19.75,19.77-2,0-4,0-6,0-7.78,0-7.84.05-6,7.79a59.23,59.23,0,0,0,1.95,6.67c1.44,3.95.33,7.18-2.66,9.82-3.28,2.89-6.93,2.88-10.59.76-9.31-5.4-16.95-12.73-23.55-21.11-2.29-2.93-4.66-4.2-8.35-4-5.12.28-10.28.19-15.41,0-10.39-.37-17.64-7.65-18.09-18a62.93,62.93,0,0,0-.09-6.45c-.3-2.07,1.6-5.54-1.49-6-3.62-.48-7.92-2.08-11.07,1.89-6.09,7.7-12.82,14.76-21,20.24a42,42,0,0,1-5.09,3.08,8.16,8.16,0,0,1-9.29-1.12,8.25,8.25,0,0,1-3-8.86c1-4,2-8,3-12,.59-2.51-.34-3.66-3.07-3.59-4.14.12-8.3.14-12.43-.11-9.61-.59-16.86-7.76-17-17.42-.24-17.57-.21-35.14,0-52.71.12-10.07,8-17.46,18.43-17.58C48,16,59.88,16.09,71.82,16.09ZM56.66,120.5c2.53-.3,3.87-1.89,5.38-3.08A99.31,99.31,0,0,0,79.83,98.8a8.72,8.72,0,0,1,8-3.83c6.12.18,12.25.12,18.38,0,7.31-.12,10.6-3.39,10.64-10.72q.11-24.33,0-48.68c0-7-3.5-10.51-10.36-10.53q-35-.11-70,0c-6.34,0-9.92,3.51-9.95,9.83q-.15,25.08,0,50.18c0,6.37,3.42,9.72,9.86,9.89,5.62.14,11.26.1,16.89.06,4.37,0,6.2,2,6.25,6.4C59.55,107.88,58.17,114.1,56.66,120.5ZM167.78,152c-1.93-6.72-3.37-12.44-3.41-18.4,0-6.33,1.17-7.71,7.37-7.77,5-.05,9.94.06,14.9,0,7.6-.13,10.79-3.35,10.81-11q.08-23.85,0-47.69c0-7.61-3.38-11-10.86-11.08-18.88-.07-37.76,0-56.64-.08-3.21,0-4.29.89-4.2,4.21.24,8.27.18,16.56,0,24.83-.13,8.6-4.46,16.11-11.88,17.55-6.73,1.3-7.44,4.81-6.78,10.16.14,1.14,0,2.32,0,3.48.3,6.1,3.53,9.44,9.69,9.63,5.79.18,11.6.34,17.38,0,4.81-.31,7.94,1.3,10.83,5.22A79.08,79.08,0,0,0,167.78,152Z\"/><path class=\"cls-1\" d=\"M73.07,56c-6.4,0-12.15-.06-17.9,0-3.28,0-5.76-1-5.68-4.63s2.66-4.59,5.88-4.45c1.49.06,3-.12,4.47,0,4.79.46,8.51.12,7.44-6.47-.43-2.67,1.82-4.32,4.42-4.26s4.81,1.75,4.35,4.4c-1.18,6.75,2.76,6.72,7.44,6.34a43.43,43.43,0,0,1,6.45.09,4,4,0,0,1,4,4.17c0,2.59-1.46,4.88-4.17,4.48-7-1-7.55,5.72-11.08,8.81-1.54,1.35.36,2.28,1.27,3.06,2.13,1.83,4.38,3.53,6.52,5.36s2.74,4.28.8,6.54c-1.74,2-4,2-6.27.53-.28-.18-.52-.41-.79-.6-3.22-2.29-5.94-6.88-9.46-6.66s-6.61,4-9.91,6.17a19.94,19.94,0,0,1-2.55,1.52c-2.51,1.19-5,1.29-6.46-1.44-1.42-2.57-.6-4.82,1.91-6.34A88.31,88.31,0,0,0,68.17,62.07C69.84,60.52,71.73,59.09,73.07,56Z\"/><path class=\"cls-1\" d=\"M153,104.27a43.76,43.76,0,0,1-4.91,0c-3.27-.4-5.24.75-6.27,4-.9,2.88-2.84,5.23-6.28,3.82-3.66-1.5-3.21-4.49-1.94-7.52,4.68-11.12,9.36-22.22,13.94-33.37,1-2.36,2.28-4.1,5-4.08s3.89,2,4.85,4.25c4.66,11.11,9.4,22.2,14.14,33.28,1.3,3,1.69,6-2,7.46-3.4,1.35-5.49-.73-6.29-3.74C161.49,102,156.3,105.12,153,104.27Zm-.84-20.39a64.73,64.73,0,0,1-2.78,6.37c-2.25,3.89-1.16,4.85,3.14,4.89s4.82-1.35,2.93-4.73C154.36,88.42,154.15,86,152.18,83.88Z\"/></svg>";
|
|
57966
|
-
|
|
57967
|
-
const streamsWhiteNightsIcon = "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"50\" height=\"50\" viewBox=\"0 0 50 50\">\n <defs>\n <clipPath id=\"clip-Icon\">\n <rect width=\"50\" height=\"50\"/>\n </clipPath>\n </defs>\n <g id=\"Icon\" clip-path=\"url(#clip-Icon)\">\n <g id=\"icon2\" transform=\"translate(-0.041 0)\">\n <path id=\"Контур_77\" data-name=\"Контур 77\" d=\"M6.493,13v8.266h6.275V19.74H8.31V17.714h4.006V16.3H8.31V14.53h4.365V13Zm7.5,0v8.266h1.7V15.732h.023l3.438,5.534h1.818V13h-1.7v5.545h-.023L15.8,13Z\" fill=\"#fff\"/>\n <path id=\"Контур_76\" data-name=\"Контур 76\" d=\"M29.949,29.1V26.774H31.94a1.4,1.4,0,0,1,.938.272,1.1,1.1,0,0,1,.313.874,1.155,1.155,0,0,1-.313.9,1.375,1.375,0,0,1-.938.278ZM28.132,25.36v8.266h1.817V30.4h1.818a1.353,1.353,0,0,1,.984.3,1.637,1.637,0,0,1,.394.949c.046.333.079.681.1,1.042a3.2,3.2,0,0,0,.185.938h1.819a1.218,1.218,0,0,1-.191-.423,3.611,3.611,0,0,1-.093-.527c-.019-.185-.033-.367-.041-.544s-.016-.332-.023-.463a5.052,5.052,0,0,0-.087-.625,2.109,2.109,0,0,0-.2-.573,1.586,1.586,0,0,0-.359-.451,1.414,1.414,0,0,0-.556-.284v-.023a1.926,1.926,0,0,0,1-.81,2.494,2.494,0,0,0,.307-1.262,2.308,2.308,0,0,0-.165-.88,2.128,2.128,0,0,0-.486-.724,2.3,2.3,0,0,0-.764-.492,2.67,2.67,0,0,0-1-.179ZM43.506,30.5V25.36H41.689V30.5a2.065,2.065,0,0,1-.37,1.36,1.7,1.7,0,0,1-1.343.434,2.086,2.086,0,0,1-.886-.156,1.283,1.283,0,0,1-.758-.978,3.748,3.748,0,0,1-.058-.66V25.36H36.456V30.5a3.16,3.16,0,0,0,.92,2.5,3.807,3.807,0,0,0,2.6.81,3.82,3.82,0,0,0,2.593-.816,3.132,3.132,0,0,0,.937-2.492Z\" fill=\"#fff\"/>\n <path id=\"Контур_80\" data-name=\"Контур 80\" d=\"M22.646,31.2H4.689a4.505,4.505,0,0,1-4.5-4.5V8.5A4.505,4.505,0,0,1,4.689,4h18.2a4.505,4.505,0,0,1,4.5,4.5v8.445l-.893.1a3.184,3.184,0,0,0-2.846,3.177V30.5l-.465.7ZM4.689,6a2.5,2.5,0,0,0-2.5,2.5V26.7a2.5,2.5,0,0,0,2.5,2.5H21.65V20.22a5.18,5.18,0,0,1,3.739-4.992V8.5a2.5,2.5,0,0,0-2.5-2.5Z\" fill=\"#fff\"/>\n <path id=\"Контур_81\" data-name=\"Контур 81\" d=\"M30.127,47.884a1,1,0,0,1-1-1V43.267H26.846a5.206,5.206,0,0,1-5.2-5.2V20.222a5.206,5.206,0,0,1,5.2-5.2H44.692a5.206,5.206,0,0,1,5.2,5.2V38.068a5.206,5.206,0,0,1-5.2,5.2H35.058l-4.216,4.316A1,1,0,0,1,30.127,47.884ZM26.846,17.022a3.2,3.2,0,0,0-3.2,3.2V38.067a3.2,3.2,0,0,0,3.2,3.2h3.281a1,1,0,0,1,1,1v2.162l2.8-2.86a1,1,0,0,1,.715-.3H44.692a3.2,3.2,0,0,0,3.2-3.2V20.222a3.2,3.2,0,0,0-3.2-3.2Z\" fill=\"#fff\"/>\n </g>\n </g>\n</svg>\n";
|
|
57968
|
-
|
|
57969
57967
|
const VERSION$4 = '0.0.1';
|
|
57970
57968
|
const T$6 = 'plugins.multicamera';
|
|
57971
57969
|
/**
|
|
@@ -58013,6 +58011,8 @@ class MultiCamera extends UICorePlugin {
|
|
|
58013
58011
|
// Don't mutate the options, TODO check if some plugin observes the options.multicamera
|
|
58014
58012
|
this.multicamera = this.options.multisources.map((item) => ({ ...item }));
|
|
58015
58013
|
this.noActiveStreams = this.multicamera.every((item) => !item.live);
|
|
58014
|
+
// TODO filter out non-live
|
|
58015
|
+
this.core.options.sources = expandMediaSource(this.multicamera[0]);
|
|
58016
58016
|
}
|
|
58017
58017
|
bindEvents() {
|
|
58018
58018
|
this.listenTo(this.core, Events$1.CORE_READY, this.bindPlaybackEvents);
|
|
@@ -58021,15 +58021,10 @@ class MultiCamera extends UICorePlugin {
|
|
|
58021
58021
|
this.listenTo(this.core.mediaControl, Events$1.MEDIACONTROL_HIDE, this.hideSelectLevelMenu);
|
|
58022
58022
|
}
|
|
58023
58023
|
unBindEvents() {
|
|
58024
|
-
|
|
58025
|
-
this.stopListening(this.core, Events$1.
|
|
58026
|
-
|
|
58027
|
-
this.stopListening(this.core.mediaControl, Events$1.
|
|
58028
|
-
// @ts-ignore
|
|
58029
|
-
this.stopListening(this.core.mediaControl, Events$1.MEDIACONTROL_RENDERED);
|
|
58030
|
-
// @ts-ignore
|
|
58031
|
-
this.stopListening(this.core.mediaControl, Events$1.MEDIACONTROL_HIDE);
|
|
58032
|
-
// @ts-ignore
|
|
58024
|
+
this.stopListening(this.core, Events$1.CORE_READY, this.bindPlaybackEvents);
|
|
58025
|
+
this.stopListening(this.core.mediaControl, Events$1.MEDIACONTROL_CONTAINERCHANGED, this.reload);
|
|
58026
|
+
this.stopListening(this.core.mediaControl, Events$1.MEDIACONTROL_RENDERED, this.render);
|
|
58027
|
+
this.stopListening(this.core.mediaControl, Events$1.MEDIACONTROL_HIDE, this.hideSelectLevelMenu);
|
|
58033
58028
|
this.stopListening(this.core.activePlayback, Events$1.PLAYBACK_PLAY, this.onPlay);
|
|
58034
58029
|
}
|
|
58035
58030
|
onPlay() {
|
|
@@ -58045,80 +58040,53 @@ class MultiCamera extends UICorePlugin {
|
|
|
58045
58040
|
this.bindPlaybackEvents();
|
|
58046
58041
|
}
|
|
58047
58042
|
shouldRender() {
|
|
58048
|
-
if (
|
|
58049
|
-
return false;
|
|
58050
|
-
}
|
|
58051
|
-
if (!this.core.activePlayback) {
|
|
58043
|
+
if (this.noActiveStreams) {
|
|
58052
58044
|
return false;
|
|
58053
58045
|
}
|
|
58054
58046
|
return this.multicamera.length >= 2;
|
|
58055
58047
|
}
|
|
58056
58048
|
render() {
|
|
58057
|
-
if (this.
|
|
58058
|
-
|
|
58059
|
-
|
|
58060
|
-
|
|
58061
|
-
|
|
58062
|
-
|
|
58063
|
-
|
|
58064
|
-
|
|
58065
|
-
|
|
58066
|
-
|
|
58067
|
-
|
|
58068
|
-
}
|
|
58069
|
-
// const mediaControl = this.core.getPlugin('media_control')
|
|
58070
|
-
if (this.currentTime &&
|
|
58071
|
-
// TODO check the last active playback type instead
|
|
58072
|
-
// !mediaControl.$el.hasClass('live') &&
|
|
58073
|
-
this.core.getPlaybackType() !== Playback.LIVE) {
|
|
58074
|
-
if (this.currentTime < this.core.activePlayback.getDuration()) {
|
|
58075
|
-
this.core.activePlayback.seek(this.currentTime);
|
|
58076
|
-
}
|
|
58077
|
-
this.currentTime = 0;
|
|
58078
|
-
// if (mediaControl.$el.hasClass('dvr')) {
|
|
58079
|
-
// this.core.activeContainer.dvrInUse = true;
|
|
58080
|
-
// }
|
|
58081
|
-
}
|
|
58082
|
-
// TODO current source
|
|
58083
|
-
this.$el.html(this.template({
|
|
58084
|
-
streams: this.multicamera,
|
|
58085
|
-
multisources_mode: this.options.multisourcesMode,
|
|
58086
|
-
}));
|
|
58087
|
-
if ((numActiveSources <= 1 &&
|
|
58088
|
-
this.options.multisourcesMode !== 'show_all') ||
|
|
58089
|
-
this.options.multisourcesMode === 'one_first') {
|
|
58090
|
-
this.$el.hide();
|
|
58091
|
-
}
|
|
58092
|
-
else {
|
|
58093
|
-
this.$el.show();
|
|
58049
|
+
if (!this.core.activeContainer || !this.core.activePlayback) {
|
|
58050
|
+
return this;
|
|
58051
|
+
}
|
|
58052
|
+
if (!this.shouldRender()) {
|
|
58053
|
+
return this;
|
|
58054
|
+
}
|
|
58055
|
+
let numActiveSources = 0;
|
|
58056
|
+
const currentSource = this.core.activePlayback?.sourceMedia;
|
|
58057
|
+
for (const item of this.multicamera) {
|
|
58058
|
+
if (item.live) {
|
|
58059
|
+
numActiveSources++;
|
|
58094
58060
|
}
|
|
58095
|
-
if (this.
|
|
58096
|
-
this.
|
|
58097
|
-
this.core.mediaControl.$multiCameraSelector.append(this.el);
|
|
58061
|
+
if (!this.currentCamera && item.source === currentSource) {
|
|
58062
|
+
this.currentCamera = item;
|
|
58098
58063
|
}
|
|
58099
|
-
|
|
58100
|
-
|
|
58101
|
-
|
|
58102
|
-
if (
|
|
58103
|
-
this.core.
|
|
58104
|
-
if (~window.location.href.indexOf('whitenights.gcdn.co')) {
|
|
58105
|
-
this.core.mediaControl.$multiCameraSelector
|
|
58106
|
-
.find('span.multicamera-icon')
|
|
58107
|
-
.append(streamsWhiteNightsIcon);
|
|
58108
|
-
}
|
|
58109
|
-
else if (~window.location.href.indexOf('momentosolutions.gcdn.co')) {
|
|
58110
|
-
this.core.mediaControl.$multiCameraSelector
|
|
58111
|
-
.find('span.multicamera-icon')
|
|
58112
|
-
.append(streamsMomentoIcon);
|
|
58113
|
-
}
|
|
58114
|
-
else {
|
|
58115
|
-
this.core.mediaControl.$multiCameraSelector
|
|
58116
|
-
.find('span.multicamera-icon')
|
|
58117
|
-
.append(streamsIcon);
|
|
58118
|
-
}
|
|
58064
|
+
}
|
|
58065
|
+
if (this.currentTime &&
|
|
58066
|
+
this.core.getPlaybackType() !== Playback.LIVE) {
|
|
58067
|
+
if (this.currentTime < this.core.activePlayback.getDuration()) {
|
|
58068
|
+
this.core.activePlayback.seek(this.currentTime);
|
|
58119
58069
|
}
|
|
58120
|
-
this.
|
|
58070
|
+
this.currentTime = 0;
|
|
58071
|
+
}
|
|
58072
|
+
this.$el.html(this.template({
|
|
58073
|
+
streams: this.multicamera,
|
|
58074
|
+
multisources_mode: this.options.multisourcesMode,
|
|
58075
|
+
}));
|
|
58076
|
+
if ((numActiveSources < 2 &&
|
|
58077
|
+
this.options.multisourcesMode !== 'show_all') ||
|
|
58078
|
+
this.options.multisourcesMode === 'one_first') {
|
|
58079
|
+
this.$el.hide();
|
|
58121
58080
|
}
|
|
58081
|
+
else {
|
|
58082
|
+
this.$el.show();
|
|
58083
|
+
}
|
|
58084
|
+
const mediaControl = this.core.getPlugin('media_control');
|
|
58085
|
+
mediaControl.slot('multicamera', this.$el);
|
|
58086
|
+
this.$el
|
|
58087
|
+
.find('span.multicamera-icon')
|
|
58088
|
+
.html(streamsIcon);
|
|
58089
|
+
this.highlightCurrentLevel();
|
|
58122
58090
|
return this;
|
|
58123
58091
|
}
|
|
58124
58092
|
onCameraSelect(event) {
|
|
@@ -58131,33 +58099,6 @@ class MultiCamera extends UICorePlugin {
|
|
|
58131
58099
|
event.stopPropagation();
|
|
58132
58100
|
return false;
|
|
58133
58101
|
}
|
|
58134
|
-
activeById(id, active) {
|
|
58135
|
-
this.setLiveStatus(id, active);
|
|
58136
|
-
if (!this.currentCamera && !this.noActiveStreams) {
|
|
58137
|
-
return;
|
|
58138
|
-
}
|
|
58139
|
-
if (this.noActiveStreams && !active) {
|
|
58140
|
-
return;
|
|
58141
|
-
}
|
|
58142
|
-
if (this.currentCamera) {
|
|
58143
|
-
if (this.options.multisourcesMode === 'only_live') {
|
|
58144
|
-
this.behaviorLive(id, active);
|
|
58145
|
-
}
|
|
58146
|
-
if (this.options.multisourcesMode === 'one_first') {
|
|
58147
|
-
this.behaviorOne(id, active);
|
|
58148
|
-
}
|
|
58149
|
-
if (this.options.multisourcesMode === 'show_all') {
|
|
58150
|
-
this.behaviorAll(id, active);
|
|
58151
|
-
}
|
|
58152
|
-
}
|
|
58153
|
-
else {
|
|
58154
|
-
if (this.noActiveStreams && active) {
|
|
58155
|
-
this.changeById(id);
|
|
58156
|
-
this.noActiveStreams = false;
|
|
58157
|
-
}
|
|
58158
|
-
}
|
|
58159
|
-
this.render();
|
|
58160
|
-
}
|
|
58161
58102
|
setLiveStatus(id, active) {
|
|
58162
58103
|
try {
|
|
58163
58104
|
const index = this.findIndexById(id);
|
|
@@ -58220,7 +58161,6 @@ class MultiCamera extends UICorePlugin {
|
|
|
58220
58161
|
this.currentCamera = null;
|
|
58221
58162
|
this.noActiveStreams = true;
|
|
58222
58163
|
this.core.trigger('core:multicamera:no_active_translation');
|
|
58223
|
-
// this.changeById(this.multicamera[nextIndex].id);
|
|
58224
58164
|
}
|
|
58225
58165
|
showError() {
|
|
58226
58166
|
this.core.activePlayback.pause();
|
|
@@ -58243,7 +58183,7 @@ class MultiCamera extends UICorePlugin {
|
|
|
58243
58183
|
}
|
|
58244
58184
|
hideError() {
|
|
58245
58185
|
try {
|
|
58246
|
-
this.core.
|
|
58186
|
+
this.core.getPlugin('media_control')?.enableControlButton();
|
|
58247
58187
|
}
|
|
58248
58188
|
catch (error) {
|
|
58249
58189
|
reportError(error);
|
|
@@ -58253,14 +58193,9 @@ class MultiCamera extends UICorePlugin {
|
|
|
58253
58193
|
trace(`${T$6} changeById`, { id });
|
|
58254
58194
|
queueMicrotask(() => {
|
|
58255
58195
|
const playbackOptions = this.core.options.playback || {};
|
|
58256
|
-
// TODO figure out
|
|
58196
|
+
// TODO figure out if it's needed
|
|
58257
58197
|
playbackOptions.recycleVideo = Browser.isMobile;
|
|
58258
|
-
this.currentCamera = this.findElementById(id)
|
|
58259
|
-
trace(`${T$6} changeById`, {
|
|
58260
|
-
id,
|
|
58261
|
-
currentCamera: this.currentCamera,
|
|
58262
|
-
multicamera: this.multicamera,
|
|
58263
|
-
});
|
|
58198
|
+
this.currentCamera = this.findElementById(id);
|
|
58264
58199
|
if (!this.currentCamera) {
|
|
58265
58200
|
return;
|
|
58266
58201
|
}
|
|
@@ -58282,26 +58217,16 @@ class MultiCamera extends UICorePlugin {
|
|
|
58282
58217
|
this.core.configure({
|
|
58283
58218
|
playback: playbackOptions,
|
|
58284
58219
|
source: this.currentCamera.source, // TODO ensure that the preferred transport is used
|
|
58285
|
-
video360: {
|
|
58286
|
-
// TODO
|
|
58287
|
-
projection: this.currentCamera.projection,
|
|
58288
|
-
},
|
|
58289
58220
|
fullscreenDisable,
|
|
58290
58221
|
autoPlay: this.playing,
|
|
58291
58222
|
disableCanAutoPlay: true,
|
|
58292
58223
|
});
|
|
58293
|
-
this.core.activeContainer
|
|
58224
|
+
this.core.activeContainer?.enableMediaControl();
|
|
58294
58225
|
});
|
|
58295
58226
|
this.toggleContextMenu();
|
|
58296
58227
|
}
|
|
58297
|
-
getCamerasList() {
|
|
58298
|
-
return this.multicamera;
|
|
58299
|
-
}
|
|
58300
|
-
getCurrentCamera() {
|
|
58301
|
-
return this.currentCamera;
|
|
58302
|
-
}
|
|
58303
58228
|
findElementById(id) {
|
|
58304
|
-
return this.multicamera.find((element) => element.id === id);
|
|
58229
|
+
return this.multicamera.find((element) => element.id === id) ?? null;
|
|
58305
58230
|
}
|
|
58306
58231
|
findIndexById(id) {
|
|
58307
58232
|
return this.multicamera.findIndex((element) => element.id === id);
|
|
@@ -58310,19 +58235,13 @@ class MultiCamera extends UICorePlugin {
|
|
|
58310
58235
|
this.toggleContextMenu();
|
|
58311
58236
|
}
|
|
58312
58237
|
hideSelectLevelMenu() {
|
|
58313
|
-
this.$('
|
|
58238
|
+
this.$('ul').hide();
|
|
58314
58239
|
}
|
|
58315
58240
|
toggleContextMenu() {
|
|
58316
|
-
this.$('
|
|
58241
|
+
this.$('ul').toggle();
|
|
58317
58242
|
}
|
|
58318
|
-
// private buttonElement(): ZeptoResult {
|
|
58319
|
-
// return this.$('.multicamera button');
|
|
58320
|
-
// }
|
|
58321
|
-
// private buttonElementText(): ZeptoResult {
|
|
58322
|
-
// return this.$('.multicamera button .quality-text');
|
|
58323
|
-
// }
|
|
58324
58243
|
levelElement(id) {
|
|
58325
|
-
return this.$('.multicamera
|
|
58244
|
+
return this.$('ul .multicamera-item' +
|
|
58326
58245
|
(id !== undefined
|
|
58327
58246
|
? '[data-multicamera-selector-select="' + id + '"]'
|
|
58328
58247
|
: ''));
|
|
@@ -58334,6 +58253,22 @@ class MultiCamera extends UICorePlugin {
|
|
|
58334
58253
|
this.levelElement(this.currentCamera.id).addClass('multicamera-active');
|
|
58335
58254
|
}
|
|
58336
58255
|
}
|
|
58256
|
+
function expandMediaSource(source) {
|
|
58257
|
+
const result = [{
|
|
58258
|
+
source: source.source,
|
|
58259
|
+
mimeType: guessMimeType(source.source),
|
|
58260
|
+
}];
|
|
58261
|
+
if (source.source_dash) {
|
|
58262
|
+
result.push({
|
|
58263
|
+
source: source.source_dash,
|
|
58264
|
+
mimeType: MIME_TYPE_DASH,
|
|
58265
|
+
});
|
|
58266
|
+
}
|
|
58267
|
+
if (source.hls_mpegts_url) {
|
|
58268
|
+
result.push(source.hls_mpegts_url);
|
|
58269
|
+
}
|
|
58270
|
+
return result;
|
|
58271
|
+
}
|
|
58337
58272
|
|
|
58338
58273
|
const pipIcon = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M21.05 3.00001C21.302 3.00001 21.5435 3.10003 21.7217 3.27833C21.9 3.45646 22 3.69802 22 3.95003V10.6H20.1V4.90003H4.90001V18.2H10.6V20.1H3.95001C3.69802 20.1 3.45647 20 3.27832 19.8217C3.10002 19.6436 3 19.402 3 19.15V3.95001C3 3.69802 3.10002 3.45647 3.27832 3.27832C3.45644 3.10002 3.69801 3 3.95001 3L21.05 3.00001ZM21.05 12.5C21.302 12.5 21.5435 12.6 21.7217 12.7783C21.9 12.9565 22 13.198 22 13.45V19.15C22 19.402 21.9 19.6436 21.7217 19.8217C21.5436 20 21.302 20.1 21.05 20.1H13.45C13.198 20.1 12.9564 20 12.7783 19.8217C12.6 19.6436 12.5 19.402 12.5 19.15V13.45C12.5 13.198 12.6 12.9565 12.7783 12.7783C12.9564 12.6 13.198 12.5 13.45 12.5H21.05ZM7.47178 6.12823L9.60928 8.26572L11.5501 6.32492V11.5499H6.32509L8.26589 9.60911L6.12839 7.47161L7.47178 6.12823Z\"\n fill=\"#C9C9C9\"/>\n</svg>\n";
|
|
58339
58274
|
|
|
@@ -59764,45 +59699,6 @@ function noSync(cb) {
|
|
|
59764
59699
|
* `PLUGIN` that is managing the automatic failover between media sources.
|
|
59765
59700
|
* @public
|
|
59766
59701
|
* @remarks
|
|
59767
|
-
* Have a look at the {@link https://miro.com/app/board/uXjVLiN15tY=/?share_link_id=390327585787 | source failover diagram} for the details
|
|
59768
|
-
* on how sources ordering and selection works. Below is a simplified diagram:
|
|
59769
|
-
*
|
|
59770
|
-
* ```markdown
|
|
59771
|
-
* sources_list:
|
|
59772
|
-
* - a.mpd | +--------------------+
|
|
59773
|
-
* - b.m3u8 |--->| init |
|
|
59774
|
-
* - ... | |--------------------|
|
|
59775
|
-
* | current_source = 0 |
|
|
59776
|
-
* +--------------------+
|
|
59777
|
-
* |
|
|
59778
|
-
* | source = a.mpd
|
|
59779
|
-
* | playback = dash.js
|
|
59780
|
-
* v
|
|
59781
|
-
* +------------------+
|
|
59782
|
-
* +-->| load source |
|
|
59783
|
-
* | +---------|--------+
|
|
59784
|
-
* | v
|
|
59785
|
-
* | +------------------+
|
|
59786
|
-
* | | play |
|
|
59787
|
-
* | +---------|--------+
|
|
59788
|
-
* | |
|
|
59789
|
-
* | v
|
|
59790
|
-
* | +-----------------------+
|
|
59791
|
-
* | | on playback_error |
|
|
59792
|
-
* | |-----------------------|
|
|
59793
|
-
* | | current_source = |
|
|
59794
|
-
* | | (current_source + 1) |
|
|
59795
|
-
* | | % len sources_list |
|
|
59796
|
-
* | | |
|
|
59797
|
-
* | | delay 1..3s |
|
|
59798
|
-
* | +---------------|-------+
|
|
59799
|
-
* | |
|
|
59800
|
-
* | source=b.m3u8 |
|
|
59801
|
-
* | playback=hls.js |
|
|
59802
|
-
* +-------------------+
|
|
59803
|
-
*
|
|
59804
|
-
* ```
|
|
59805
|
-
*
|
|
59806
59702
|
* @example
|
|
59807
59703
|
* ```ts
|
|
59808
59704
|
* import { SourceController } from '@gcorevideo/player'
|
package/docs/api/player.md
CHANGED
|
@@ -909,6 +909,28 @@ Identifies a location for mounting custom media control elements.
|
|
|
909
909
|
|
|
910
910
|
|
|
911
911
|
|
|
912
|
+
</td></tr>
|
|
913
|
+
<tr><td>
|
|
914
|
+
|
|
915
|
+
[MulticCameraSourceInfo](./player.multiccamerasourceinfo.md)
|
|
916
|
+
|
|
917
|
+
|
|
918
|
+
</td><td>
|
|
919
|
+
|
|
920
|
+
**_(BETA)_** Extended media source description
|
|
921
|
+
|
|
922
|
+
|
|
923
|
+
</td></tr>
|
|
924
|
+
<tr><td>
|
|
925
|
+
|
|
926
|
+
[MultisourcesMode](./player.multisourcesmode.md)
|
|
927
|
+
|
|
928
|
+
|
|
929
|
+
</td><td>
|
|
930
|
+
|
|
931
|
+
**_(BETA)_**
|
|
932
|
+
|
|
933
|
+
|
|
912
934
|
</td></tr>
|
|
913
935
|
<tr><td>
|
|
914
936
|
|
|
@@ -1163,15 +1185,6 @@ Preferred streaming media delivery protocol
|
|
|
1163
1185
|
|
|
1164
1186
|
|
|
1165
1187
|
|
|
1166
|
-
</td></tr>
|
|
1167
|
-
<tr><td>
|
|
1168
|
-
|
|
1169
|
-
[VTTCueInfo](./player.vttcueinfo.md)
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
</td><td>
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
1188
|
</td></tr>
|
|
1176
1189
|
<tr><td>
|
|
1177
1190
|
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
|
2
|
+
|
|
3
|
+
[Home](./index.md) > [@gcorevideo/player](./player.md) > [MediaControl](./player.mediacontrol.md) > [setKeepVisible](./player.mediacontrol.setkeepvisible.md)
|
|
4
|
+
|
|
5
|
+
## MediaControl.setKeepVisible() method
|
|
6
|
+
|
|
7
|
+
Set or reset the keep visibility state
|
|
8
|
+
|
|
9
|
+
Keep visibility state controls whether the media control is hidden automatically after a delay, which is a default behaviour.
|
|
10
|
+
|
|
11
|
+
**Signature:**
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
setKeepVisible(keepVisible: boolean): void;
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Parameters
|
|
18
|
+
|
|
19
|
+
<table><thead><tr><th>
|
|
20
|
+
|
|
21
|
+
Parameter
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
</th><th>
|
|
25
|
+
|
|
26
|
+
Type
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
</th><th>
|
|
30
|
+
|
|
31
|
+
Description
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
</th></tr></thead>
|
|
35
|
+
<tbody><tr><td>
|
|
36
|
+
|
|
37
|
+
keepVisible
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
</td><td>
|
|
41
|
+
|
|
42
|
+
boolean
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
</td><td>
|
|
46
|
+
|
|
47
|
+
The state
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
</td></tr>
|
|
51
|
+
</tbody></table>
|
|
52
|
+
|
|
53
|
+
**Returns:**
|
|
54
|
+
|
|
55
|
+
void
|
|
56
|
+
|
|
@@ -223,20 +223,6 @@ Description
|
|
|
223
223
|
</th></tr></thead>
|
|
224
224
|
<tbody><tr><td>
|
|
225
225
|
|
|
226
|
-
[activeById(id, active)](./player.multicamera.activebyid.md)
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
</td><td>
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
</td><td>
|
|
233
|
-
|
|
234
|
-
**_(BETA)_**
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
</td></tr>
|
|
238
|
-
<tr><td>
|
|
239
|
-
|
|
240
226
|
[bindEvents()](./player.multicamera.bindevents.md)
|
|
241
227
|
|
|
242
228
|
|
|
@@ -262,20 +248,6 @@ Description
|
|
|
262
248
|
**_(BETA)_**
|
|
263
249
|
|
|
264
250
|
|
|
265
|
-
</td></tr>
|
|
266
|
-
<tr><td>
|
|
267
|
-
|
|
268
|
-
[unBindEvents()](./player.multicamera.unbindevents.md)
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
</td><td>
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
</td><td>
|
|
275
|
-
|
|
276
|
-
**_(BETA)_**
|
|
277
|
-
|
|
278
|
-
|
|
279
251
|
</td></tr>
|
|
280
252
|
</tbody></table>
|
|
281
253
|
|