Skip to content

Commit 11f9747

Browse files
committed
Switch on FRAG_PARSING_ERROR or continue trying fragLoadPolicy.default.errorRetry.maxNumRetry (6) times
Fixes #5011
1 parent 92e9545 commit 11f9747

File tree

3 files changed

+14
-7
lines changed

3 files changed

+14
-7
lines changed

src/controller/base-stream-controller.ts

+13-4
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ import type {
3737
KeyLoadedData,
3838
MediaAttachingData,
3939
BufferFlushingData,
40-
LevelSwitchingData,
4140
ManifestLoadedData,
4241
} from '../types/events';
4342
import type { FragmentTracker } from './fragment-tracker';
@@ -356,7 +355,6 @@ export default class BaseStreamController
356355
// if we're here we probably needed to backtrack or are waiting for more parts
357356
return;
358357
}
359-
level.fragmentError = 0;
360358
const state = this.state;
361359
if (this.fragContextChanged(frag)) {
362360
if (
@@ -1520,10 +1518,21 @@ export default class BaseStreamController
15201518
},
15211519
false
15221520
);
1523-
if (!parsed) {
1524-
this.warn(
1521+
if (parsed) {
1522+
level.fragmentError = 0;
1523+
} else {
1524+
const error = new Error(
15251525
`Found no media in fragment ${frag.sn} of level ${level.id} resetting transmuxer to fallback to playlist timing`
15261526
);
1527+
this.warn(error.message);
1528+
this.hls.trigger(Events.ERROR, {
1529+
type: ErrorTypes.MEDIA_ERROR,
1530+
details: ErrorDetails.FRAG_PARSING_ERROR,
1531+
fatal: false,
1532+
error,
1533+
frag,
1534+
reason: `Found no media in msn ${frag.sn} of level "${level.url}"`,
1535+
});
15271536
this.resetTransmuxer();
15281537
}
15291538
this.state = State.PARSED;

src/controller/error-controller.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,7 @@ export default class ErrorController {
9494
case ErrorDetails.FRAG_PARSING_ERROR:
9595
case ErrorDetails.FRAG_DECRYPT_ERROR: {
9696
const levelIndex = this.getVariantLevelIndex(data.frag);
97-
// Do not retry level. Escalate to fatal if switching levels fails.
98-
data.levelRetry = false;
97+
// Switch level if possible, otherwise allow retry count to reach max error retries
9998
this.levelSwitch(data, levelIndex);
10099
return;
101100
}

src/controller/level-controller.ts

-1
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,6 @@ export default class LevelController extends BasePlaylistController {
445445
if (frag !== undefined && frag.type === PlaylistLevelType.MAIN) {
446446
const level = this._levels[frag.level];
447447
if (level !== undefined) {
448-
level.fragmentError = 0;
449448
level.loadError = 0;
450449
}
451450
}

0 commit comments

Comments
 (0)