Skip to content
Closed
15 changes: 11 additions & 4 deletions src/compat/remove_cue.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/

import log from "../log";
import type { ICompatTextTrack, ICompatVTTCue } from "./browser_compatibility_types";
import { isFirefox } from "./browser_detection";

/**
Expand All @@ -23,7 +24,10 @@ import { isFirefox } from "./browser_detection";
* @param {TextTrackCue} cue
* @returns {boolean}
*/
function isActiveCue(track: TextTrack, cue: TextTrackCue): boolean {
function isActiveCue(
track: TextTrack | ICompatTextTrack,
cue: TextTrackCue | ICompatVTTCue,
): boolean {
const { activeCues } = track;
if (activeCues === null) {
return false;
Expand All @@ -41,23 +45,26 @@ function isActiveCue(track: TextTrack, cue: TextTrackCue): boolean {
* @param {TextTrack} track
* @param {TextTrackCue} cue
*/
export default function removeCue(track: TextTrack, cue: TextTrackCue): void {
export default function removeCue(
track: TextTrack | ICompatTextTrack,
cue: TextTrackCue | ICompatVTTCue,
): void {
// On Firefox, cue doesn't dissapear when it is removed from track. Track
// should be hidden, and shown again after removing cue, in order to
// definitely clean the cue.
if (isFirefox && isActiveCue(track, cue)) {
const trackMode = track.mode;
track.mode = "hidden";
try {
track.removeCue(cue);
track.removeCue(cue as TextTrackCue);
} catch (_err) {
log.warn("Compat: Could not remove cue from text track.");
}
track.mode = trackMode;
return;
}
try {
track.removeCue(cue);
track.removeCue(cue as TextTrackCue);
} catch (_err) {
log.warn("Compat: Could not remove cue from text track.");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@
* limitations under the License.
*/

import AudioVideoSegmentSink from "./audio_video_segment_buffer";
import AudioVideoSegmentSink from "./audio_video_segment_sink";
export default AudioVideoSegmentSink;
4 changes: 2 additions & 2 deletions src/core/segment_sinks/implementations/text/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { ITextDisplayerInterface } from "./text_segment_buffer";
import TextSegmentSink from "./text_segment_buffer";
import type { ITextDisplayerInterface } from "./text_segment_sink";
import TextSegmentSink from "./text_segment_sink";

export default TextSegmentSink;
export type { ITextDisplayerInterface };
2 changes: 1 addition & 1 deletion src/core/segment_sinks/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ import {
getFirstSegmentAfterPeriod,
getLastSegmentBeforePeriod,
} from "./inventory";
import SegmentSinksStore from "./segment_buffers_store";
import SegmentSinksStore from "./segment_sinks_store";

export default SegmentSinksStore;
export type {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,11 @@ export default class SegmentSinksStore {
* disabled. This means that the corresponding type (e.g. audio, video etc.)
* won't be needed when playing the current content.
*/
private _initializedSegmentSinks: Partial<Record<IBufferType, SegmentSink | null>>;
private _initializedSegmentSinks: {
audio?: AudioVideoSegmentSink | undefined | null;
video?: AudioVideoSegmentSink | undefined | null;
text?: TextSegmentSink | null;
};

/**
* Callbacks called after a SourceBuffer is either created or disabled.
Expand Down Expand Up @@ -308,7 +312,7 @@ export default class SegmentSinksStore {
return memorizedSegmentSink;
}

let segmentSink: SegmentSink;
let segmentSink: TextSegmentSink;
if (bufferType === "text") {
log.info("SB: Creating a new text SegmentSink");
if (this._textInterface === null) {
Expand Down
2 changes: 1 addition & 1 deletion src/main_thread/api/debug/buffer_graph.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { IBufferedChunkSnapshot } from "../../../core/segment_sinks/segment_buffers_store";
import type { IBufferedChunkSnapshot } from "../../../core/segment_sinks/segment_sinks_store";
import type { IRepresentationMetadata } from "../../../manifest";

const BUFFER_WIDTH_IN_SECONDS = 30 * 60;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { ISegmentSinkMetrics } from "../../../../core/segment_sinks/segment_buffers_store";
import type { ISegmentSinkMetrics } from "../../../../core/segment_sinks/segment_sinks_store";
import type { IBufferType } from "../../../../core/types";
import type {
IAdaptationMetadata,
Expand Down
2 changes: 1 addition & 1 deletion src/main_thread/api/public_api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import hasMseInWorker from "../../compat/has_mse_in_worker";
import hasWorkerApi from "../../compat/has_worker_api";
import isDebugModeEnabled from "../../compat/is_debug_mode_enabled";
import config from "../../config";
import type { ISegmentSinkMetrics } from "../../core/segment_sinks/segment_buffers_store";
import type { ISegmentSinkMetrics } from "../../core/segment_sinks/segment_sinks_store";
import type {
IAdaptationChoice,
IInbandEvent,
Expand Down
Loading