react-native-theoplayer 8.9.0 → 8.9.1
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/CHANGELOG.md +6 -0
- package/android/build.gradle +1 -1
- package/lib/commonjs/internal/THEOplayerView.web.js +11 -2
- package/lib/commonjs/internal/THEOplayerView.web.js.map +1 -1
- package/lib/commonjs/internal/utils/ServiceWorkerUtils.js +44 -0
- package/lib/commonjs/internal/utils/ServiceWorkerUtils.js.map +1 -0
- package/lib/commonjs/manifest.json +1 -1
- package/lib/module/internal/THEOplayerView.web.js +11 -2
- package/lib/module/internal/THEOplayerView.web.js.map +1 -1
- package/lib/module/internal/utils/ServiceWorkerUtils.js +36 -0
- package/lib/module/internal/utils/ServiceWorkerUtils.js.map +1 -0
- package/lib/module/manifest.json +1 -1
- package/lib/typescript/api/config/PlayerConfiguration.d.ts +6 -0
- package/lib/typescript/api/config/PlayerConfiguration.d.ts.map +1 -1
- package/lib/typescript/internal/THEOplayerView.web.d.ts.map +1 -1
- package/lib/typescript/internal/utils/ServiceWorkerUtils.d.ts +4 -0
- package/lib/typescript/internal/utils/ServiceWorkerUtils.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/api/config/PlayerConfiguration.ts +7 -0
- package/src/internal/THEOplayerView.web.tsx +12 -2
- package/src/internal/utils/ServiceWorkerUtils.ts +39 -0
- package/src/manifest.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.1.0/)
|
|
6
6
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [8.9.1] - 24-12-04
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Added a `enableTHEOlive` flag to `PlayerConfiguration` to enable play-out of THEOlive sources.
|
|
13
|
+
|
|
8
14
|
## [8.9.0] - 24-11-29
|
|
9
15
|
|
|
10
16
|
### Added
|
package/android/build.gradle
CHANGED
|
@@ -32,7 +32,7 @@ def enabledTHEOads = safeExtGet("THEOplayer_extensionTHEOads", 'false').toBoolea
|
|
|
32
32
|
def enabledAds = enabledGoogleIMA || enabledGoogleDAI || enabledTHEOads
|
|
33
33
|
def enabledCast = safeExtGet("THEOplayer_extensionCast", 'false').toBoolean()
|
|
34
34
|
def enabledMediaSession = safeExtGet("THEOplayer_extensionMediaSession", 'true').toBoolean()
|
|
35
|
-
def enabledMedia3 = safeExtGet("THEOplayer_extensionMedia3", '
|
|
35
|
+
def enabledMedia3 = safeExtGet("THEOplayer_extensionMedia3", 'false').toBoolean()
|
|
36
36
|
|
|
37
37
|
android {
|
|
38
38
|
compileSdk safeExtGet('THEOplayer_compileSdkVersion', 34)
|
|
@@ -7,6 +7,7 @@ exports.THEOplayerView = THEOplayerView;
|
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _theoplayer = require("theoplayer");
|
|
9
9
|
var _THEOplayerWebAdapter = require("./adapter/THEOplayerWebAdapter");
|
|
10
|
+
var _ServiceWorkerUtils = require("./utils/ServiceWorkerUtils");
|
|
10
11
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
11
12
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
12
13
|
function THEOplayerView(props) {
|
|
@@ -17,6 +18,14 @@ function THEOplayerView(props) {
|
|
|
17
18
|
const player = (0, _react.useRef)(null);
|
|
18
19
|
const adapter = (0, _react.useRef)(null);
|
|
19
20
|
const container = (0, _react.useRef)(null);
|
|
21
|
+
const preparePlayer = async adapter => {
|
|
22
|
+
if (config?.enableTHEOlive == true && (0, _ServiceWorkerUtils.browserCanPlayHLSAndHasNoMSE)()) {
|
|
23
|
+
await (0, _ServiceWorkerUtils.registerServiceWorker)(props.config?.libraryLocation);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Notify the player is ready
|
|
27
|
+
props.onPlayerReady?.(adapter);
|
|
28
|
+
};
|
|
20
29
|
(0, _react.useEffect)(() => {
|
|
21
30
|
// Create player inside container.
|
|
22
31
|
if (container.current) {
|
|
@@ -57,8 +66,8 @@ function THEOplayerView(props) {
|
|
|
57
66
|
// @ts-ignore
|
|
58
67
|
window.nativePlayer = player;
|
|
59
68
|
|
|
60
|
-
//
|
|
61
|
-
|
|
69
|
+
// Prepare & notify
|
|
70
|
+
void preparePlayer(adapter.current);
|
|
62
71
|
}
|
|
63
72
|
|
|
64
73
|
// Clean-up
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_theoplayer","_THEOplayerWebAdapter","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","THEOplayerView","props","config","children","player","useRef","adapter","container","useEffect","current","chromeless","undefined","ads","googleIma","ima","useNativeIma","language","ui","updatedConfig","allowNativeFullscreen","ChromelessPlayer","Player","fluid","THEOplayerWebAdapter","window","nativePlayer","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_theoplayer","_THEOplayerWebAdapter","_ServiceWorkerUtils","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","THEOplayerView","props","config","children","player","useRef","adapter","container","preparePlayer","enableTHEOlive","browserCanPlayHLSAndHasNoMSE","registerServiceWorker","libraryLocation","onPlayerReady","useEffect","current","chromeless","undefined","ads","googleIma","ima","useNativeIma","language","ui","updatedConfig","allowNativeFullscreen","ChromelessPlayer","Player","fluid","THEOplayerWebAdapter","window","nativePlayer","onPlayerDestroy","destroy","createElement","Fragment","ref","style","styles","className","display","position","width","height","maxHeight","maxWidth","aspectRatio"],"sourceRoot":"../../../src","sources":["internal/THEOplayerView.web.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.browserCanPlayHLSAndHasNoMSE = browserCanPlayHLSAndHasNoMSE;
|
|
7
|
+
exports.maybeUnregisterServiceWorker = maybeUnregisterServiceWorker;
|
|
8
|
+
exports.registerServiceWorker = registerServiceWorker;
|
|
9
|
+
function browserCanPlayHLSAndHasNoMSE() {
|
|
10
|
+
const videoElement = document.createElement('video');
|
|
11
|
+
const canPlayHls = videoElement && videoElement.canPlayType && videoElement.canPlayType('application/vnd.apple.mpegURL') !== '';
|
|
12
|
+
// @ts-ignore
|
|
13
|
+
const canPlayMse = Boolean(window.MediaSource || window.WebKitMediaSource || window.ManagedMediaSource);
|
|
14
|
+
return canPlayHls && !canPlayMse;
|
|
15
|
+
}
|
|
16
|
+
async function registerServiceWorker(libraryLocation) {
|
|
17
|
+
if ('serviceWorker' in navigator) {
|
|
18
|
+
try {
|
|
19
|
+
const serviceWorkerName = 'theoplayer.sw.js';
|
|
20
|
+
const serviceWorkerPath = libraryLocation ? (libraryLocation.endsWith('/') ? libraryLocation : `${libraryLocation}/`) + serviceWorkerName : serviceWorkerName;
|
|
21
|
+
const serviceWorkerScope = libraryLocation ? libraryLocation.endsWith('/') ? libraryLocation : `${libraryLocation}/` : '/';
|
|
22
|
+
|
|
23
|
+
// unregister beforehand to solve an issue when doing a hard reload of the page causing the service worker to not intercept the manifests.
|
|
24
|
+
await maybeUnregisterServiceWorker(serviceWorkerPath);
|
|
25
|
+
await navigator.serviceWorker.register(serviceWorkerPath, {
|
|
26
|
+
scope: serviceWorkerScope
|
|
27
|
+
});
|
|
28
|
+
//console.log('Successfully registered server worker');
|
|
29
|
+
} catch (error) {
|
|
30
|
+
console.error(`Service worker registration failed: ${error}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async function maybeUnregisterServiceWorker(serviceWorkerPath) {
|
|
35
|
+
if ('serviceWorker' in navigator) {
|
|
36
|
+
try {
|
|
37
|
+
const registration = await navigator.serviceWorker.getRegistration(serviceWorkerPath);
|
|
38
|
+
await registration?.unregister();
|
|
39
|
+
} catch (error) {
|
|
40
|
+
console.error(`Service worker unregistration failed: ${error}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=ServiceWorkerUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["browserCanPlayHLSAndHasNoMSE","videoElement","document","createElement","canPlayHls","canPlayType","canPlayMse","Boolean","window","MediaSource","WebKitMediaSource","ManagedMediaSource","registerServiceWorker","libraryLocation","navigator","serviceWorkerName","serviceWorkerPath","endsWith","serviceWorkerScope","maybeUnregisterServiceWorker","serviceWorker","register","scope","error","console","registration","getRegistration","unregister"],"sourceRoot":"../../../../src","sources":["internal/utils/ServiceWorkerUtils.ts"],"mappings":";;;;;;;;AAAO,SAASA,4BAA4BA,CAAA,EAAG;EAC7C,MAAMC,YAAY,GAAGC,QAAQ,CAACC,aAAa,CAAC,OAAO,CAAC;EACpD,MAAMC,UAAU,GAAGH,YAAY,IAAIA,YAAY,CAACI,WAAW,IAAIJ,YAAY,CAACI,WAAW,CAAC,+BAA+B,CAAC,KAAK,EAAE;EAC/H;EACA,MAAMC,UAAU,GAAGC,OAAO,CAACC,MAAM,CAACC,WAAW,IAAID,MAAM,CAACE,iBAAiB,IAAIF,MAAM,CAACG,kBAAkB,CAAC;EACvG,OAAOP,UAAU,IAAI,CAACE,UAAU;AAClC;AAEO,eAAeM,qBAAqBA,CAACC,eAAwB,EAAiB;EACnF,IAAI,eAAe,IAAIC,SAAS,EAAE;IAChC,IAAI;MACF,MAAMC,iBAAiB,GAAG,kBAAkB;MAC5C,MAAMC,iBAAiB,GAAGH,eAAe,GACrC,CAACA,eAAe,CAACI,QAAQ,CAAC,GAAG,CAAC,GAAGJ,eAAe,GAAG,GAAGA,eAAe,GAAG,IAAIE,iBAAiB,GAC7FA,iBAAiB;MACrB,MAAMG,kBAAkB,GAAGL,eAAe,GAAIA,eAAe,CAACI,QAAQ,CAAC,GAAG,CAAC,GAAGJ,eAAe,GAAG,GAAGA,eAAe,GAAG,GAAI,GAAG;;MAE5H;MACA,MAAMM,4BAA4B,CAACH,iBAAiB,CAAC;MACrD,MAAMF,SAAS,CAACM,aAAa,CAACC,QAAQ,CAACL,iBAAiB,EAAE;QACxDM,KAAK,EAAEJ;MACT,CAAC,CAAC;MACF;IACF,CAAC,CAAC,OAAOK,KAAK,EAAE;MACdC,OAAO,CAACD,KAAK,CAAC,uCAAuCA,KAAK,EAAE,CAAC;IAC/D;EACF;AACF;AAEO,eAAeJ,4BAA4BA,CAACH,iBAA0B,EAAiB;EAC5F,IAAI,eAAe,IAAIF,SAAS,EAAE;IAChC,IAAI;MACF,MAAMW,YAAY,GAAG,MAAMX,SAAS,CAACM,aAAa,CAACM,eAAe,CAACV,iBAAiB,CAAC;MACrF,MAAMS,YAAY,EAAEE,UAAU,CAAC,CAAC;IAClC,CAAC,CAAC,OAAOJ,KAAK,EAAE;MACdC,OAAO,CAACD,KAAK,CAAC,yCAAyCA,KAAK,EAAE,CAAC;IACjE;EACF;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"8.9.
|
|
1
|
+
{"version":"8.9.1","buildDate":"2024-12-04T22:29:12.349Z"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { useEffect, useRef } from 'react';
|
|
2
2
|
import { Player, ChromelessPlayer } from 'theoplayer';
|
|
3
3
|
import { THEOplayerWebAdapter } from './adapter/THEOplayerWebAdapter';
|
|
4
|
+
import { registerServiceWorker, browserCanPlayHLSAndHasNoMSE } from './utils/ServiceWorkerUtils';
|
|
4
5
|
export function THEOplayerView(props) {
|
|
5
6
|
const {
|
|
6
7
|
config,
|
|
@@ -9,6 +10,14 @@ export function THEOplayerView(props) {
|
|
|
9
10
|
const player = useRef(null);
|
|
10
11
|
const adapter = useRef(null);
|
|
11
12
|
const container = useRef(null);
|
|
13
|
+
const preparePlayer = async adapter => {
|
|
14
|
+
if (config?.enableTHEOlive == true && browserCanPlayHLSAndHasNoMSE()) {
|
|
15
|
+
await registerServiceWorker(props.config?.libraryLocation);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// Notify the player is ready
|
|
19
|
+
props.onPlayerReady?.(adapter);
|
|
20
|
+
};
|
|
12
21
|
useEffect(() => {
|
|
13
22
|
// Create player inside container.
|
|
14
23
|
if (container.current) {
|
|
@@ -49,8 +58,8 @@ export function THEOplayerView(props) {
|
|
|
49
58
|
// @ts-ignore
|
|
50
59
|
window.nativePlayer = player;
|
|
51
60
|
|
|
52
|
-
//
|
|
53
|
-
|
|
61
|
+
// Prepare & notify
|
|
62
|
+
void preparePlayer(adapter.current);
|
|
54
63
|
}
|
|
55
64
|
|
|
56
65
|
// Clean-up
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useRef","Player","ChromelessPlayer","THEOplayerWebAdapter","THEOplayerView","props","config","children","player","adapter","container","current","chromeless","undefined","ads","googleIma","ima","useNativeIma","language","ui","updatedConfig","allowNativeFullscreen","fluid","window","nativePlayer","
|
|
1
|
+
{"version":3,"names":["React","useEffect","useRef","Player","ChromelessPlayer","THEOplayerWebAdapter","registerServiceWorker","browserCanPlayHLSAndHasNoMSE","THEOplayerView","props","config","children","player","adapter","container","preparePlayer","enableTHEOlive","libraryLocation","onPlayerReady","current","chromeless","undefined","ads","googleIma","ima","useNativeIma","language","ui","updatedConfig","allowNativeFullscreen","fluid","window","nativePlayer","onPlayerDestroy","destroy","createElement","Fragment","ref","style","styles","className","display","position","width","height","maxHeight","maxWidth","aspectRatio"],"sourceRoot":"../../../src","sources":["internal/THEOplayerView.web.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export function browserCanPlayHLSAndHasNoMSE() {
|
|
2
|
+
const videoElement = document.createElement('video');
|
|
3
|
+
const canPlayHls = videoElement && videoElement.canPlayType && videoElement.canPlayType('application/vnd.apple.mpegURL') !== '';
|
|
4
|
+
// @ts-ignore
|
|
5
|
+
const canPlayMse = Boolean(window.MediaSource || window.WebKitMediaSource || window.ManagedMediaSource);
|
|
6
|
+
return canPlayHls && !canPlayMse;
|
|
7
|
+
}
|
|
8
|
+
export async function registerServiceWorker(libraryLocation) {
|
|
9
|
+
if ('serviceWorker' in navigator) {
|
|
10
|
+
try {
|
|
11
|
+
const serviceWorkerName = 'theoplayer.sw.js';
|
|
12
|
+
const serviceWorkerPath = libraryLocation ? (libraryLocation.endsWith('/') ? libraryLocation : `${libraryLocation}/`) + serviceWorkerName : serviceWorkerName;
|
|
13
|
+
const serviceWorkerScope = libraryLocation ? libraryLocation.endsWith('/') ? libraryLocation : `${libraryLocation}/` : '/';
|
|
14
|
+
|
|
15
|
+
// unregister beforehand to solve an issue when doing a hard reload of the page causing the service worker to not intercept the manifests.
|
|
16
|
+
await maybeUnregisterServiceWorker(serviceWorkerPath);
|
|
17
|
+
await navigator.serviceWorker.register(serviceWorkerPath, {
|
|
18
|
+
scope: serviceWorkerScope
|
|
19
|
+
});
|
|
20
|
+
//console.log('Successfully registered server worker');
|
|
21
|
+
} catch (error) {
|
|
22
|
+
console.error(`Service worker registration failed: ${error}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export async function maybeUnregisterServiceWorker(serviceWorkerPath) {
|
|
27
|
+
if ('serviceWorker' in navigator) {
|
|
28
|
+
try {
|
|
29
|
+
const registration = await navigator.serviceWorker.getRegistration(serviceWorkerPath);
|
|
30
|
+
await registration?.unregister();
|
|
31
|
+
} catch (error) {
|
|
32
|
+
console.error(`Service worker unregistration failed: ${error}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=ServiceWorkerUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["browserCanPlayHLSAndHasNoMSE","videoElement","document","createElement","canPlayHls","canPlayType","canPlayMse","Boolean","window","MediaSource","WebKitMediaSource","ManagedMediaSource","registerServiceWorker","libraryLocation","navigator","serviceWorkerName","serviceWorkerPath","endsWith","serviceWorkerScope","maybeUnregisterServiceWorker","serviceWorker","register","scope","error","console","registration","getRegistration","unregister"],"sourceRoot":"../../../../src","sources":["internal/utils/ServiceWorkerUtils.ts"],"mappings":"AAAA,OAAO,SAASA,4BAA4BA,CAAA,EAAG;EAC7C,MAAMC,YAAY,GAAGC,QAAQ,CAACC,aAAa,CAAC,OAAO,CAAC;EACpD,MAAMC,UAAU,GAAGH,YAAY,IAAIA,YAAY,CAACI,WAAW,IAAIJ,YAAY,CAACI,WAAW,CAAC,+BAA+B,CAAC,KAAK,EAAE;EAC/H;EACA,MAAMC,UAAU,GAAGC,OAAO,CAACC,MAAM,CAACC,WAAW,IAAID,MAAM,CAACE,iBAAiB,IAAIF,MAAM,CAACG,kBAAkB,CAAC;EACvG,OAAOP,UAAU,IAAI,CAACE,UAAU;AAClC;AAEA,OAAO,eAAeM,qBAAqBA,CAACC,eAAwB,EAAiB;EACnF,IAAI,eAAe,IAAIC,SAAS,EAAE;IAChC,IAAI;MACF,MAAMC,iBAAiB,GAAG,kBAAkB;MAC5C,MAAMC,iBAAiB,GAAGH,eAAe,GACrC,CAACA,eAAe,CAACI,QAAQ,CAAC,GAAG,CAAC,GAAGJ,eAAe,GAAG,GAAGA,eAAe,GAAG,IAAIE,iBAAiB,GAC7FA,iBAAiB;MACrB,MAAMG,kBAAkB,GAAGL,eAAe,GAAIA,eAAe,CAACI,QAAQ,CAAC,GAAG,CAAC,GAAGJ,eAAe,GAAG,GAAGA,eAAe,GAAG,GAAI,GAAG;;MAE5H;MACA,MAAMM,4BAA4B,CAACH,iBAAiB,CAAC;MACrD,MAAMF,SAAS,CAACM,aAAa,CAACC,QAAQ,CAACL,iBAAiB,EAAE;QACxDM,KAAK,EAAEJ;MACT,CAAC,CAAC;MACF;IACF,CAAC,CAAC,OAAOK,KAAK,EAAE;MACdC,OAAO,CAACD,KAAK,CAAC,uCAAuCA,KAAK,EAAE,CAAC;IAC/D;EACF;AACF;AAEA,OAAO,eAAeJ,4BAA4BA,CAACH,iBAA0B,EAAiB;EAC5F,IAAI,eAAe,IAAIF,SAAS,EAAE;IAChC,IAAI;MACF,MAAMW,YAAY,GAAG,MAAMX,SAAS,CAACM,aAAa,CAACM,eAAe,CAACV,iBAAiB,CAAC;MACrF,MAAMS,YAAY,EAAEE,UAAU,CAAC,CAAC;IAClC,CAAC,CAAC,OAAOJ,KAAK,EAAE;MACdC,OAAO,CAACD,KAAK,CAAC,yCAAyCA,KAAK,EAAE,CAAC;IACjE;EACF;AACF","ignoreList":[]}
|
package/lib/module/manifest.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"8.9.
|
|
1
|
+
{"version":"8.9.1","buildDate":"2024-12-04T22:29:12.349Z"}
|
|
@@ -86,6 +86,12 @@ export interface PlayerConfiguration {
|
|
|
86
86
|
* @defaultValue `false`.
|
|
87
87
|
*/
|
|
88
88
|
useMedia3?: boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Sets whether support for THEOlive sources should be enabled.
|
|
91
|
+
*
|
|
92
|
+
* @defaultValue `false`.
|
|
93
|
+
*/
|
|
94
|
+
enableTHEOlive?: boolean;
|
|
89
95
|
}
|
|
90
96
|
/**
|
|
91
97
|
* The muted autoplay policy of a player for web.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlayerConfiguration.d.ts","sourceRoot":"","sources":["../../../../src/api/config/PlayerConfiguration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,0BAA0B,CAAC;IAE3C;;OAEG;IACH,GAAG,CAAC,EAAE,gBAAgB,CAAC;IAEvB;;OAEG;IACH,IAAI,CAAC,EAAE,iBAAiB,CAAC;IAEzB;;OAEG;IACH,EAAE,CAAC,EAAE,eAAe,CAAC;IAErB;;OAEG;IACH,YAAY,CAAC,EAAE,yBAAyB,CAAC;IAEzC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAEjD;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"PlayerConfiguration.d.ts","sourceRoot":"","sources":["../../../../src/api/config/PlayerConfiguration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,0BAA0B,CAAC;IAE3C;;OAEG;IACH,GAAG,CAAC,EAAE,gBAAgB,CAAC;IAEvB;;OAEG;IACH,IAAI,CAAC,EAAE,iBAAiB,CAAC;IAEzB;;OAEG;IACH,EAAE,CAAC,EAAE,eAAe,CAAC;IAErB;;OAEG;IACH,YAAY,CAAC,EAAE,yBAAyB,CAAC;IAEzC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAEjD;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,0BAA0B,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"THEOplayerView.web.d.ts","sourceRoot":"","sources":["../../../src/internal/THEOplayerView.web.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"THEOplayerView.web.d.ts","sourceRoot":"","sources":["../../../src/internal/THEOplayerView.web.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAKnE,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,qBAiFjF"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function browserCanPlayHLSAndHasNoMSE(): boolean;
|
|
2
|
+
export declare function registerServiceWorker(libraryLocation?: string): Promise<void>;
|
|
3
|
+
export declare function maybeUnregisterServiceWorker(serviceWorkerPath?: string): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=ServiceWorkerUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceWorkerUtils.d.ts","sourceRoot":"","sources":["../../../../src/internal/utils/ServiceWorkerUtils.ts"],"names":[],"mappings":"AAAA,wBAAgB,4BAA4B,YAM3C;AAED,wBAAsB,qBAAqB,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBnF;AAED,wBAAsB,4BAA4B,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS5F"}
|
package/package.json
CHANGED
|
@@ -99,6 +99,13 @@ export interface PlayerConfiguration {
|
|
|
99
99
|
* @defaultValue `false`.
|
|
100
100
|
*/
|
|
101
101
|
useMedia3?: boolean;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Sets whether support for THEOlive sources should be enabled.
|
|
105
|
+
*
|
|
106
|
+
* @defaultValue `false`.
|
|
107
|
+
*/
|
|
108
|
+
enableTHEOlive?: boolean;
|
|
102
109
|
}
|
|
103
110
|
|
|
104
111
|
/**
|
|
@@ -2,6 +2,7 @@ import React, { useEffect, useRef } from 'react';
|
|
|
2
2
|
import type { THEOplayerViewProps } from 'react-native-theoplayer';
|
|
3
3
|
import { Player, ChromelessPlayer, PlayerConfiguration } from 'theoplayer';
|
|
4
4
|
import { THEOplayerWebAdapter } from './adapter/THEOplayerWebAdapter';
|
|
5
|
+
import { registerServiceWorker, browserCanPlayHLSAndHasNoMSE } from './utils/ServiceWorkerUtils';
|
|
5
6
|
|
|
6
7
|
export function THEOplayerView(props: React.PropsWithChildren<THEOplayerViewProps>) {
|
|
7
8
|
const { config, children } = props;
|
|
@@ -9,6 +10,15 @@ export function THEOplayerView(props: React.PropsWithChildren<THEOplayerViewProp
|
|
|
9
10
|
const adapter = useRef<THEOplayerWebAdapter | null>(null);
|
|
10
11
|
const container = useRef<null | HTMLDivElement>(null);
|
|
11
12
|
|
|
13
|
+
const preparePlayer = async (adapter: THEOplayerWebAdapter) => {
|
|
14
|
+
if (config?.enableTHEOlive == true && browserCanPlayHLSAndHasNoMSE()) {
|
|
15
|
+
await registerServiceWorker(props.config?.libraryLocation);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// Notify the player is ready
|
|
19
|
+
props.onPlayerReady?.(adapter);
|
|
20
|
+
};
|
|
21
|
+
|
|
12
22
|
useEffect(() => {
|
|
13
23
|
// Create player inside container.
|
|
14
24
|
if (container.current) {
|
|
@@ -49,8 +59,8 @@ export function THEOplayerView(props: React.PropsWithChildren<THEOplayerViewProp
|
|
|
49
59
|
// @ts-ignore
|
|
50
60
|
window.nativePlayer = player;
|
|
51
61
|
|
|
52
|
-
//
|
|
53
|
-
|
|
62
|
+
// Prepare & notify
|
|
63
|
+
void preparePlayer(adapter.current);
|
|
54
64
|
}
|
|
55
65
|
|
|
56
66
|
// Clean-up
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export function browserCanPlayHLSAndHasNoMSE() {
|
|
2
|
+
const videoElement = document.createElement('video');
|
|
3
|
+
const canPlayHls = videoElement && videoElement.canPlayType && videoElement.canPlayType('application/vnd.apple.mpegURL') !== '';
|
|
4
|
+
// @ts-ignore
|
|
5
|
+
const canPlayMse = Boolean(window.MediaSource || window.WebKitMediaSource || window.ManagedMediaSource);
|
|
6
|
+
return canPlayHls && !canPlayMse;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export async function registerServiceWorker(libraryLocation?: string): Promise<void> {
|
|
10
|
+
if ('serviceWorker' in navigator) {
|
|
11
|
+
try {
|
|
12
|
+
const serviceWorkerName = 'theoplayer.sw.js';
|
|
13
|
+
const serviceWorkerPath = libraryLocation
|
|
14
|
+
? (libraryLocation.endsWith('/') ? libraryLocation : `${libraryLocation}/`) + serviceWorkerName
|
|
15
|
+
: serviceWorkerName;
|
|
16
|
+
const serviceWorkerScope = libraryLocation ? (libraryLocation.endsWith('/') ? libraryLocation : `${libraryLocation}/`) : '/';
|
|
17
|
+
|
|
18
|
+
// unregister beforehand to solve an issue when doing a hard reload of the page causing the service worker to not intercept the manifests.
|
|
19
|
+
await maybeUnregisterServiceWorker(serviceWorkerPath);
|
|
20
|
+
await navigator.serviceWorker.register(serviceWorkerPath, {
|
|
21
|
+
scope: serviceWorkerScope,
|
|
22
|
+
});
|
|
23
|
+
//console.log('Successfully registered server worker');
|
|
24
|
+
} catch (error) {
|
|
25
|
+
console.error(`Service worker registration failed: ${error}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export async function maybeUnregisterServiceWorker(serviceWorkerPath?: string): Promise<void> {
|
|
31
|
+
if ('serviceWorker' in navigator) {
|
|
32
|
+
try {
|
|
33
|
+
const registration = await navigator.serviceWorker.getRegistration(serviceWorkerPath);
|
|
34
|
+
await registration?.unregister();
|
|
35
|
+
} catch (error) {
|
|
36
|
+
console.error(`Service worker unregistration failed: ${error}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
package/src/manifest.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"8.9.
|
|
1
|
+
{"version":"8.9.1","buildDate":"2024-12-04T22:29:12.349Z"}
|