@dolby-optiview/ads-sdk-adapter-shaka 1.2.0 → 1.3.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/dist/ShakaAdapter.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PlayerAdapter, PlayerAdapterEvent, PlayerAdapterEventHandler, VideoQuality } from '@dolby-optiview/ads-sdk-core';
|
|
1
|
+
import type { ExternalPlaybackState, PlayerAdapter, PlayerAdapterEvent, PlayerAdapterEventHandler, VideoQuality } from '@dolby-optiview/ads-sdk-core';
|
|
2
2
|
import { type ShakaPtsOffsetManifestLike } from './shakaPtsOffset';
|
|
3
3
|
/**
|
|
4
4
|
* Minimal surface of a Shaka variant track. `bandwidth` is bits/s; `active` marks the one
|
|
@@ -182,6 +182,7 @@ interface ShakaManifestLike extends ShakaPtsOffsetManifestLike {
|
|
|
182
182
|
export declare class ShakaAdapter implements PlayerAdapter {
|
|
183
183
|
private player;
|
|
184
184
|
private video;
|
|
185
|
+
private externalPlayback;
|
|
185
186
|
private eventListeners;
|
|
186
187
|
private boundHandlers;
|
|
187
188
|
private deferredSeekTime;
|
|
@@ -321,6 +322,8 @@ export declare class ShakaAdapter implements PlayerAdapter {
|
|
|
321
322
|
* Unsubscribe from player events.
|
|
322
323
|
*/
|
|
323
324
|
off(event: PlayerAdapterEvent, handler: PlayerAdapterEventHandler): void;
|
|
325
|
+
get externalPlaybackState(): ExternalPlaybackState | undefined;
|
|
326
|
+
setExternalPlaybackAllowed(allowed: boolean): void;
|
|
324
327
|
/**
|
|
325
328
|
* Clean up resources.
|
|
326
329
|
*/
|
package/dist/ShakaAdapter.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{decodeUtf8 as e,parseId3GeobBody as t}from"@dolby-optiview/ads-sdk-core/id3";import{shakaPtsOffsetAt as i}from"./shakaPtsOffset";import{isLoadInterrupted as a,refineShakaLoadError as r}from"./shakaLoadError";function s(e){if(null!=e)return"string"==typeof e?e:n(e)?new TextDecoder("utf-8").decode(e):ArrayBuffer.isView(e)?new TextDecoder("utf-8").decode(new Uint8Array(e.buffer,e.byteOffset,e.byteLength)):String(e)}function n(e){return e instanceof ArrayBuffer||"[object ArrayBuffer]"===Object.prototype.toString.call(e)}function d(e){if(n(e))return new Uint8Array(e);const t=e;return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}export class ShakaAdapter{constructor(e,t){this.eventListeners=new Map,this.boundHandlers=new Map,this.deferredSeekTime=null,this.loadingViaAdapter=!1,this.pendingPresentationDelay=null,this.abrEnabledBeforePin=null,this.variantBeforePin=null,this.emittedCueKeys=new Set,this.player=e,this.video=t;const i=e.load;this.originalPlayerLoad=i,e.load=async(...t)=>{null!==this.pendingPresentationDelay&&e.configure?.("manifest.defaultPresentationDelay",this.pendingPresentationDelay),this.pendingPresentationDelay=null;try{return await i.apply(e,t)}catch(e){throw this.loadingViaAdapter||a(e)||this.emit("error",e),e}},this.setupVideoListeners(),this.setupMetadataListener()}get currentTime(){return this.video.currentTime}prepareForAdPlayback(){try{this.player.configure?.("mediaSource.dispatchAllEmsgBoxes",!0)}catch{return}}get duration(){return this.video.duration}get isLive(){return this.player.isLive?.()??null}get paused(){return this.video.paused}get playbackReady(){return this.video.readyState>=HTMLMediaElement.HAVE_CURRENT_DATA&&!this.video.seeking}get muted(){return this.video.muted}set muted(e){this.video.muted=e}get volume(){return this.video.volume}set volume(e){this.video.volume=e}get videoElement(){return this.video}get programDateTime(){try{const e=this.player.getManifest();if(!e)return null;const t=e.presentationTimeline.getInitialProgramDateTime();return null==t?null:new Date(1e3*(t+this.video.currentTime))}catch{return null}}pause(){this.video.pause()}async play(){await this.video.play()}seek(e){this.video.seeking?this.deferredSeekTime=e:this.video.currentTime=e}get sourceUrl(){return this.player.getAssetUri?.()??null}async load(e){this.player.getMediaElement?.()!==this.video&&await this.player.attach(this.video,!1),this.loadingViaAdapter=!0;try{await this.player.load(e)}catch(t){throw await r(t,e)}finally{this.loadingViaAdapter=!1}}async releaseMediaElement(){await(this.player.detach?.())}async unload(){"function"==typeof this.player.unload?await this.player.unload(!1):await(this.player.detach?.())}async recreateMediaPipeline(e){const t=this.sourceUrl;if(!t)throw new Error("Shaka pipeline recreate: no asset URI");this.deferredSeekTime=null;const i=e.startTime,a=!0===this.isLive;let r;try{r=this.player.getManifest()?.presentationTimeline.getInitialProgramDateTime()??null}catch{r=null}const s=a&&null!==r?1e3*(r+i):null,n=this.player.seekRange?.()?.end,d=a&&void 0!==n&&Number.isFinite(n)?Math.max(0,n-i):null;await this.unload(),this.player.getMediaElement?.()!==this.video&&await this.player.attach(this.video,!1),this.loadingViaAdapter=!0;try{if(a)if(null!==s)await this.player.load(t,new Date(s));else if(null!==d){await this.player.load(t,null);const e=this.player.seekRange?.()?.end;if(void 0!==e&&Number.isFinite(e)){const t=e-d;Math.abs(t-this.video.currentTime)>.5&&(this.video.currentTime=t)}}else await this.player.load(t,i);else await this.player.load(t,i)}finally{this.loadingViaAdapter=!1}}on(e,t){this.eventListeners.has(e)||this.eventListeners.set(e,new Set),this.eventListeners.get(e).add(t)}off(e,t){const i=this.eventListeners.get(e);i&&i.delete(t)}destroy(){for(const[e,t]of this.boundHandlers)this.video.removeEventListener(e,t);this.boundHandlers.clear(),this.deferredSeekTime=null,this.player.removeEventListener&&(this.presentedMetadataHandler&&(this.player.removeEventListener("metadata",this.presentedMetadataHandler),this.presentedMetadataHandler=void 0),this.parsedMetadataHandler&&(this.player.removeEventListener("metadataadded",this.parsedMetadataHandler),this.parsedMetadataHandler=void 0)),this.emsgHandler&&this.player.removeEventListener&&(this.player.removeEventListener("emsg",this.emsgHandler),this.emsgHandler=void 0),this.shakaErrorHandler&&this.player.removeEventListener&&(this.player.removeEventListener("error",this.shakaErrorHandler),this.shakaErrorHandler=void 0),this.originalPlayerLoad&&(this.player.load=this.originalPlayerLoad,this.originalPlayerLoad=void 0),this.emittedCueKeys.clear(),this.eventListeners.clear(),this.player.destroy()}get playbackRate(){return this.video.playbackRate}set playbackRate(e){this.video.playbackRate=e}setVideoQuality(e){if(null===e){if(null===this.abrEnabledBeforePin)return!1;const e=this.abrEnabledBeforePin,t=this.variantBeforePin;if(e){if(!this.player.configure)return!1;this.player.configure("abr.enabled",!0)}else{if(!t)return!1;if(!this.player.selectVariantTrack)return!1;this.player.selectVariantTrack(t,!1)}return this.abrEnabledBeforePin=null,this.variantBeforePin=null,!0}const t=this.player.getVariantTracks?.();if(!t||!this.player.selectVariantTrack)return!1;const i=t.filter(e=>{const t=e?.bandwidth;return"number"==typeof t&&Number.isFinite(t)&&t>0});if(i.length<2)return!1;let a=i[0];for(let e=1;e<i.length;e++)i[e].bandwidth<a.bandwidth&&(a=i[e]);if(null!==this.abrEnabledBeforePin)return!0;const r=this.player.getConfiguration?.()?.abr?.enabled??!0,s=t.find(e=>e?.active)??null;if(r&&!this.player.configure||!r&&!s)return!1;this.abrEnabledBeforePin=r,this.variantBeforePin=s;try{return this.player.configure?.("abr.enabled",!1),this.player.selectVariantTrack(a,!1),!0}catch{if(r)try{this.player.configure?.("abr.enabled",!0)}catch{this.variantBeforePin=null}return this.abrEnabledBeforePin=null,this.variantBeforePin=null,!1}}requestLiveStartOffset(e,t){const i=(e??NaN)*(t??NaN),a=Number.isFinite(i)&&i>0&&!!this.player.configure&&!this.player.getManifest();return this.pendingPresentationDelay=a?i:null,a}get liveEdge(){const e=this.player.isLive?.()?this.player.getManifest()?.presentationTimeline.getMaxSegmentEndTime?.():null;return"number"==typeof e&&Number.isFinite(e)?e:null}get maxLiveSeekPosition(){if(!this.player.isLive?.())return null;const e=this.player.seekRange?.(),t=e?.end;if("number"!=typeof t||!Number.isFinite(t))return null;const i=this.player.getConfiguration?.()?.streaming,a=i?.liveSync;let r;if(a?.enabled){const e=a.targetLatency,t=a.targetLatencyTolerance??0;"number"==typeof e&&(r=e-t)}if(void 0===r&&(r=i?.safeSeekEndOffset),"number"!=typeof r||!Number.isFinite(r))return null;const s=t-r;return Number.isFinite(s)?s:null}setupMetadataListener(){if(!this.player.addEventListener)return;const e=e=>t=>{const i={...this.toCue(t),phase:e};this.isDuplicateCue(i)||this.emit("timedmetadata",i)};this.parsedMetadataHandler=e("parsed"),this.presentedMetadataHandler=e("presented"),this.player.addEventListener("metadata",this.presentedMetadataHandler),this.player.addEventListener("metadataadded",this.parsedMetadataHandler);const t=e=>{const t=e.detail;t&&this.emit("timedmetadata",this.emsgToCue(t))};this.emsgHandler=t,this.player.addEventListener("emsg",t);const i=e=>{2!==e.detail?.severity||this.loadingViaAdapter||this.emit("error",e.detail)};this.shakaErrorHandler=i,this.player.addEventListener("error",i)}isDuplicateCue(e){const t=[e.startTime,e.description??"",e.mimeType??"",e.messageData??"",e.frames?JSON.stringify(e.frames):"",e.phase??""].join("\0");return!!this.emittedCueKeys.has(t)||(this.emittedCueKeys.add(t),this.emittedCueKeys.size>256&&this.emittedCueKeys.delete(this.emittedCueKeys.values().next().value),!1)}toCue(i){const a=(i.metadataType??"").toLowerCase(),r=a.includes("emsg")?"emsg":a.includes("daterange")?"daterange":"id3",l=i.payload?.key??i.key,o=i.payload?.data??i.payload?.value??i.data,h={type:r,startTime:i.startTime??i.cueTime??0,endTime:i.endTime};if(void 0!==i.schemeIdUri&&(h.schemeIdUri=i.schemeIdUri),"emsg"===r){const e=null==o?null:d(o);e&&(h.raw=e)}if("id3"===r&&"GEOB"===l){const a=function(e,t){return(void 0===e||""===e)&&(n(t)||ArrayBuffer.isView(t))}(i.payload?.description,o)?t(d(o)):null;if(a)return h.description=a.description,a.mimeType&&(h.mimeType=a.mimeType),h.messageData=e(a.data),h;void 0!==i.payload?.description&&(h.description=i.payload.description),null!=i.payload?.mimeType&&(h.mimeType=i.payload.mimeType);const r=s(o);return void 0!==r&&(h.messageData=r),h}const u="id3"===r?null==o?void 0:String(o):s(o);return l&&void 0!==u?"id3"===r?h.frames={[l]:u}:h.messageData=u:void 0!==u&&(h.messageData=u),h}emsgToCue(e){const t={type:"emsg",startTime:e.startTime??0,endTime:e.endTime};void 0!==e.schemeIdUri&&(t.schemeIdUri=e.schemeIdUri),void 0!==e.id&&(t.id=String(e.id));const a=i(this.player.getManifest(),t.startTime);if(void 0!==a&&(t.ptsOffset=a),null!=e.messageData){const i=d(e.messageData);i&&(t.raw=i)}const r=s(e.messageData);return void 0!==r&&(t.messageData=r),t}setupVideoListeners(){const e=()=>{this.emit("timeupdate")},t=()=>{this.emit("ended")},i=()=>{this.loadingViaAdapter||this.emit("error",this.video.error)},a=()=>{if(this.emit("seeked"),null!==this.deferredSeekTime){const e=this.deferredSeekTime;this.deferredSeekTime=null,this.seek(e)}},r=()=>{this.emit("volumechange")},s=()=>{this.emit("waiting")},n=()=>{this.emit("playing")},d=()=>{this.emit("pause")};this.video.addEventListener("timeupdate",e),this.video.addEventListener("ended",t),this.video.addEventListener("error",i),this.video.addEventListener("seeked",a),this.video.addEventListener("volumechange",r),this.video.addEventListener("waiting",s),this.video.addEventListener("playing",n),this.video.addEventListener("pause",d),this.boundHandlers.set("timeupdate",e),this.boundHandlers.set("ended",t),this.boundHandlers.set("error",i),this.boundHandlers.set("seeked",a),this.boundHandlers.set("volumechange",r),this.boundHandlers.set("waiting",s),this.boundHandlers.set("playing",n),this.boundHandlers.set("pause",d)}emit(e,t){const i=this.eventListeners.get(e);if(i)for(const e of i)try{e(t)}catch(e){console.error("[ShakaAdapter] Event handler error:",e)}}}
|
|
1
|
+
import{decodeUtf8 as e,parseId3GeobBody as t}from"@dolby-optiview/ads-sdk-core/id3";import{observeExternalPlayback as i,setExternalPlaybackAllowed as a}from"@dolby-optiview/ads-sdk-core/external-playback";import{decodeMetadataValue as s,isGeobBodyCandidate as r,toUint8Array as n}from"./shakaMetadataValue";import{shakaPtsOffsetAt as d}from"./shakaPtsOffset";import{isLoadInterrupted as l,refineShakaLoadError as o}from"./shakaLoadError";export class ShakaAdapter{constructor(e,t){this.eventListeners=new Map,this.boundHandlers=new Map,this.deferredSeekTime=null,this.loadingViaAdapter=!1,this.pendingPresentationDelay=null,this.abrEnabledBeforePin=null,this.variantBeforePin=null,this.emittedCueKeys=new Set,this.player=e,this.video=t,this.externalPlayback=i(t,e=>this.emit("externalplaybackchange",e));const a=e.load;this.originalPlayerLoad=a,e.load=async(...t)=>{null!==this.pendingPresentationDelay&&e.configure?.("manifest.defaultPresentationDelay",this.pendingPresentationDelay),this.pendingPresentationDelay=null;try{return await a.apply(e,t)}catch(e){throw this.loadingViaAdapter||l(e)||this.emit("error",e),e}},this.setupVideoListeners(),this.setupMetadataListener()}get currentTime(){return this.video.currentTime}prepareForAdPlayback(){try{this.player.configure?.("mediaSource.dispatchAllEmsgBoxes",!0)}catch{return}}get duration(){return this.video.duration}get isLive(){return this.player.isLive?.()??null}get paused(){return this.video.paused}get playbackReady(){return this.video.readyState>=HTMLMediaElement.HAVE_CURRENT_DATA&&!this.video.seeking}get muted(){return this.video.muted}set muted(e){this.video.muted=e}get volume(){return this.video.volume}set volume(e){this.video.volume=e}get videoElement(){return this.video}get programDateTime(){try{const e=this.player.getManifest();if(!e)return null;const t=e.presentationTimeline.getInitialProgramDateTime();return null==t?null:new Date(1e3*(t+this.video.currentTime))}catch{return null}}pause(){this.video.pause()}async play(){await this.video.play()}seek(e){this.video.seeking?this.deferredSeekTime=e:this.video.currentTime=e}get sourceUrl(){return this.player.getAssetUri?.()??null}async load(e){this.player.getMediaElement?.()!==this.video&&await this.player.attach(this.video,!1),this.loadingViaAdapter=!0;try{await this.player.load(e)}catch(t){throw await o(t,e)}finally{this.loadingViaAdapter=!1}}async releaseMediaElement(){await(this.player.detach?.())}async unload(){"function"==typeof this.player.unload?await this.player.unload(!1):await(this.player.detach?.())}async recreateMediaPipeline(e){const t=this.sourceUrl;if(!t)throw new Error("Shaka pipeline recreate: no asset URI");this.deferredSeekTime=null;const i=e.startTime,a=!0===this.isLive;let s;try{s=this.player.getManifest()?.presentationTimeline.getInitialProgramDateTime()??null}catch{s=null}const r=a&&null!==s?1e3*(s+i):null,n=this.player.seekRange?.()?.end,d=a&&void 0!==n&&Number.isFinite(n)?Math.max(0,n-i):null;await this.unload(),this.player.getMediaElement?.()!==this.video&&await this.player.attach(this.video,!1),this.loadingViaAdapter=!0;try{if(a)if(null!==r)await this.player.load(t,new Date(r));else if(null!==d){await this.player.load(t,null);const e=this.player.seekRange?.()?.end;if(void 0!==e&&Number.isFinite(e)){const t=e-d;Math.abs(t-this.video.currentTime)>.5&&(this.video.currentTime=t)}}else await this.player.load(t,i);else await this.player.load(t,i)}finally{this.loadingViaAdapter=!1}}on(e,t){this.eventListeners.has(e)||this.eventListeners.set(e,new Set),this.eventListeners.get(e).add(t)}off(e,t){const i=this.eventListeners.get(e);i&&i.delete(t)}get externalPlaybackState(){return this.externalPlayback?.state}setExternalPlaybackAllowed(e){a(this.video,e)}destroy(){this.externalPlayback?.dispose();for(const[e,t]of this.boundHandlers)this.video.removeEventListener(e,t);this.boundHandlers.clear(),this.deferredSeekTime=null,this.player.removeEventListener&&(this.presentedMetadataHandler&&(this.player.removeEventListener("metadata",this.presentedMetadataHandler),this.presentedMetadataHandler=void 0),this.parsedMetadataHandler&&(this.player.removeEventListener("metadataadded",this.parsedMetadataHandler),this.parsedMetadataHandler=void 0)),this.emsgHandler&&this.player.removeEventListener&&(this.player.removeEventListener("emsg",this.emsgHandler),this.emsgHandler=void 0),this.shakaErrorHandler&&this.player.removeEventListener&&(this.player.removeEventListener("error",this.shakaErrorHandler),this.shakaErrorHandler=void 0),this.originalPlayerLoad&&(this.player.load=this.originalPlayerLoad,this.originalPlayerLoad=void 0),this.emittedCueKeys.clear(),this.eventListeners.clear(),this.player.destroy()}get playbackRate(){return this.video.playbackRate}set playbackRate(e){this.video.playbackRate=e}setVideoQuality(e){if(null===e){if(null===this.abrEnabledBeforePin)return!1;const e=this.abrEnabledBeforePin,t=this.variantBeforePin;if(e){if(!this.player.configure)return!1;this.player.configure("abr.enabled",!0)}else{if(!t)return!1;if(!this.player.selectVariantTrack)return!1;this.player.selectVariantTrack(t,!1)}return this.abrEnabledBeforePin=null,this.variantBeforePin=null,!0}const t=this.player.getVariantTracks?.();if(!t||!this.player.selectVariantTrack)return!1;const i=t.filter(e=>{const t=e?.bandwidth;return"number"==typeof t&&Number.isFinite(t)&&t>0});if(i.length<2)return!1;let a=i[0];for(let e=1;e<i.length;e++)i[e].bandwidth<a.bandwidth&&(a=i[e]);if(null!==this.abrEnabledBeforePin)return!0;const s=this.player.getConfiguration?.()?.abr?.enabled??!0,r=t.find(e=>e?.active)??null;if(s&&!this.player.configure||!s&&!r)return!1;this.abrEnabledBeforePin=s,this.variantBeforePin=r;try{return this.player.configure?.("abr.enabled",!1),this.player.selectVariantTrack(a,!1),!0}catch{if(s)try{this.player.configure?.("abr.enabled",!0)}catch{this.variantBeforePin=null}return this.abrEnabledBeforePin=null,this.variantBeforePin=null,!1}}requestLiveStartOffset(e,t){const i=(e??NaN)*(t??NaN),a=Number.isFinite(i)&&i>0&&!!this.player.configure&&!this.player.getManifest();return this.pendingPresentationDelay=a?i:null,a}get liveEdge(){const e=this.player.isLive?.()?this.player.getManifest()?.presentationTimeline.getMaxSegmentEndTime?.():null;return"number"==typeof e&&Number.isFinite(e)?e:null}get maxLiveSeekPosition(){if(!this.player.isLive?.())return null;const e=this.player.seekRange?.(),t=e?.end;if("number"!=typeof t||!Number.isFinite(t))return null;const i=this.player.getConfiguration?.()?.streaming,a=i?.liveSync;let s;if(a?.enabled){const e=a.targetLatency,t=a.targetLatencyTolerance??0;"number"==typeof e&&(s=e-t)}if(void 0===s&&(s=i?.safeSeekEndOffset),"number"!=typeof s||!Number.isFinite(s))return null;const r=t-s;return Number.isFinite(r)?r:null}setupMetadataListener(){if(!this.player.addEventListener)return;const e=e=>t=>{const i={...this.toCue(t),phase:e};this.isDuplicateCue(i)||this.emit("timedmetadata",i)};this.parsedMetadataHandler=e("parsed"),this.presentedMetadataHandler=e("presented"),this.player.addEventListener("metadata",this.presentedMetadataHandler),this.player.addEventListener("metadataadded",this.parsedMetadataHandler);const t=e=>{const t=e.detail;t&&this.emit("timedmetadata",this.emsgToCue(t))};this.emsgHandler=t,this.player.addEventListener("emsg",t);const i=e=>{2!==e.detail?.severity||this.loadingViaAdapter||this.emit("error",e.detail)};this.shakaErrorHandler=i,this.player.addEventListener("error",i)}isDuplicateCue(e){const t=[e.startTime,e.description??"",e.mimeType??"",e.messageData??"",e.frames?JSON.stringify(e.frames):"",e.phase??""].join("\0");return!!this.emittedCueKeys.has(t)||(this.emittedCueKeys.add(t),this.emittedCueKeys.size>256&&this.emittedCueKeys.delete(this.emittedCueKeys.values().next().value),!1)}toCue(i){const a=(i.metadataType??"").toLowerCase(),d=a.includes("emsg")?"emsg":a.includes("daterange")?"daterange":"id3",l=i.payload?.key??i.key,o=i.payload?.data??i.payload?.value??i.data,h={type:d,startTime:i.startTime??i.cueTime??0,endTime:i.endTime};if(void 0!==i.schemeIdUri&&(h.schemeIdUri=i.schemeIdUri),"emsg"===d){const e=null==o?null:n(o);e&&(h.raw=e)}if("id3"===d&&"GEOB"===l){const a=r(i.payload?.description,o)?t(n(o)):null;if(a)return h.description=a.description,a.mimeType&&(h.mimeType=a.mimeType),h.messageData=e(a.data),h;void 0!==i.payload?.description&&(h.description=i.payload.description),null!=i.payload?.mimeType&&(h.mimeType=i.payload.mimeType);const d=s(o);return void 0!==d&&(h.messageData=d),h}const u="id3"===d?null==o?void 0:String(o):s(o);return l&&void 0!==u?"id3"===d?h.frames={[l]:u}:h.messageData=u:void 0!==u&&(h.messageData=u),h}emsgToCue(e){const t={type:"emsg",startTime:e.startTime??0,endTime:e.endTime};void 0!==e.schemeIdUri&&(t.schemeIdUri=e.schemeIdUri),void 0!==e.id&&(t.id=String(e.id));const i=d(this.player.getManifest(),t.startTime);if(void 0!==i&&(t.ptsOffset=i),null!=e.messageData){const i=n(e.messageData);i&&(t.raw=i)}const a=s(e.messageData);return void 0!==a&&(t.messageData=a),t}setupVideoListeners(){const e=()=>{this.emit("timeupdate")},t=()=>{this.emit("ended")},i=()=>{this.loadingViaAdapter||this.emit("error",this.video.error)},a=()=>{if(this.emit("seeked"),null!==this.deferredSeekTime){const e=this.deferredSeekTime;this.deferredSeekTime=null,this.seek(e)}},s=()=>{this.emit("volumechange")},r=()=>{this.emit("waiting")},n=()=>{this.emit("playing")},d=()=>{this.emit("pause")};this.video.addEventListener("timeupdate",e),this.video.addEventListener("ended",t),this.video.addEventListener("error",i),this.video.addEventListener("seeked",a),this.video.addEventListener("volumechange",s),this.video.addEventListener("waiting",r),this.video.addEventListener("playing",n),this.video.addEventListener("pause",d),this.boundHandlers.set("timeupdate",e),this.boundHandlers.set("ended",t),this.boundHandlers.set("error",i),this.boundHandlers.set("seeked",a),this.boundHandlers.set("volumechange",s),this.boundHandlers.set("waiting",r),this.boundHandlers.set("playing",n),this.boundHandlers.set("pause",d)}emit(e,t){const i=this.eventListeners.get(e);if(i)for(const e of i)try{e(t)}catch(e){console.error("[ShakaAdapter] Event handler error:",e)}}}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decode a metadata payload value into text: byte buffers are decoded as
|
|
3
|
+
* UTF-8 (the encoding of ID3 GEOB object data and emsg message data);
|
|
4
|
+
* strings pass through; anything else is stringified.
|
|
5
|
+
*/
|
|
6
|
+
export declare function decodeMetadataValue(value: unknown): string | undefined;
|
|
7
|
+
/**
|
|
8
|
+
* Whether a GEOB payload looks like a raw, undecoded frame body that this
|
|
9
|
+
* adapter has to parse itself: Shaka surfaced no content description AND the
|
|
10
|
+
* data arrived as bytes. A player that decoded the frame gives us a real
|
|
11
|
+
* description (and hands over just the object data), so it is left untouched.
|
|
12
|
+
*/
|
|
13
|
+
export declare function isGeobBodyCandidate(description: string | undefined, value: unknown): boolean;
|
|
14
|
+
/** View a byte payload as a Uint8Array without copying. */
|
|
15
|
+
export declare function toUint8Array(value: unknown): Uint8Array;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function decodeMetadataValue(t){if(null!=t)return"string"==typeof t?t:e(t)?new TextDecoder("utf-8").decode(t):ArrayBuffer.isView(t)?new TextDecoder("utf-8").decode(new Uint8Array(t.buffer,t.byteOffset,t.byteLength)):String(t)}function e(e){return e instanceof ArrayBuffer||"[object ArrayBuffer]"===Object.prototype.toString.call(e)}export function isGeobBodyCandidate(t,r){return(void 0===t||""===t)&&(e(r)||ArrayBuffer.isView(r))}export function toUint8Array(t){if(e(t))return new Uint8Array(t);const r=t;return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dolby-optiview/ads-sdk-adapter-shaka",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Shaka Player adapter for OptiView Ads SDK",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
},
|
|
39
39
|
"sideEffects": false,
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@dolby-optiview/ads-sdk-core": "^1.
|
|
41
|
+
"@dolby-optiview/ads-sdk-core": "^1.3.0"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"shaka-player": "^4.0.0 || ^5.0.0"
|