diff --git a/src/engines/html5/html5.ts b/src/engines/html5/html5.ts
index 58a8e71c..96eefae3 100644
--- a/src/engines/html5/html5.ts
+++ b/src/engines/html5/html5.ts
@@ -1,23 +1,23 @@
import { FakeEventTarget } from '../../event/fake-event-target';
import { FakeEvent } from '../../event/fake-event';
import { EventManager } from '../../event/event-manager';
-import {CustomEventType, Html5EventType} from '../../event/event-type';
+import { CustomEventType, Html5EventType } from '../../event/event-type';
import MediaSourceProvider from './media-source/media-source-provider';
import VideoTrack from '../../track/video-track';
import AudioTrack from '../../track/audio-track';
-import {PKTextTrack, getActiveCues} from '../../track/text-track';
+import { PKTextTrack, getActiveCues } from '../../track/text-track';
import ImageTrack from '../../track/image-track';
-import {createTimedMetadata} from '../../track/timed-metadata';
+import { createTimedMetadata } from '../../track/timed-metadata';
import * as Utils from '../../utils/util';
import Html5AutoPlayCapability from './capabilities/html5-autoplay';
import Error from '../../error/error';
import getLogger from '../../utils/logger';
-import {DroppedFramesWatcher} from '../dropped-frames-watcher';
-import {ThumbnailInfo} from '../../thumbnail/thumbnail-info';
-import {IMediaSourceAdapter} from '../../types';
-import {CapabilityResult, ICapability} from '../../types';
-import {PKABRRestrictionObject, PKDrmConfigObject, PKDrmDataObject, PKMediaSourceObject, PKVideoElementStore} from '../../types';
-import {IEngine} from '../../types';
+import { DroppedFramesWatcher } from '../dropped-frames-watcher';
+import { ThumbnailInfo } from '../../thumbnail/thumbnail-info';
+import { IMediaSourceAdapter } from '../../types';
+import { CapabilityResult, ICapability } from '../../types';
+import { PKABRRestrictionObject, PKDrmConfigObject, PKDrmDataObject, PKMediaSourceObject, PKVideoElementStore } from '../../types';
+import { IEngine } from '../../types';
import Track from '../../track/track';
const SHORT_BUFFERING_TIMEOUT: number = 200;
@@ -59,6 +59,9 @@ export default class Html5 extends FakeEventTarget implements IEngine {
private _canLoadMediaSourceAdapterPromise: Promise;
private _droppedFramesWatcher: DroppedFramesWatcher | undefined;
private _reset: boolean = false;
+
+ private _cachedUrls: string[] = [];
+
/**
* The html5 class logger.
* @type {any}
@@ -133,7 +136,7 @@ export default class Html5 extends FakeEventTarget implements IEngine {
* @static
*/
public static runCapabilities(): void {
- Html5._capabilities.forEach(capability => capability.runCapability());
+ Html5._capabilities.forEach((capability) => capability.runCapability());
}
/**
@@ -142,13 +145,13 @@ export default class Html5 extends FakeEventTarget implements IEngine {
* @public
* @static
*/
- public static getCapabilities(): Promise {
+ public static getCapabilities(): Promise {
const promises: CapabilityResult[] = [];
- Html5._capabilities.forEach(capability => promises.push(capability.getCapability()));
- return Promise.all(promises).then(arrayOfResults => {
+ Html5._capabilities.forEach((capability) => promises.push(capability.getCapability()));
+ return Promise.all(promises).then((arrayOfResults) => {
const mergedResults: CapabilityResult = {};
- arrayOfResults.forEach(res => Object.assign(mergedResults, res));
- return {[Html5.id]: mergedResults};
+ arrayOfResults.forEach((res) => Object.assign(mergedResults, res));
+ return { [Html5.id]: mergedResults };
});
}
@@ -159,8 +162,8 @@ export default class Html5 extends FakeEventTarget implements IEngine {
* @public
* @static
*/
- public static setCapabilities(capabilities: {[name: string]: any}): void {
- Html5._capabilities.forEach(capability => capability.setCapabilities(capabilities));
+ public static setCapabilities(capabilities: { [name: string]: any }): void {
+ Html5._capabilities.forEach((capability) => capability.setCapabilities(capabilities));
}
/**
@@ -257,6 +260,7 @@ export default class Html5 extends FakeEventTarget implements IEngine {
this._droppedFramesWatcher = undefined;
}
if (this._mediaSourceAdapter) {
+ this._mediaSourceAdapter.setCachedUrls([]);
this._mediaSourceAdapter.destroy();
this._mediaSourceAdapter = null;
}
@@ -308,7 +312,7 @@ export default class Html5 extends FakeEventTarget implements IEngine {
* @returns {void}
*/
public attach(): void {
- Object.keys(Html5EventType).forEach(html5Event => {
+ Object.keys(Html5EventType).forEach((html5Event) => {
if (![Html5EventType.ERROR, Html5EventType.WAITING].includes(Html5EventType[html5Event])) {
this._eventManager.listen(this._el, Html5EventType[html5Event], () => {
return this.dispatchEvent(new FakeEvent(Html5EventType[html5Event]));
@@ -320,7 +324,7 @@ export default class Html5 extends FakeEventTarget implements IEngine {
this._handleMetadataTrackEvents();
this._eventManager.listen(this._el.textTracks, 'addtrack', (event: any) => {
if (PKTextTrack.isNativeTextTrack(event.track)) {
- this.dispatchEvent(new FakeEvent(CustomEventType.TEXT_TRACK_ADDED, {track: event.track}));
+ this.dispatchEvent(new FakeEvent(CustomEventType.TEXT_TRACK_ADDED, { track: event.track }));
}
});
const mediaSourceAdapter = this._mediaSourceAdapter;
@@ -354,7 +358,7 @@ export default class Html5 extends FakeEventTarget implements IEngine {
* @returns {void}
*/
public detach(): void {
- Object.keys(Html5EventType).forEach(html5Event => {
+ Object.keys(Html5EventType).forEach((html5Event) => {
this._eventManager.unlisten(this._el, Html5EventType[html5Event]);
});
if (this._mediaSourceAdapter) {
@@ -517,7 +521,7 @@ export default class Html5 extends FakeEventTarget implements IEngine {
public play(): Promise {
const playPromise = this._el.play();
if (playPromise) {
- playPromise.catch(err => this.dispatchEvent(new FakeEvent(CustomEventType.PLAY_FAILED, {error: err})));
+ playPromise.catch((err) => this.dispatchEvent(new FakeEvent(CustomEventType.PLAY_FAILED, { error: err })));
}
return playPromise;
}
@@ -537,13 +541,13 @@ export default class Html5 extends FakeEventTarget implements IEngine {
* @public
* @returns {Promise