@mux/playback-core
Advanced tools
Comparing version 0.9.1-canary.6-485423a to 0.9.1-canary.60-186b915
@@ -6,2 +6,28 @@ # Change Log | ||
# [0.11.0](https://github.com/muxinc/elements/compare/@mux/playback-core@0.10.0...@mux/playback-core@0.11.0) (2022-09-16) | ||
### Bug Fixes | ||
- **playback-core:** Make sure event handlers and other references are cleaned up to avoid memory leaks. ([def9853](https://github.com/muxinc/elements/commit/def9853483aa45fdc1f958dfb9ff9b690b30f8eb)) | ||
- **playback-core:** Set both player_software (old key) and player_software_name (new key) in mux data options to sidestep inconsistencies in Mux Data views. ([fbeb5a9](https://github.com/muxinc/elements/commit/fbeb5a9c817fba550ad0662b92a5578db7421fe6)) | ||
- **playback-core:** Use custom teardown event type instead of emptied due to pre-emptive emptied. ([ce8fba8](https://github.com/muxinc/elements/commit/ce8fba810210578fb74615502cf5205222586584)) | ||
- startTime on iOS when preload=auto ([#368](https://github.com/muxinc/elements/issues/368)) ([0f511d4](https://github.com/muxinc/elements/commit/0f511d43474454b683dd7e041bdc3a99937a936e)) | ||
- update to hls.js 1.2.3 ([#386](https://github.com/muxinc/elements/issues/386)) ([a0acfd5](https://github.com/muxinc/elements/commit/a0acfd5ed1fa04390f616ea194fb3972ffe81716)) | ||
- update to hls.js@1.2.1 ([08ed065](https://github.com/muxinc/elements/commit/08ed0652961d140d0db6907f1855847917ee1cd2)) | ||
- update to hls.js@1.2.2 ([b10ee22](https://github.com/muxinc/elements/commit/b10ee221bb9f00e53b6ab25c2e9b57de8e2ae791)) | ||
### Features | ||
- always prefer MSE on android ([ad43416](https://github.com/muxinc/elements/commit/ad43416077c27b15a8ccda5279d08babdde6a90d)), closes [#325](https://github.com/muxinc/elements/issues/325) | ||
# [0.10.0](https://github.com/muxinc/elements/compare/@mux/playback-core@0.9.0...@mux/playback-core@0.10.0) (2022-08-31) | ||
### Bug Fixes | ||
- polyfills mutating global ([#355](https://github.com/muxinc/elements/issues/355)) ([71d18a4](https://github.com/muxinc/elements/commit/71d18a427f0171bb214a0df7c1425d3d1bddc47a)) | ||
### Features | ||
- **playback-core:** Always prefer mse on android. ([05855a4](https://github.com/muxinc/elements/commit/05855a43cb9f87602203fab896e6e6876d7a1b12)) | ||
# [0.9.0](https://github.com/muxinc/elements/compare/@mux/playback-core@0.8.0...@mux/playback-core@0.9.0) (2022-07-21) | ||
@@ -8,0 +34,0 @@ |
@@ -1,2 +0,2 @@ | ||
var ie=Object.create;var h=Object.defineProperty;var ce=Object.getOwnPropertyDescriptor;var ue=Object.getOwnPropertyNames;var le=Object.getPrototypeOf,de=Object.prototype.hasOwnProperty;var K=e=>h(e,"__esModule",{value:!0});var pe=(e,t)=>{K(e);for(var r in t)h(e,r,{get:t[r],enumerable:!0})},ye=(e,t,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ue(t))!de.call(e,n)&&n!=="default"&&h(e,n,{get:()=>t[n],enumerable:!(r=ce(t,n))||r.enumerable});return e},P=e=>ye(K(h(e!=null?ie(le(e)):{},"default",e&&e.__esModule&&"default"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);var B=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)};var F=(e,t,r)=>(B(e,t,"read from private field"),r?r.call(e):t.get(e)),q=(e,t,r)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,r)},Y=(e,t,r,n)=>(B(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r);pe(exports,{ExtensionMimeTypeMap:()=>g,Hls:()=>T.default,MediaError:()=>u,MimeTypeShorthandMap:()=>R,StreamTypes:()=>L,addTextTrack:()=>C,allMediaTypes:()=>Me,generatePlayerInitTime:()=>Te,getError:()=>Ee,getStreamTypeConfig:()=>ee,getType:()=>N,inferMimeTypeFromURL:()=>j,initialize:()=>xe,isMuxVideoSrc:()=>ne,loadMedia:()=>ae,mux:()=>D.default,removeTextTrack:()=>J,setupAutoplay:()=>X,setupHls:()=>re,setupMux:()=>oe,shorthandKeys:()=>me,teardown:()=>te,toMuxVideoURL:()=>ge,toPlaybackIdParts:()=>Z});if(typeof DocumentFragment=="undefined"){class e{}globalThis.DocumentFragment=e}globalThis.customElements||(globalThis.customElements={get(e){},define(e,t,r){},upgrade(e){},whenDefined(e){return Promise.resolve(globalThis.HTMLElement)}});var k;if(!globalThis.CustomEvent){class e{constructor(r,n={}){q(this,k,void 0);Y(this,k,n==null?void 0:n.detail)}get detail(){F(this,k)}initCustomEvent(r,n,o,a){}}k=new WeakMap,globalThis.CustomEvent=e}if(!globalThis.EventTarget){class e{addEventListener(){}removeEventListener(){}dispatchEvent(r){return!0}}globalThis.EventTarget=e}if(!globalThis.HTMLElement){class e extends EventTarget{}globalThis.HTMLElement=e}if(!globalThis.HTMLVideoElement){class e extends EventTarget{}globalThis.HTMLVideoElement=e}var $,z;if(!(($=globalThis.document)==null?void 0:$.createElement)){let e=(z=globalThis.document)!=null?z:{};e.createElement=function(r,n){return new HTMLElement},globalThis.document=e}var D=P(require("mux-embed")),T=P(require("hls.js"));var w=P(require("hls.js")),I={ANY:"any",MUTED:"muted"},fe=Object.values(I),W=e=>typeof e=="boolean"||typeof e=="string"&&fe.includes(e),X=(e,t,r)=>{let n=!1,o=!1,a=W(t)?t:!!t,c=()=>{e.addEventListener("playing",()=>{n=!0},{once:!0})};if(c(),e.addEventListener("loadstart",()=>{n=!1,c(),O(e,a)},{once:!0}),e.addEventListener("loadedmetadata",()=>{r||(o=!Number.isFinite(e.duration)),O(e,a)},{once:!0}),r&&r.once(w.default.Events.LEVEL_LOADED,(i,l)=>{var d;o=(d=l.details.live)!=null?d:!1}),!a){let i=()=>{!o||((r==null?void 0:r.liveSyncPosition)?e.currentTime=r.liveSyncPosition:Number.isFinite(e.seekable.end(0))&&(e.currentTime=e.seekable.end(0)))};e.addEventListener("play",()=>{r&&e.preload==="metadata"?r.once(w.default.Events.LEVEL_UPDATED,i):r&&i()},{once:!0})}return i=>{n||(a=W(i)?i:!!i,O(e,a))}},O=(e,t)=>{if(!t)return;let r=e.muted,n=()=>e.muted=r;switch(t){case I.ANY:e.play().catch(o=>{e.muted=!0,e.play().catch(n)});break;case I.MUTED:e.muted=!0,e.play().catch(n);break;default:e.play().catch(()=>{});break}};var E=class extends Error{constructor(t,r=E.MEDIA_ERR_CUSTOM,n){super(t);var o;this.name="MediaError",this.code=r,this.fatal=n!=null?n:r>=E.MEDIA_ERR_NETWORK&&r<=E.MEDIA_ERR_ENCRYPTED,this.message||(this.message=(o=E.defaultMessages[this.code])!=null?o:"")}},u=E;u.MEDIA_ERR_ABORTED=1,u.MEDIA_ERR_NETWORK=2,u.MEDIA_ERR_DECODE=3,u.MEDIA_ERR_SRC_NOT_SUPPORTED=4,u.MEDIA_ERR_ENCRYPTED=5,u.MEDIA_ERR_CUSTOM=100,u.defaultMessages={1:"You aborted the media playback",2:"A network error caused the media download to fail.",3:"A media error caused playback to be aborted. The media could be corrupt or your browser does not support this format.",4:"An unsupported error occurred. The server or network failed, or your browser does not support this format.",5:"The media is encrypted and there are no keys to decrypt it."};var x=P(require("hls.js"));function G(e,t){t.on(x.default.Events.NON_NATIVE_TEXT_TRACKS_FOUND,(o,{tracks:a})=>{a.forEach(c=>{var l;let s=(l=c.subtitleTrack)!=null?l:c.closedCaptions,i=t.subtitleTracks.findIndex(({lang:d,name:y,type:f})=>d==(s==null?void 0:s.lang)&&y===c.label&&f.toLowerCase()===c.kind);C(e,c.kind,c.label,s==null?void 0:s.lang,`${c.kind}${i}`)})});let r=()=>{var c;if(!t.subtitleTracks.length)return;let o=Array.from(e.textTracks).find(s=>s.id&&s.mode==="showing"&&["subtitles","captions"].includes(s.kind)),a=`${(c=t.subtitleTracks[t.subtitleTrack])==null?void 0:c.type.toLowerCase()}${t.subtitleTrack}`;if(o&&(t.subtitleTrack<0||(o==null?void 0:o.id)!==a)){let s=t.subtitleTracks.findIndex(({lang:i,name:l,type:d})=>i==o.language&&l===o.label&&d.toLowerCase()===o.kind);t.subtitleTrack=s}o&&(o==null?void 0:o.id)===a&&o.cues&&Array.from(o.cues).forEach(s=>{o.addCue(s)})};e.textTracks.addEventListener("change",r),t.on(x.default.Events.CUES_PARSED,(o,{track:a,type:c,cues:s})=>{let i=e.textTracks.getTrackById(a);if(!i)return;let l=i.mode==="disabled";l&&(i.mode="hidden"),s.forEach(d=>{var y;((y=i.cues)==null?void 0:y.getCueById(d.id))||i.addCue(d)}),l&&(i.mode="disabled")}),t.on(x.default.Events.DESTROYING,()=>{e.textTracks.removeEventListener("change",r),e.querySelectorAll("track[data-removeondestroy]").forEach(a=>{a.remove()})});let n=()=>{Array.from(e.textTracks).forEach(o=>{var a,c;if(!["subtitles","caption"].includes(o.kind)&&o.label==="thumbnails"){if(!((a=o.cues)==null?void 0:a.length)){let s=e.querySelector('track[label="thumbnails"]'),i=(c=s==null?void 0:s.getAttribute("src"))!=null?c:"";s==null||s.removeAttribute("src"),setTimeout(()=>{s==null||s.setAttribute("src",i)},0)}o.mode!=="hidden"&&(o.mode="hidden")}})};t.once(x.default.Events.MANIFEST_LOADED,n),t.once(x.default.Events.MEDIA_ATTACHED,n)}function C(e,t,r,n,o){let a=document.createElement("track");return a.kind=t,a.label=r,n&&(a.srclang=n),o&&(a.id=o),a.track.mode="disabled",a.setAttribute("data-removeondestroy",""),e.append(a),a.track}function J(e,t){let r=Array.prototype.find.call(e.querySelectorAll("track"),n=>n.track===t);r==null||r.remove()}var V=(e,t)=>e in t;var Q="mux.com",Te=()=>D.default.utils.now(),L={VOD:"on-demand",ON_DEMAND:"on-demand",LIVE:"live",LL_LIVE:"ll-live",DVR:"live:dvr",LL_DVR:"ll-live:dvr"},g={M3U8:"application/vnd.apple.mpegurl",MP4:"video/mp4"},R={HLS:g.M3U8},me=Object.keys(R),Me=[...Object.values(g),"hls","HLS"],Z=e=>{let t=e.indexOf("?");if(t<0)return[e];let r=e.slice(0,t),n=e.slice(t);return[r,n]},ge=(e,{domain:t=Q}={})=>{if(!e)return;let[r,n=""]=Z(e);return`https://stream.${t}/${r}.m3u8${n}`},j=e=>{let t="";try{t=new URL(e).pathname}catch{console.error("invalid url")}let r=t.lastIndexOf(".");if(r<0)return"";let o=t.slice(r+1).toUpperCase();return V(o,g)?g[o]:""},N=e=>{let t=e.type;if(t){let n=t.toUpperCase();return V(n,R)?R[n]:t}let{src:r}=e;return r?j(r):""},ee=e=>{if([L.LIVE,L.LL_LIVE].includes(e)){let t={backBufferLength:12};return e===L.LL_LIVE?{...t,maxFragLookUpTolerance:.001}:t}return{}},H=new WeakMap,Ee=e=>{var t;return(t=H.get(e))==null?void 0:t.error},te=(e,t)=>{t&&(t.detachMedia(),t.destroy()),(e==null?void 0:e.mux)&&!e.mux.deleted&&(e.mux.destroy(),e.mux),e&&(e.removeEventListener("error",se),e.removeEventListener("error",U),H.delete(e))},re=(e,t)=>{var b,v,A;let{debug:r,preferMse:n,streamType:o,startTime:a=-1}=e,c=N(e),s=c===g.M3U8,i=!c||((b=t==null?void 0:t.canPlayType(c))!=null?b:!0),l=T.default.isSupported(),f=((A=(v=window==null?void 0:window.navigator)==null?void 0:v.userAgent)!=null?A:"").toLowerCase().indexOf("android")!==-1&&o===L.LL_LIVE;if(s&&!(!s||i&&!((n||f)&&l))&&l){let M={backBufferLength:30,renderTextTracksNatively:!1,liveDurationInfinity:!0},p=ee(o);return new T.default({debug:r,startPosition:a,...M,...p})}},ne=({playbackId:e,src:t,customDomain:r})=>{if(e)return!0;if(typeof t!="string")return!1;let n=new URL(t).hostname.toLocaleLowerCase();return n.includes(Q)||!!r&&n.includes(r.toLocaleLowerCase())},oe=(e,t,r)=>{let{envKey:n}=e,o=ne(e);if((n||o)&&t){let{playerInitTime:a,playerSoftwareName:c,playerSoftwareVersion:s,beaconCollectionDomain:i,metadata:l,debug:d}=e,y=f=>typeof f.player_error_code=="string"?!1:typeof e.errorTranslator=="function"?e.errorTranslator(f):f;D.default.monitor(t,{debug:d,beaconCollectionDomain:i,hlsjs:r,Hls:r?T.default:void 0,automaticErrorTracking:!1,errorTranslator:y,data:{...n?{env_key:n}:{},player_software_name:c,player_software_version:s,player_init_time:a,...l}})}},ae=(e,t,r)=>{var b,v,A;if(!t){console.warn("attempting to load media before mediaEl exists");return}let{preferMse:n,streamType:o}=e,a=N(e),c=a===g.M3U8,s=!a||((b=t==null?void 0:t.canPlayType(a))!=null?b:!0),i=T.default.isSupported(),y=((A=(v=window==null?void 0:window.navigator)==null?void 0:v.userAgent)!=null?A:"").toLowerCase().indexOf("android")!==-1&&o===L.LL_LIVE,f=!c||s&&!((n||y)&&i),{src:m}=e;if(t&&s&&f){if(typeof m=="string"){let{startTime:M}=e;if(t.setAttribute("src",m),M){let p=({target:_})=>{_.currentTime=M,_.removeEventListener("loadedmetadata",p)};t.addEventListener("loadedmetadata",p)}}else t.removeAttribute("src");t.addEventListener("error",se),t.addEventListener("error",U)}else if(r&&m){switch(r.on(T.default.Events.ERROR,(M,p)=>{let _={[T.default.ErrorTypes.NETWORK_ERROR]:u.MEDIA_ERR_NETWORK,[T.default.ErrorTypes.MEDIA_ERROR]:u.MEDIA_ERR_DECODE},S=new u("",_[p.type]);S.fatal=p.fatal,S.data=p,t.dispatchEvent(new CustomEvent("error",{detail:S}))}),t.addEventListener("error",U),G(t,r),t.preload){case"none":t.addEventListener("play",()=>r.loadSource(m),{once:!0});break;case"metadata":let M=r.config.maxBufferLength,p=r.config.maxBufferSize;r.config.maxBufferLength=1,r.config.maxBufferSize=1,t.addEventListener("play",()=>{r.config.maxBufferLength=M,r.config.maxBufferSize=p},{once:!0}),r.loadSource(m);break;default:r.loadSource(m)}r.attachMedia(t)}else console.error("It looks like the video you're trying to play will not work on this system! If possible, try upgrading to the newest versions of your browser or software.")};async function se(e){if(!e.isTrusted)return;e.stopImmediatePropagation();let t=e.target;if(!(t==null?void 0:t.error))return;let{message:r,code:n}=t.error,o=new u(r,n);if(t.src&&(n!==u.MEDIA_ERR_DECODE||n!==void 0)){let{status:a}=await fetch(t.src);o.data={response:{code:a}}}t.dispatchEvent(new CustomEvent("error",{detail:o}))}function U(e){var o;if(!(e instanceof CustomEvent)||!(e.detail instanceof u))return;let t=e.target,r=e.detail;if(!r||!r.fatal)return;let n=H.get(t);n&&(n.error=r),(o=t.mux)==null||o.emit("error",{player_error_code:r.code,player_error_message:r.message})}var xe=(e,t,r)=>{te(t,r),H.set(t,{});let n=re(e,t);return oe(e,t,n),ae(e,t,n),n}; | ||
"use strict";var oe=Object.create;var E=Object.defineProperty;var ae=Object.getOwnPropertyDescriptor;var se=Object.getOwnPropertyNames;var ie=Object.getPrototypeOf,ce=Object.prototype.hasOwnProperty;var ue=(e,t)=>{for(var r in t)E(e,r,{get:t[r],enumerable:!0})},O=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of se(t))!ce.call(e,o)&&o!==r&&E(e,o,{get:()=>t[o],enumerable:!(n=ae(t,o))||n.enumerable});return e};var L=(e,t,r)=>(r=e!=null?oe(ie(e)):{},O(t||!e||!e.__esModule?E(r,"default",{value:e,enumerable:!0}):r,e)),pe=e=>O(E({},"__esModule",{value:!0}),e);var ve={};ue(ve,{ExtensionMimeTypeMap:()=>M,Hls:()=>T.default,MediaError:()=>d,MimeTypeShorthandMap:()=>k,StreamTypes:()=>b,addTextTrack:()=>S,allMediaTypes:()=>Me,generatePlayerInitTime:()=>fe,getError:()=>xe,getStreamTypeConfig:()=>G,getType:()=>w,inferMimeTypeFromURL:()=>X,initialize:()=>ge,isMuxVideoSrc:()=>Z,loadMedia:()=>ee,mux:()=>A.default,removeTextTrack:()=>K,setupAutoplay:()=>N,setupHls:()=>Q,setupMux:()=>j,shorthandKeys:()=>Te,teardown:()=>J,toMuxVideoURL:()=>me,toPlaybackIdParts:()=>z});module.exports=pe(ve);var A=L(require("mux-embed")),T=L(require("hls.js"));var D=L(require("hls.js"));var f=(e,t,r,n)=>{e.addEventListener(t,r,n),e.addEventListener("teardown",()=>{e.removeEventListener(t,r)},{once:!0})},P=(e,t)=>e in t;function C(e,t,r){t&&r>t&&(r=t);for(let n=0;n<e.length;n++)if(e.start(n)<=r&&e.end(n)>=r)return!0;return!1}var h={ANY:"any",MUTED:"muted"},de=Object.values(h),V=e=>typeof e=="boolean"||typeof e=="string"&&de.includes(e),N=(e,t,r)=>{let n=!1,o=!1,a=V(t)?t:!!t,i=()=>{n||f(e,"playing",()=>{n=!0},{once:!0})};if(i(),f(e,"loadstart",()=>{n=!1,i(),R(e,a)},{once:!0}),f(e,"loadstart",()=>{r||(o=!Number.isFinite(e.duration)),R(e,a)},{once:!0}),r&&r.once(D.default.Events.LEVEL_LOADED,(c,u)=>{var p;o=(p=u.details.live)!=null?p:!1}),!a){let c=()=>{!o||(r!=null&&r.liveSyncPosition?e.currentTime=r.liveSyncPosition:Number.isFinite(e.seekable.end(0))&&(e.currentTime=e.seekable.end(0)))};r&&f(e,"play",()=>{e.preload==="metadata"?r.once(D.default.Events.LEVEL_UPDATED,c):c()},{once:!0})}return c=>{n||(a=V(c)?c:!!c,R(e,a))}},R=(e,t)=>{if(!t)return;let r=e.muted,n=()=>e.muted=r;switch(t){case h.ANY:e.play().catch(o=>{e.muted=!0,e.play().catch(n)});break;case h.MUTED:e.muted=!0,e.play().catch(n);break;default:e.play().catch(()=>{});break}};var x=class extends Error{constructor(r,n=x.MEDIA_ERR_CUSTOM,o){var a;super(r);this.name="MediaError",this.code=n,this.fatal=o!=null?o:n>=x.MEDIA_ERR_NETWORK&&n<=x.MEDIA_ERR_ENCRYPTED,this.message||(this.message=(a=x.defaultMessages[this.code])!=null?a:"")}},d=x;d.MEDIA_ERR_ABORTED=1,d.MEDIA_ERR_NETWORK=2,d.MEDIA_ERR_DECODE=3,d.MEDIA_ERR_SRC_NOT_SUPPORTED=4,d.MEDIA_ERR_ENCRYPTED=5,d.MEDIA_ERR_CUSTOM=100,d.defaultMessages={1:"You aborted the media playback",2:"A network error caused the media download to fail.",3:"A media error caused playback to be aborted. The media could be corrupt or your browser does not support this format.",4:"An unsupported error occurred. The server or network failed, or your browser does not support this format.",5:"The media is encrypted and there are no keys to decrypt it."};var g=L(require("hls.js"));function U(e,t){t.on(g.default.Events.NON_NATIVE_TEXT_TRACKS_FOUND,(o,{tracks:a})=>{a.forEach(i=>{var u;let s=(u=i.subtitleTrack)!=null?u:i.closedCaptions,c=t.subtitleTracks.findIndex(({lang:p,name:l,type:y})=>p==(s==null?void 0:s.lang)&&l===i.label&&y.toLowerCase()===i.kind);S(e,i.kind,i.label,s==null?void 0:s.lang,`${i.kind}${c}`)})});let r=()=>{var i;if(!t.subtitleTracks.length)return;let o=Array.from(e.textTracks).find(s=>s.id&&s.mode==="showing"&&["subtitles","captions"].includes(s.kind)),a=`${(i=t.subtitleTracks[t.subtitleTrack])==null?void 0:i.type.toLowerCase()}${t.subtitleTrack}`;if(o&&(t.subtitleTrack<0||(o==null?void 0:o.id)!==a)){let s=t.subtitleTracks.findIndex(({lang:c,name:u,type:p})=>c==o.language&&u===o.label&&p.toLowerCase()===o.kind);t.subtitleTrack=s}o&&(o==null?void 0:o.id)===a&&o.cues&&Array.from(o.cues).forEach(s=>{o.addCue(s)})};e.textTracks.addEventListener("change",r),t.on(g.default.Events.CUES_PARSED,(o,{track:a,type:i,cues:s})=>{let c=e.textTracks.getTrackById(a);if(!c)return;let u=c.mode==="disabled";u&&(c.mode="hidden"),s.forEach(p=>{var l;(l=c.cues)!=null&&l.getCueById(p.id)||c.addCue(p)}),u&&(c.mode="disabled")}),t.once(g.default.Events.DESTROYING,()=>{e.textTracks.removeEventListener("change",r),e.querySelectorAll("track[data-removeondestroy]").forEach(a=>{a.remove()})});let n=()=>{Array.from(e.textTracks).forEach(o=>{var a,i;if(!["subtitles","caption"].includes(o.kind)&&o.label==="thumbnails"){if(!((a=o.cues)!=null&&a.length)){let s=e.querySelector('track[label="thumbnails"]'),c=(i=s==null?void 0:s.getAttribute("src"))!=null?i:"";s==null||s.removeAttribute("src"),setTimeout(()=>{s==null||s.setAttribute("src",c)},0)}o.mode!=="hidden"&&(o.mode="hidden")}})};t.once(g.default.Events.MANIFEST_LOADED,n),t.once(g.default.Events.MEDIA_ATTACHED,n)}function S(e,t,r,n,o){let a=document.createElement("track");return a.kind=t,a.label=r,n&&(a.srclang=n),o&&(a.id=o),a.track.mode="disabled",a.setAttribute("data-removeondestroy",""),e.append(a),a.track}function K(e,t){let r=Array.prototype.find.call(e.querySelectorAll("track"),n=>n.track===t);r==null||r.remove()}var B,W,le=(W=(B=globalThis==null?void 0:globalThis.navigator)==null?void 0:B.userAgent)!=null?W:"",ye=le.toLowerCase().indexOf("android")!==-1,Y="mux.com",F,q,H=(q=(F=T.default).isSupported)==null?void 0:q.call(F),$=ye,fe=()=>A.default.utils.now(),b={VOD:"on-demand",ON_DEMAND:"on-demand",LIVE:"live",LL_LIVE:"ll-live",DVR:"live:dvr",LL_DVR:"ll-live:dvr"},M={M3U8:"application/vnd.apple.mpegurl",MP4:"video/mp4"},k={HLS:M.M3U8},Te=Object.keys(k),Me=[...Object.values(M),"hls","HLS"],z=e=>{let t=e.indexOf("?");if(t<0)return[e];let r=e.slice(0,t),n=e.slice(t);return[r,n]},me=(e,{domain:t=Y}={})=>{if(!e)return;let[r,n=""]=z(e);return`https://stream.${t}/${r}.m3u8${n}`},X=e=>{let t="";try{t=new URL(e).pathname}catch{console.error("invalid url")}let r=t.lastIndexOf(".");if(r<0)return"";let o=t.slice(r+1).toUpperCase();return P(o,M)?M[o]:""},w=e=>{let t=e.type;if(t){let n=t.toUpperCase();return P(n,k)?k[n]:t}let{src:r}=e;return r?X(r):""},G=e=>{if([b.LIVE,b.LL_LIVE].includes(e)){let t={backBufferLength:12};return e===b.LL_LIVE?{...t,maxFragLookUpTolerance:.001}:t}return{}},v=new WeakMap,xe=e=>{var t;return(t=v.get(e))==null?void 0:t.error},J=(e,t)=>{t&&(t.detachMedia(),t.destroy()),(e==null?void 0:e.mux)&&!e.mux.deleted&&(e.mux.destroy(),delete e.mux),e&&(e.removeAttribute("src"),e.load(),e.removeEventListener("error",re),e.removeEventListener("error",I),e.removeEventListener("durationchange",te),v.delete(e),e.dispatchEvent(new Event("teardown")))},Q=(e,t)=>{var p;let{debug:r,preferMse:n,streamType:o,startTime:a=-1}=e,i=w(e),s=i===M.M3U8,c=!i||((p=t==null?void 0:t.canPlayType(i))!=null?p:!0);if(s&&!(!s||c&&!((n||$)&&H))&&H){let l={backBufferLength:30,renderTextTracksNatively:!1,liveDurationInfinity:!0},y=G(o);return new T.default({debug:r,startPosition:a,...l,...y})}},Z=({playbackId:e,src:t,customDomain:r})=>{if(e)return!0;if(typeof t!="string")return!1;let n=new URL(t).hostname.toLocaleLowerCase();return n.includes(Y)||!!r&&n.includes(r.toLocaleLowerCase())},j=(e,t,r)=>{let{envKey:n}=e,o=Z(e);if((n||o)&&t){let{playerInitTime:a,playerSoftwareName:i,playerSoftwareVersion:s,beaconCollectionDomain:c,metadata:u,debug:p}=e,l=y=>typeof y.player_error_code=="string"?!1:typeof e.errorTranslator=="function"?e.errorTranslator(y):y;A.default.monitor(t,{debug:p,beaconCollectionDomain:c,hlsjs:r,Hls:r?T.default:void 0,automaticErrorTracking:!1,errorTranslator:l,data:{...n?{env_key:n}:{},player_software_name:i,player_software:i,player_software_version:s,player_init_time:a,...u}})}},ee=(e,t,r)=>{var p,l;if(!t){console.warn("attempting to load media before mediaEl exists");return}let{preferMse:n,streamType:o}=e,a=w(e),i=a===M.M3U8,s=!a||((p=t==null?void 0:t.canPlayType(a))!=null?p:!0),c=!i||s&&!((n||$)&&H),{src:u}=e;if(t&&s&&c)typeof u=="string"?(t.setAttribute("src",u),e.startTime&&(((l=v.get(t))!=null?l:{}).startTime=e.startTime,t.addEventListener("durationchange",te,{once:!0}))):t.removeAttribute("src"),t.addEventListener("error",re),t.addEventListener("error",I);else if(r&&u){switch(r.on(T.default.Events.ERROR,(y,m)=>{let ne={[T.default.ErrorTypes.NETWORK_ERROR]:d.MEDIA_ERR_NETWORK,[T.default.ErrorTypes.MEDIA_ERROR]:d.MEDIA_ERR_DECODE},_=new d("",ne[m.type]);_.fatal=m.fatal,_.data=m,t.dispatchEvent(new CustomEvent("error",{detail:_}))}),t.addEventListener("error",I),U(t,r),t.preload){case"none":f(t,"play",()=>r.loadSource(u),{once:!0});break;case"metadata":let y=r.config.maxBufferLength,m=r.config.maxBufferSize;r.config.maxBufferLength=1,r.config.maxBufferSize=1,f(t,"play",()=>{r.config.maxBufferLength=y,r.config.maxBufferSize=m},{once:!0}),r.loadSource(u);break;default:r.loadSource(u)}r.attachMedia(t)}else console.error("It looks like the video you're trying to play will not work on this system! If possible, try upgrading to the newest versions of your browser or software.")};function te(e){var n;let t=e.target,r=(n=v.get(t))==null?void 0:n.startTime;if(!!r&&C(t.seekable,t.duration,r)){let o=t.preload==="auto";o&&(t.preload="none"),t.currentTime=r,o&&(t.preload="auto")}}async function re(e){if(!e.isTrusted)return;e.stopImmediatePropagation();let t=e.target;if(!(t!=null&&t.error))return;let{message:r,code:n}=t.error,o=new d(r,n);if(t.src&&(n!==d.MEDIA_ERR_DECODE||n!==void 0)){let{status:a}=await fetch(t.src);o.data={response:{code:a}}}t.dispatchEvent(new CustomEvent("error",{detail:o}))}function I(e){var n,o;if(!(e instanceof CustomEvent)||!(e.detail instanceof d))return;let t=e.target,r=e.detail;!r||!r.fatal||(((n=v.get(t))!=null?n:{}).error=r,(o=t.mux)==null||o.emit("error",{player_error_code:r.code,player_error_message:r.message}))}var ge=(e,t,r)=>{J(t,r),v.set(t,{});let n=Q(e,t);return j(e,t,n),ee(e,t,n),n}; | ||
//# sourceMappingURL=index.cjs.js.map |
@@ -1,2 +0,1 @@ | ||
import '@mux/polyfills'; | ||
import mux, { Options } from 'mux-embed'; | ||
@@ -3,0 +2,0 @@ import Hls, { HlsConfig } from 'hls.js'; |
declare type KeyTypes = string | number | symbol; | ||
declare type addEventListenerWithTeardown = <K extends keyof HTMLMediaElementEventMap>(mediaEl: HTMLMediaElement, type: K, listener: (this: HTMLMediaElement, ev: HTMLMediaElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions) => void; | ||
export declare const addEventListenerWithTeardown: addEventListenerWithTeardown; | ||
export declare const isKeyOf: <T = any>(k: KeyTypes, o: T) => k is keyof T; | ||
export declare function inSeekableRange(seekable: TimeRanges, duration: number, time: number): boolean; | ||
export {}; |
@@ -1,2 +0,1 @@ | ||
import '@mux/polyfills'; | ||
import mux, { Options } from 'mux-embed'; | ||
@@ -3,0 +2,0 @@ import Hls, { HlsConfig } from 'hls.js'; |
declare type KeyTypes = string | number | symbol; | ||
declare type addEventListenerWithTeardown = <K extends keyof HTMLMediaElementEventMap>(mediaEl: HTMLMediaElement, type: K, listener: (this: HTMLMediaElement, ev: HTMLMediaElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions) => void; | ||
export declare const addEventListenerWithTeardown: addEventListenerWithTeardown; | ||
export declare const isKeyOf: <T = any>(k: KeyTypes, o: T) => k is keyof T; | ||
export declare function inSeekableRange(seekable: TimeRanges, duration: number, time: number): boolean; | ||
export {}; |
{ | ||
"name": "@mux/playback-core", | ||
"version": "0.9.1-canary.6-485423a", | ||
"version": "0.9.1-canary.60-186b915", | ||
"description": "Core library for media playback in the browser shared by mux elements", | ||
@@ -31,6 +31,6 @@ "main": "./dist/index.cjs.js", | ||
"clean": "shx rm -rf dist/", | ||
"dev:cjs": "open-process | yarn build:cjs --watch", | ||
"dev:esm": "open-process | yarn build:esm --watch", | ||
"dev:esm-module": "open-process | yarn build:esm-module --watch", | ||
"dev:iife": "open-process | yarn build:iife --watch", | ||
"dev:cjs": "yarn build:cjs --watch=forever", | ||
"dev:esm": "yarn build:esm --watch=forever", | ||
"dev:esm-module": "yarn build:esm-module --watch=forever", | ||
"dev:iife": "yarn build:iife --watch=forever", | ||
"dev:types": "yarn build:types -w", | ||
@@ -42,6 +42,6 @@ "dev": "npm-run-all --parallel dev:types dev:cjs dev:esm dev:iife dev:esm-module", | ||
"build:iife": "esbuild --metafile=./dist/iife.json src/index.ts --target=es2019 --bundle --sourcemap --format=iife --outfile=./dist/playback-core.js", | ||
"build:types": "tsc --declaration --emitDeclarationOnly --outDir './dist/types' && downlevel-dts ./dist/types ./dist/types-ts3.4 --to=3.4", | ||
"build:types": "tsc --declaration --emitDeclarationOnly --outDir './dist/types'", | ||
"postbuild:types": "downlevel-dts ./dist/types ./dist/types-ts3.4 --to=3.4", | ||
"build": "npm-run-all --parallel build:types 'build:esm -- --minify' 'build:iife -- --minify' 'build:cjs -- --minify' 'build:esm-module -- --minify'", | ||
"prebuild": "yarn clean", | ||
"prepublishOnly": "yarn build", | ||
"create-release-notes": "create-release-notes ./CHANGELOG.md", | ||
@@ -51,11 +51,10 @@ "publish-release": "../../scripts/publish.sh" | ||
"dependencies": { | ||
"hls.js": "1.1.5", | ||
"hls.js": "1.2.3", | ||
"mux-embed": "^4.7.0" | ||
}, | ||
"devDependencies": { | ||
"@mux/open-process": "0.1.0", | ||
"@mux/polyfills": "0.1.0", | ||
"downlevel-dts": "^0.9.0", | ||
"esbuild": "^0.13.13", | ||
"esbuild": "^0.15.7", | ||
"npm-run-all": "^4.1.5", | ||
"shared-polyfills": "0.1.0", | ||
"shx": "^0.3.4", | ||
@@ -62,0 +61,0 @@ "typescript": "^4.5.2" |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
4621659
6
26
4511
+ Addedhls.js@1.2.3(transitive)
- Removedhls.js@1.1.5(transitive)
Updatedhls.js@1.2.3