import type shaka from "shaka-player/dist/shaka-player.compiled.d.ts"; import { CoreConfig, CoreEventMap, DynamicCoreConfig, DefinedCoreConfig } from "p2p-media-loader-core"; /** Type for specifying dynamic configuration options that can be changed at runtime for the P2P engine's core. */ export type DynamicShakaP2PEngineConfig = { /** Dynamic core config */ core?: DynamicCoreConfig; }; /** Represents the complete configuration for ShakaP2PEngine. */ export type ShakaP2PEngineConfig = { /** Complete core configuration settings. */ core: DefinedCoreConfig; }; /** Allows for partial configuration settings for the Shaka P2P Engine. */ export type PartialShakaEngineConfig = Partial> & { /** Partial core config */ core?: Partial; }; /** * Represents a P2P (peer-to-peer) engine for HLS (HTTP Live Streaming) to enhance media streaming efficiency. * This class integrates P2P technologies into Shaka Player, enabling the distribution of media segments via a peer network * alongside traditional HTTP fetching. It reduces server bandwidth costs and improves scalability by sharing the load * across multiple clients. * * The engine manages core functionalities such as segment fetching, segment management, peer connection management, * and event handling related to the P2P and HLS processes. * * @example * // Initializing the ShakaP2PEngine with custom configuration * const shakaP2PEngine = new ShakaP2PEngine({ * core: { * highDemandTimeWindow: 30, // 30 seconds * simultaneousHttpDownloads: 3, * webRtcMaxMessageSize: 64 * 1024, // 64 KB * p2pNotReceivingBytesTimeoutMs: 10000, // 10 seconds * p2pInactiveLoaderDestroyTimeoutMs: 15000, // 15 seconds * httpNotReceivingBytesTimeoutMs: 8000, // 8 seconds * httpErrorRetries: 2, * p2pErrorRetries: 2, * announceTrackers: ["wss://personal.tracker.com"], * rtcConfig: { * iceServers: [{ urls: "stun:personal.stun.com" }] * }, * swarmId: "example-swarm-id" * } * }); */ export declare class ShakaP2PEngine { private player?; private readonly shaka; private readonly streamInfo; private readonly core; private readonly segmentManager; private requestFilter?; /** * Constructs an instance of ShakaP2PEngine. * * @param config Optional configuration for customizing the P2P engine's behavior. * @param shaka The Shaka Player library instance. */ constructor(config?: PartialShakaEngineConfig, shaka?: typeof import("shaka-player").default); /** * Configures and initializes the Shaka Player instance with predefined settings for optimal P2P performance. * * @param player The Shaka Player instance to configure. */ bindShakaPlayer(player: shaka.Player): void; /** * Applies dynamic configuration updates to the P2P engine. * * @param dynamicConfig Configuration changes to apply. * * @example * // Assuming `shakaP2PEngine` is an instance of ShakaP2PEngine * * const newDynamicConfig = { * core: { * // Increase the number of cached segments to 1000 * cachedSegmentsCount: 1000, * // 50 minutes of segments will be downloaded further through HTTP connections if P2P fails * httpDownloadTimeWindow: 3000, * // 100 minutes of segments will be downloaded further through P2P connections * p2pDownloadTimeWindow: 6000, * }; * * shakaP2PEngine.applyDynamicConfig(newDynamicConfig); */ applyDynamicConfig(dynamicConfig: DynamicShakaP2PEngineConfig): void; /** * Retrieves the current configuration of the ShakaP2PEngine. * * @returns The configuration as a readonly object. */ getConfig(): ShakaP2PEngineConfig; /** * Adds an event listener for the specified event. * @param eventName The name of the event to listen for. * @param listener The callback function to be invoked when the event is triggered. * * @example * // Listening for a segment being successfully loaded * shakaP2PEngine.addEventListener('onSegmentLoaded', (details) => { * console.log('Segment Loaded:', details); * }); * * @example * // Handling segment load errors * shakaP2PEngine.addEventListener('onSegmentError', (errorDetails) => { * console.error('Error loading segment:', errorDetails); * }); * * @example * // Tracking data downloaded from peers * shakaP2PEngine.addEventListener('onChunkDownloaded', (bytesLength, downloadSource, peerId) => { * console.log(`Downloaded ${bytesLength} bytes from ${downloadSource} ${peerId ? 'from peer ' + peerId : 'from server'}`); * }); */ addEventListener(eventName: K, listener: CoreEventMap[K]): void; /** * Removes an event listener for the specified event. * @param eventName The name of the event. * @param listener The callback function that was previously added. */ removeEventListener(eventName: K, listener: CoreEventMap[K]): void; private updatePlayerEventHandlers; private onVariantChanged; private handlePlayerLoaded; private handlePlayerUnloading; private destroyCurrentStreamContext; private updateMediaElementEventHandlers; private handlePlaybackUpdate; /** Clean up and release all resources. Unregister all event handlers. */ destroy(): void; private static registerManifestParsers; private static unregisterManifestParsers; private static registerNetworkingEngineSchemes; private static unregisterNetworkingEngineSchemes; /** * Registers plugins related to P2P functionality into the Shaka Player. * Plugins must be registered before initializing the player to ensure proper integration. * * @param shaka - The Shaka Player library. Defaults to the global Shaka Player instance if not provided. */ static registerPlugins(shaka?: typeof import("shaka-player").default): void; /** * Unregister plugins related to P2P functionality from the Shaka Player. * * @param shaka - The Shaka Player library. Defaults to the global Shaka Player instance if not provided. */ static unregisterPlugins(shaka?: typeof import("shaka-player").default): void; }