import { StreamRequest, NamedMediaGroup } from '@webex/internal-media-core'; import { ReceiveSlot } from './receiveSlot'; export interface ActiveSpeakerPolicyInfo { policy: 'active-speaker'; priority: number; crossPriorityDuplication: boolean; crossPolicyDuplication: boolean; preferLiveVideo: boolean; namedMediaGroups?: NamedMediaGroup[]; } export interface ReceiverSelectedPolicyInfo { policy: 'receiver-selected'; csi: number; } export type PolicyInfo = ActiveSpeakerPolicyInfo | ReceiverSelectedPolicyInfo; export interface H264CodecInfo { codec: 'h264'; maxFs?: number; maxFps?: number; maxMbps?: number; maxWidth?: number; maxHeight?: number; } export type CodecInfo = H264CodecInfo; export interface MediaRequest { policyInfo: PolicyInfo; receiveSlots: Array; codecInfo?: CodecInfo; preferredMaxFs?: number; handleMaxFs?: ({ maxFs }: { maxFs: number; }) => void; } export type MediaRequestId = string; type DegradationPreferences = { maxMacroblocksLimit: number; }; type SendMediaRequestsCallback = (streamRequests: StreamRequest[]) => void; type Kind = 'audio' | 'video'; type Options = { degradationPreferences: DegradationPreferences; kind: Kind; trimRequestsToNumOfSources: boolean; }; export declare class MediaRequestManager { private sendMediaRequestsCallback; private kind; private counter; private clientRequests; private degradationPreferences; private sourceUpdateListener; private debouncedSourceUpdateListener; private trimRequestsToNumOfSources; private numTotalSources; private numLiveSources; constructor(sendMediaRequestsCallback: SendMediaRequestsCallback, options: Options); setDegradationPreferences(degradationPreferences: DegradationPreferences): void; private getDegradedClientRequests; /** * Returns the maxPayloadBitsPerSecond per Stream * * If MediaRequestManager kind is "audio", a constant bitrate will be returned. * If MediaRequestManager kind is "video", the bitrate will be calculated based * on maxFs (default h264 maxFs as fallback if maxFs is not defined) * * @param {MediaRequest} mediaRequest - mediaRequest to take data from * @returns {number} maxPayloadBitsPerSecond */ private getMaxPayloadBitsPerSecond; /** * Returns the max Macro Blocks per second (maxMbps) per H264 Stream * * The maxMbps will be calculated based on maxFs and maxFps * (default h264 maxFps as fallback if maxFps is not defined) * * @param {MediaRequest} mediaRequest - mediaRequest to take data from * @returns {number} maxMbps */ private getH264MaxMbps; /** Modifies the passed in clientRequests and makes sure that in total they don't ask * for more streams than there are available. * * @param {Object} clientRequests * @returns {void} */ private trimRequests; private getPreferLiveVideo; private cloneClientRequests; private sendRequests; addRequest(mediaRequest: MediaRequest, commit?: boolean): MediaRequestId; cancelRequest(requestId: MediaRequestId, commit?: boolean): void; commit(): void; reset(): void; setNumCurrentSources(numTotalSources: number, numLiveSources: number): void; } export {};