/** * Returns the current **seekable range** of the media in milliseconds. * * This hook provides a reactive way to observe changes in the player's seekable * range — i.e., the portion of the content that can be navigated to via seeking. * * ### Behavior * - **LIVE:** Returns an object representing the seekable time window relative to the **epoch**, * e.g. `{ startTime, endTime }`, where both values are in milliseconds since the epoch. * This range moves forward over time as the live broadcast continues. * - **VOD:** Returns a static range of `[0, duration]`, representing the full content length. * * ### Notes * - The seekable range is useful for implementing scrubbers or timelines that work * across both VOD and LIVE playback modes. * - For **LIVE** streams with DVR functionality, `startTime` corresponds to the oldest * available segment in the buffer, while `endTime` indicates the current live edge. * - May return `null` if the range is not yet available or the source does not support seeking. * * ⚠️ Must be used within a {@link PlayerProvider} or * [AVPlayerViewControllerProvider](../../ios-avplayerviewcontroller-plugin-api/variables/AVPlayerViewControllerProvider.md) component. * * @returns `{{ startTime: number, endTime: number } | null}` Seekable range in milliseconds, or `null` if unknown or not applicable. * * @example * ```tsx * import React from 'react'; * import { View, Text } from 'react-native'; * import { useSeekableRange, useLive } from '@castlabs/react-native-prestoplay'; * * export default function SeekableInfo() { * const isLive = useLive(); * const range = useSeekableRange(); * * if (!range) return Seekable range not available; * * return ( * * {isLive ? ( * <> * Start: {new Date(range.startTime).toLocaleTimeString()} * End: {new Date(range.endTime).toLocaleTimeString()} * * ) : ( * VOD range: 0 → {range.endTime} ms * )} * * ); * } * ``` * * @group Hooks */ export default function useSeekableRange(): { startTime: number; endTime: number; } | null;