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 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
@@ -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", 'true').toBoolean()
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
- // Notify the player is ready
61
- props.onPlayerReady?.(adapter.current);
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","onPlayerReady","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":[]}
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.0","buildDate":"2024-11-29T16:08:29.064Z"}
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
- // Notify the player is ready
53
- props.onPlayerReady?.(adapter.current);
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","onPlayerReady","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":[]}
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":[]}
@@ -1 +1 @@
1
- {"version":"8.9.0","buildDate":"2024-11-29T16:08:29.064Z"}
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;CACrB;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,0BAA0B,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,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;AAInE,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,qBAwEjF"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-theoplayer",
3
- "version": "8.9.0",
3
+ "version": "8.9.1",
4
4
  "description": "A THEOplayer video component for react-native.",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -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
- // Notify the player is ready
53
- props.onPlayerReady?.(adapter.current);
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.0","buildDate":"2024-11-29T16:08:29.064Z"}
1
+ {"version":"8.9.1","buildDate":"2024-12-04T22:29:12.349Z"}