Skip to content

Commit

Permalink
fix: remove loadedmetadata listener once metadata loaded (#52)
Browse files Browse the repository at this point in the history
  • Loading branch information
yairans authored Feb 18, 2018
1 parent 9945103 commit cfcd2c1
Showing 1 changed file with 36 additions and 2 deletions.
38 changes: 36 additions & 2 deletions src/hls-adapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ export default class HlsAdapter extends BaseMediaSourceAdapter {
* @private
*/
_loadPromise: ?Promise<Object>;

/**
* Reference to the player tracks.
* @member {Array<Track>} - _playerTracks
Expand All @@ -76,6 +77,14 @@ export default class HlsAdapter extends BaseMediaSourceAdapter {
*/
_playerTracks: Array<Track>;

/**
* Reference to _onLoadedMetadata function
* @member {?Function} - _onLoadedMetadataCallback
* @type {?Function}
* @private
*/
_onLoadedMetadataCallback: ?Function;

/**
* Factory method to create media source adapter.
* @function createAdapter
Expand Down Expand Up @@ -168,7 +177,8 @@ export default class HlsAdapter extends BaseMediaSourceAdapter {
load(startTime: ?number): Promise<Object> {
if (!this._loadPromise) {
this._loadPromise = new Promise((resolve) => {
this._videoElement.addEventListener(EventType.LOADED_METADATA, () => resolve({tracks: this._playerTracks}));
this._onLoadedMetadataCallback = this._onLoadedMetadata.bind(this, resolve);
this._videoElement.addEventListener(EventType.LOADED_METADATA, this._onLoadedMetadataCallback);
if (startTime) {
this._hls.startPosition = startTime;
}
Expand All @@ -182,6 +192,29 @@ export default class HlsAdapter extends BaseMediaSourceAdapter {
return this._loadPromise;
}

/**
* Loaded metadata event handler.
* @param {Function} resolve - The resolve promise function.
* @private
* @returns {void}
*/
_onLoadedMetadata(resolve: Function): void {
this._removeLoadedMetadataListener();
resolve({tracks: this._playerTracks});
}

/**
* Remove the loadedmetadata listener
* @private
* @returns {void}
*/
_removeLoadedMetadataListener(): void {
if (this._onLoadedMetadataCallback) {
this._videoElement.removeEventListener(EventType.LOADED_METADATA, this._onLoadedMetadataCallback);
this._onLoadedMetadataCallback = null;
}
}

/**
* Destroys the hls adapter.
* @function destroy
Expand Down Expand Up @@ -477,7 +510,7 @@ export default class HlsAdapter extends BaseMediaSourceAdapter {
const timeUpdateListener = () => {
this._trigger(EventType.PLAYING);
this._videoElement.removeEventListener(EventType.TIME_UPDATE, timeUpdateListener);
}
};
this._videoElement.addEventListener(EventType.TIME_UPDATE, timeUpdateListener)
}
}
Expand Down Expand Up @@ -616,6 +649,7 @@ export default class HlsAdapter extends BaseMediaSourceAdapter {
this._hls.off(Hlsjs.Events.ERROR, this._onError);
this._hls.off(Hlsjs.Events.LEVEL_SWITCHED, this._onLevelSwitched);
this._hls.off(Hlsjs.Events.AUDIO_TRACK_SWITCHED, this._onAudioTrackSwitched);
this._removeLoadedMetadataListener();
}

/**
Expand Down

0 comments on commit cfcd2c1

Please sign in to comment.