rx-player
Version:
Canal+ HTML5 Video Player
41 lines (39 loc) • 1.33 kB
text/typescript
import type { IManifest } from "../../../manifest";
import type { IThumbnailResponse } from "../../../transports";
import arrayFind from "../../../utils/array_find";
import TaskCanceller from "../../../utils/task_canceller";
import type { IThumbnailFetcher } from "../../fetchers";
/**
* @param {function} fetchThumbnails
* @param {Object} manifest
* @param {string} periodId
* @param {string} thumbnailTrackId
* @param {number} time
* @returns {Promise.<Object>}
*/
export default async function getThumbnailData(
fetchThumbnails: IThumbnailFetcher,
manifest: IManifest,
periodId: string,
thumbnailTrackId: string,
time: number,
): Promise<IThumbnailResponse> {
const period = manifest.getPeriod(periodId);
if (period === undefined) {
throw new Error("Wanted Period not found.");
}
const thumbnailTrack = arrayFind(period.thumbnailTracks, (t) => {
return t.id === thumbnailTrackId;
});
if (thumbnailTrack === undefined) {
throw new Error("Wanted Period has no thumbnail track.");
}
const wantedThumbnail = thumbnailTrack.index.getSegments(time, 1)[0];
if (wantedThumbnail === undefined) {
throw new Error("No thumbnail for the given timestamp");
}
return fetchThumbnails(
{ segment: wantedThumbnail, track: thumbnailTrack, period },
new TaskCanceller().signal,
);
}