/** * Copyright (c) Double Symmetry GmbH * Commercial use requires a license. See https://rntp.dev/pricing */ import { Event } from '../events'; import type { RemoteControlConfig } from '../interfaces/PlayerConfig'; import { type ResolvedMediaItem } from './engines/AudioEngine'; export interface MediaSessionActions { play(): void; pause(): void; stop(): void; next(): void; previous(): void; seekTo(position: number): void; seekBy(offset: number): void; emit(event: Event, payload: unknown): void; } type SessionLike = Pick & Partial> & { metadata: unknown; playbackState: string; }; /** * Bridges setCommands/metadata onto the browser MediaSession API: media keys, * lock-screen and notification controls, now-playing widgets. Feature-detected; * a silent no-op where the API is missing. */ export declare class MediaSessionController { private actions; private session; private lastCommands; private lastItem; constructor(actions: MediaSessionActions, session?: SessionLike | null); setCommands(config: RemoteControlConfig): void; updateMetadata(item: ResolvedMediaItem | null): void; updatePlaybackState(state: 'none' | 'paused' | 'playing'): void; updatePositionState(p: { duration: number; position: number; playbackRate: number; }): void; /** * iOS Safari only respects handlers/metadata set after audio has actually * started — re-apply the latest config on the first 'playing' of a session. */ reassert(): void; destroy(): void; private setHandler; } export {}; //# sourceMappingURL=MediaSessionController.d.ts.map