Skip to content

Commit

Permalink
fix cases for more them 1 captions, add test for the number of captio…
Browse files Browse the repository at this point in the history
…ns exist
  • Loading branch information
inbalvasserman committed Nov 21, 2024
1 parent 28f9587 commit 744bb2a
Showing 1 changed file with 70 additions and 60 deletions.
130 changes: 70 additions & 60 deletions src/hls-adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ export default class HlsAdapter extends BaseMediaSourceAdapter {
private _nativeTextTracksMap: any = {};
private _lastLoadedFragSN: number = -1;
private _sameFragSNLoadedCount: number = 0;
private _waitForSubtitleLoad: boolean = true;
/**
* an object containing all the events we bind and unbind to.
* @member {Object} - _adapterEventsBindings
Expand Down Expand Up @@ -791,6 +792,12 @@ export default class HlsAdapter extends BaseMediaSourceAdapter {
this._onTrackChanged(textTrack);
}

private _onSubtitleFragProcessed(): void {
this._hls.subtitleTrack = -1;
this._waitForSubtitleLoad = false;
this._hls.off(Hlsjs.Events.SUBTITLE_FRAG_PROCESSED, this._onSubtitleFragProcessed, this);
}

/** Hide the text track
* @function hideTextTrack
* @returns {void}
Expand All @@ -802,6 +809,8 @@ export default class HlsAdapter extends BaseMediaSourceAdapter {
}
if (!this._hls.subtitleTracks.length) {
this.disableNativeTextTracks();
} else if (this._waitForSubtitleLoad && this._hls.subtitleTracks.length > 1){
this._hls.on(Hlsjs.Events.SUBTITLE_FRAG_PROCESSED, this. _onSubtitleFragProcessed, this)
} else {
this._hls.subtitleTrack = -1;
}
Expand Down Expand Up @@ -1038,50 +1047,50 @@ export default class HlsAdapter extends BaseMediaSourceAdapter {
const errorDataObject: any = {};
errorDataObject.name = data.details;
switch (errorDataObject.name) {
case Hlsjs.ErrorDetails.MANIFEST_LOAD_ERROR:
case Hlsjs.ErrorDetails.LEVEL_LOAD_ERROR:
case Hlsjs.ErrorDetails.AUDIO_TRACK_LOAD_ERROR:
errorDataObject.url = data.url;
errorDataObject.responseCode = data.response ? data.response.code : null;
break;
case Hlsjs.ErrorDetails.MANIFEST_LOAD_TIMEOUT:
case Hlsjs.ErrorDetails.LEVEL_LOAD_TIMEOUT:
case Hlsjs.ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT:
errorDataObject.url = data.url;
break;
case Hlsjs.ErrorDetails.MANIFEST_PARSING_ERROR:
errorDataObject.url = data.url;
errorDataObject.reason = data.reason;
break;
case Hlsjs.ErrorDetails.LEVEL_SWITCH_ERROR:
errorDataObject.level = data.level;
errorDataObject.reason = data.reason;
break;
case Hlsjs.ErrorDetails.FRAG_LOAD_ERROR:
errorDataObject.fragUrl = data.frag ? data.frag.url : null;
errorDataObject.responseCode = data.response ? data.response.code : null;
break;
case Hlsjs.ErrorDetails.FRAG_LOAD_TIMEOUT:
errorDataObject.fragUrl = data.frag ? data.frag.url : null;
break;
case Hlsjs.ErrorDetails.FRAG_DECRYPT_ERROR:
case Hlsjs.ErrorDetails.FRAG_PARSING_ERROR:
errorDataObject.reason = data.reason;
break;
case Hlsjs.ErrorDetails.KEY_LOAD_ERROR:
errorDataObject.fragDecryptedDataUri = data.frag && data.frag.decryptdata ? data.frag.decryptdata.uri : null;
errorDataObject.responseCode = data.response ? data.response.code : null;
break;
case Hlsjs.ErrorDetails.KEY_LOAD_TIMEOUT:
errorDataObject.fragDecryptedDataUri = data.frag && data.frag.decryptdata ? data.frag.decryptdata.uri : null;
break;
case Hlsjs.ErrorDetails.BUFFER_ADD_CODEC_ERROR:
errorDataObject.mimeType = data.mimeType;
errorDataObject.errorMsg = data.err ? data.err.message : null;
break;
case Hlsjs.ErrorDetails.BUFFER_STALLED_ERROR:
errorDataObject.buffer = data.buffer;
break;
case Hlsjs.ErrorDetails.MANIFEST_LOAD_ERROR:

Check failure on line 1050 in src/hls-adapter.ts

View workflow job for this annotation

GitHub Actions / lint / running-tests (ubuntu-latest)

Expected indentation of 4 spaces but found 6
case Hlsjs.ErrorDetails.LEVEL_LOAD_ERROR:

Check failure on line 1051 in src/hls-adapter.ts

View workflow job for this annotation

GitHub Actions / lint / running-tests (ubuntu-latest)

Expected indentation of 4 spaces but found 6
case Hlsjs.ErrorDetails.AUDIO_TRACK_LOAD_ERROR:

Check failure on line 1052 in src/hls-adapter.ts

View workflow job for this annotation

GitHub Actions / lint / running-tests (ubuntu-latest)

Expected indentation of 4 spaces but found 6
errorDataObject.url = data.url;

Check failure on line 1053 in src/hls-adapter.ts

View workflow job for this annotation

GitHub Actions / lint / running-tests (ubuntu-latest)

Expected indentation of 6 spaces but found 8
errorDataObject.responseCode = data.response ? data.response.code : null;

Check failure on line 1054 in src/hls-adapter.ts

View workflow job for this annotation

GitHub Actions / lint / running-tests (ubuntu-latest)

Expected indentation of 6 spaces but found 8
break;

Check failure on line 1055 in src/hls-adapter.ts

View workflow job for this annotation

GitHub Actions / lint / running-tests (ubuntu-latest)

Expected indentation of 6 spaces but found 8
case Hlsjs.ErrorDetails.MANIFEST_LOAD_TIMEOUT:

Check failure on line 1056 in src/hls-adapter.ts

View workflow job for this annotation

GitHub Actions / lint / running-tests (ubuntu-latest)

Expected indentation of 4 spaces but found 6
case Hlsjs.ErrorDetails.LEVEL_LOAD_TIMEOUT:

Check failure on line 1057 in src/hls-adapter.ts

View workflow job for this annotation

GitHub Actions / lint / running-tests (ubuntu-latest)

Expected indentation of 4 spaces but found 6
case Hlsjs.ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT:

Check failure on line 1058 in src/hls-adapter.ts

View workflow job for this annotation

GitHub Actions / lint / running-tests (ubuntu-latest)

Expected indentation of 4 spaces but found 6
errorDataObject.url = data.url;

Check failure on line 1059 in src/hls-adapter.ts

View workflow job for this annotation

GitHub Actions / lint / running-tests (ubuntu-latest)

Expected indentation of 6 spaces but found 8
break;
case Hlsjs.ErrorDetails.MANIFEST_PARSING_ERROR:
errorDataObject.url = data.url;
errorDataObject.reason = data.reason;
break;
case Hlsjs.ErrorDetails.LEVEL_SWITCH_ERROR:
errorDataObject.level = data.level;
errorDataObject.reason = data.reason;
break;
case Hlsjs.ErrorDetails.FRAG_LOAD_ERROR:
errorDataObject.fragUrl = data.frag ? data.frag.url : null;
errorDataObject.responseCode = data.response ? data.response.code : null;
break;
case Hlsjs.ErrorDetails.FRAG_LOAD_TIMEOUT:
errorDataObject.fragUrl = data.frag ? data.frag.url : null;
break;
case Hlsjs.ErrorDetails.FRAG_DECRYPT_ERROR:
case Hlsjs.ErrorDetails.FRAG_PARSING_ERROR:
errorDataObject.reason = data.reason;
break;
case Hlsjs.ErrorDetails.KEY_LOAD_ERROR:
errorDataObject.fragDecryptedDataUri = data.frag && data.frag.decryptdata ? data.frag.decryptdata.uri : null;
errorDataObject.responseCode = data.response ? data.response.code : null;
break;
case Hlsjs.ErrorDetails.KEY_LOAD_TIMEOUT:
errorDataObject.fragDecryptedDataUri = data.frag && data.frag.decryptdata ? data.frag.decryptdata.uri : null;
break;
case Hlsjs.ErrorDetails.BUFFER_ADD_CODEC_ERROR:
errorDataObject.mimeType = data.mimeType;
errorDataObject.errorMsg = data.err ? data.err.message : null;
break;
case Hlsjs.ErrorDetails.BUFFER_STALLED_ERROR:
errorDataObject.buffer = data.buffer;
break;
}
if (this._requestFilterError || this._responseFilterError) {
errorDataObject.reason = data.response.text;
Expand All @@ -1103,7 +1112,7 @@ export default class HlsAdapter extends BaseMediaSourceAdapter {
if (errorFatal) {
let error: PKError;
switch (errorType) {
case Hlsjs.ErrorTypes.NETWORK_ERROR:
case Hlsjs.ErrorTypes.NETWORK_ERROR:
{
let code;
if (this._requestFilterError) {
Expand All @@ -1115,28 +1124,28 @@ export default class HlsAdapter extends BaseMediaSourceAdapter {
}
if (
[Hlsjs.ErrorDetails.MANIFEST_LOAD_ERROR, Hlsjs.ErrorDetails.MANIFEST_LOAD_TIMEOUT].includes(errorName) &&
!this._triedReloadWithRedirect &&
!this._config.forceRedirectExternalStreams &&
!this._requestFilterError &&
!this._responseFilterError
!this._triedReloadWithRedirect &&
!this._config.forceRedirectExternalStreams &&
!this._requestFilterError &&
!this._responseFilterError
) {
error = new PKError(PKError.Severity.RECOVERABLE, PKError.Category.NETWORK, code, errorDataObject);
this._reloadWithDirectManifest();
} else {
error = new PKError(PKError.Severity.CRITICAL, PKError.Category.NETWORK, code, errorDataObject);
}
}
break;
case Hlsjs.ErrorTypes.MEDIA_ERROR:
if (this._handleMediaError(errorName)) {
error = new PKError(PKError.Severity.RECOVERABLE, PKError.Category.MEDIA, PKError.Code.HLS_FATAL_MEDIA_ERROR, errorDataObject);
} else {
error = new PKError(PKError.Severity.CRITICAL, PKError.Category.MEDIA, PKError.Code.HLS_FATAL_MEDIA_ERROR, errorDataObject);
}
break;
default:
error = new PKError(PKError.Severity.CRITICAL, PKError.Category.PLAYER, PKError.Code.HLS_FATAL_MEDIA_ERROR, errorDataObject);
break;
break;
case Hlsjs.ErrorTypes.MEDIA_ERROR:
if (this._handleMediaError(errorName)) {
error = new PKError(PKError.Severity.RECOVERABLE, PKError.Category.MEDIA, PKError.Code.HLS_FATAL_MEDIA_ERROR, errorDataObject);
} else {
error = new PKError(PKError.Severity.CRITICAL, PKError.Category.MEDIA, PKError.Code.HLS_FATAL_MEDIA_ERROR, errorDataObject);
}
break;
default:
error = new PKError(PKError.Severity.CRITICAL, PKError.Category.PLAYER, PKError.Code.HLS_FATAL_MEDIA_ERROR, errorDataObject);
break;
}
this._trigger(EventType.ERROR, error);
if (error && error.severity === PKError.Severity.CRITICAL) {
Expand Down Expand Up @@ -1245,6 +1254,7 @@ export default class HlsAdapter extends BaseMediaSourceAdapter {
for (const [event, callback] of Object.entries<(...parms: any) => any>(this._adapterEventsBindings)) {
this._hls.off(event as keyof HlsListeners, callback);
}
this._hls.off(Hlsjs.Events.SUBTITLE_FRAG_PROCESSED, this._onSubtitleFragProcessed, this);
this._videoElement.textTracks.onaddtrack = null;
this._onRecoveredCallback = null;
if (this._eventManager) {
Expand Down

0 comments on commit 744bb2a

Please sign in to comment.