/** * Copyright 2015 CANAL+ Group * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import type { IMediaElementPlaybackObserver } from "../../../playback_observer"; import type { IPlayerError } from "../../../public_types"; import type { IReadOnlySharedReference } from "../../../utils/reference"; import type { CancellationSignal } from "../../../utils/task_canceller"; /** Event emitted when trying to perform the initial `play`. */ export type IInitialPlayEvent = /** Autoplay is not enabled, but all required steps to do so are there. */ { type: "skipped"; } /** * Tried to play, but autoplay is blocked by the browser. * A corresponding warning should have already been sent. */ | { type: "autoplay-blocked"; } /** Autoplay was done with success. */ | { type: "autoplay"; }; /** Object returned by `initialSeekAndPlay`. */ export interface IInitialSeekAndPlayObject { /** Emit the result of the auto-play operation, once performed. */ autoPlayResult: Promise; /** * Shared reference whose value becomes `true` once the initial play has * been considered / has been done by `performInitialSeekAndPlay`. */ initialPlayPerformed: IReadOnlySharedReference; } /** * Seek as soon as possible at the initially wanted position and play if * autoPlay is wanted. * @param {Object} args * @param {Object} cancelSignal * @returns {Object} */ export default function performInitialSeekAndPlay({ mediaElement, playbackObserver, startTime, mustAutoPlay, isDirectfile, onWarning, }: { mediaElement: HTMLMediaElement; playbackObserver: IMediaElementPlaybackObserver; startTime: number | (() => number); mustAutoPlay: boolean; isDirectfile: boolean; onWarning: (err: IPlayerError) => void; }, cancelSignal: CancellationSignal): IInitialSeekAndPlayObject;