From 530170b789d7734d2b70fde7d59abb1ebf8a582c Mon Sep 17 00:00:00 2001 From: Gary Katsevman Date: Fri, 14 Apr 2023 12:12:30 -0400 Subject: [PATCH] feat: add currentPdt getter and getStartDate() method (#661) --- packages/mux-audio/src/index.ts | 10 ++ packages/mux-audio/test/player.test.js | 27 +++++ packages/mux-player/REFERENCE.md | 3 + packages/mux-player/src/index.ts | 8 ++ packages/mux-player/test/player.test.js | 34 ++++++ packages/mux-video/src/index.ts | 10 ++ packages/mux-video/test/index.test.js | 27 +++++ packages/playback-core/src/index.ts | 3 + packages/playback-core/src/pdt.ts | 37 ++++++ packages/playback-core/test/pdt.test.js | 145 ++++++++++++++++++++++++ 10 files changed, 304 insertions(+) create mode 100644 packages/playback-core/src/pdt.ts create mode 100644 packages/playback-core/test/pdt.test.js diff --git a/packages/mux-audio/src/index.ts b/packages/mux-audio/src/index.ts index e500e23d3..edc651dd2 100644 --- a/packages/mux-audio/src/index.ts +++ b/packages/mux-audio/src/index.ts @@ -10,6 +10,8 @@ import { toMuxVideoURL, Metadata, MediaError, + getStartDate, + getCurrentPdt, } from '@mux/playback-core'; import type { PlaybackCore, PlaybackEngine, ExtensionMimeTypeMap } from '@mux/playback-core'; import { getPlayerVersion } from './env'; @@ -231,6 +233,14 @@ class MuxAudioElement extends CustomAudioElement implements Pa } } + getStartDate() { + return getStartDate(this.nativeEl, this._hls); + } + + get currentPdt() { + return getCurrentPdt(this.nativeEl, this._hls); + } + get preferPlayback(): ValueOf | undefined { const val = this.getAttribute(Attributes.PREFER_PLAYBACK); if (val === PlaybackTypes.MSE || val === PlaybackTypes.NATIVE) return val; diff --git a/packages/mux-audio/test/player.test.js b/packages/mux-audio/test/player.test.js index 19d94f10f..d1fee2b93 100644 --- a/packages/mux-audio/test/player.test.js +++ b/packages/mux-audio/test/player.test.js @@ -103,4 +103,31 @@ describe('', () => { assert.equal(player.metadata.sub_property_id, 'sub-id-12'); assert.equal(player.metadata.video_id, playbackId); }); + + it('currentPdt and getStartDate work as expected', async function () { + this.timeout(5000); + + const player = await fixture(``); + + await aTimeout(1000); + + player.currentTime = 60; + + await aTimeout(50); + + const currentPdt = player.currentPdt; + const startDate = player.getStartDate(); + + assert.equal( + startDate.getTime(), + currentPdt.getTime() - player.currentTime * 1000, + 'currentPdt should be ~60 seconds greater than getStartDate' + ); + }); }); diff --git a/packages/mux-player/REFERENCE.md b/packages/mux-player/REFERENCE.md index d0d59f1a4..b47170be1 100644 --- a/packages/mux-player/REFERENCE.md +++ b/packages/mux-player/REFERENCE.md @@ -58,6 +58,8 @@ | `play()` | Identical to the [native `play()` method](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/play). | | `pause()` | Identical to the [native `pause()` method](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/pause). | | `addCuePoints()` | Add an array of metadata CuePoints of "shape" `{ time: number; value: any; }` to the Mux Player instance for the current media | +| `getStartDate()` | Will return a Date that matches the earliest PDT in your stream. Identical to [native `getStartDate()` method](https://html.spec.whatwg.org/multipage/media.html#dom-media-getstartdate), if exists. | +|