import type { EmptyObject } from '../../../../framework-types/BaseTypes'; import type { ContextHaving } from '../../../../framework-types/execution-context/Types'; import type { PartialRequired } from '../../../Types'; import type { Constants, MediaType, SubtitleFormatType } from '../../core/Constants'; import type { ArrayAtom } from '../../core/state/ArrayStateAtom'; import type { CodecMapAtom } from '../../core/state/codec-map/CodecMapAtom'; import type { PrimitiveAtom } from '../../core/state/PrimitiveAtom'; import type { StateAtom } from '../../core/state/Types'; import type { CoreStateAtoms } from '../../core/Types'; import { CoreExportNames } from '../../core/Types'; import type { Transient } from '../../core/utils/StateUtils'; import type { CoreUtils } from '../../core/utils/Types'; import type { ContextWithState } from '../../Types'; import type { DataOrSelfInitSegmentAtom } from '../segment/SegmentAtom'; import type { SelectionGroupAtom } from '../selection-group/SelectionGroupAtom'; import type { StreamDataStructureContext } from '../Types'; import type { TypeDetection } from './TypeDetection'; type ExtendedContext = ContextHaving<{ [CoreExportNames.Utils]: CoreUtils; [CoreExportNames.Constants]: Constants; [CoreExportNames.CoreStateAtoms]: CoreStateAtoms; }, EmptyObject, ContextWithState>; export interface TimeRange { start: number; end: number; } type BaseTrack = { id: string; type: MediaType; timeRange: TimeRange; segments: ArrayAtom; sequenceNumber: number; selectionGroup: SelectionGroupAtom; }; type MediaTrack = BaseTrack & { bitrate: number; codecs: CodecMapAtom; }; type LanguageTrack = BaseTrack & { language: string; label?: string; }; type VideoTrack = MediaTrack & { uri: string; resolution: { width: number; height: number; }; mediaType: MediaType.Video; }; type AudioTrack = MediaTrack & LanguageTrack & { uri?: string; type: MediaType.Audio; }; type MuxedTrack = Omit & Omit & { type: MediaType.Muxed; }; type SubtitleTrack = LanguageTrack & { type: MediaType.Subtitle; uri?: string; formatType: PrimitiveAtom; external: boolean; fragmented: boolean; }; type UnknownTrack = BaseTrack & { type: MediaType.Unknown; uri?: string; typeDetected: Transient; }; type Track = AudioTrack | VideoTrack | MuxedTrack | SubtitleTrack | UnknownTrack; export type AudioTrackAtom = StateAtom>; export type VideoTrackAtom = StateAtom>; export type MuxedTrackAtom = StateAtom>; export type MediaTrackAtom = AudioTrackAtom | VideoTrackAtom | MuxedTrackAtom; export type SubtitleTrackAtom = StateAtom>; export type UnknownTrackAtom = StateAtom>; export type TrackAtom = AudioTrackAtom | VideoTrackAtom | MuxedTrackAtom | SubtitleTrackAtom | UnknownTrackAtom; declare function getBaseModifiers(context: StreamDataStructureContext): { setSegments: (track: Track, segments: ArrayAtom) => boolean; setSequenceNumber: (track: Track, sequenceNumber: number) => boolean; setSelectionGroup: (track: VideoTrack | AudioTrack | MuxedTrack | UnknownTrack | SubtitleTrack, selectionGroup: SelectionGroupAtom) => boolean; }; declare function getMediaTrackModifiers(context: StreamDataStructureContext): { setBitrate: (track: MediaTrack, bitrate: number) => boolean; setSegments: (track: Track, segments: ArrayAtom) => boolean; setSequenceNumber: (track: Track, sequenceNumber: number) => boolean; setSelectionGroup: (track: AudioTrack | VideoTrack | MuxedTrack | SubtitleTrack | UnknownTrack, selectionGroup: SelectionGroupAtom) => boolean; }; declare function getAudioTrackModifiers(context: StreamDataStructureContext): { setLanguage: (track: LanguageTrack, language: string) => boolean; setLabel: (track: LanguageTrack, label: string) => boolean; setBitrate: (track: MediaTrack, bitrate: number) => boolean; setSegments: (track: Track, segments: ArrayAtom) => boolean; setSequenceNumber: (track: Track, sequenceNumber: number) => boolean; setSelectionGroup: (track: AudioTrack | VideoTrack | MuxedTrack | SubtitleTrack | UnknownTrack, selectionGroup: SelectionGroupAtom) => boolean; }; type RequiredBaseTrackKeys = 'id'; export declare const createAudioTrackAtom: (context: StreamDataStructureContext, initialValue: PartialRequired, RequiredBaseTrackKeys | 'language' | 'bitrate' | 'codecs' | 'uri'>) => AudioTrackAtom; export declare const createVideoTrackAtom: (context: StreamDataStructureContext, initialValue: PartialRequired, RequiredBaseTrackKeys | 'resolution' | 'bitrate' | 'codecs' | 'uri'>) => VideoTrackAtom; export declare const createMuxedTrackAtom: (context: StreamDataStructureContext, initialValue: PartialRequired, RequiredBaseTrackKeys | 'language' | 'resolution' | 'bitrate' | 'codecs' | 'uri'>) => MuxedTrackAtom; export declare const createSubtitleTrackAtom: (context: StreamDataStructureContext, initialValue: PartialRequired, RequiredBaseTrackKeys | 'language'>) => SubtitleTrackAtom; export declare const createUnknownTrackAtom: (context: ExtendedContext, initialValue: PartialRequired, RequiredBaseTrackKeys>) => UnknownTrackAtom; export {};