@100mslive/hms-video-store
Version:
@100mslive Core SDK which abstracts the complexities of webRTC while providing a reactive store for data management with a unidirectional data flow
63 lines (62 loc) • 2.81 kB
TypeScript
import { HMSVideoTrack } from './HMSVideoTrack';
import { VideoTrackLayerUpdate } from '../../connection/channel-messages';
import { HMSPreferredSimulcastLayer, HMSSimulcastLayer, HMSSimulcastLayerDefinition } from '../../interfaces/simulcast-layers';
import { HMSRemoteStream } from '../streams';
export declare class HMSRemoteVideoTrack extends HMSVideoTrack {
private _degraded;
private _degradedAt;
private _layerDefinitions;
private history;
private preferredLayer;
private bizTrackId;
private disableNoneLayerRequest;
constructor(stream: HMSRemoteStream, track: MediaStreamTrack, source?: string, disableNoneLayerRequest?: boolean);
setTrackId(trackId: string): void;
get trackId(): string;
get degraded(): boolean;
get degradedAt(): Date | null;
setEnabled(value: boolean): Promise<void>;
setPreferredLayer(layer: HMSPreferredSimulcastLayer): Promise<void>;
/**
* @deprecated
* @returns {HMSSimulcastLayer}
*/
getSimulcastLayer(): HMSSimulcastLayer;
getLayer(): HMSSimulcastLayer;
getPreferredLayer(): HMSPreferredSimulcastLayer;
getPreferredLayerDefinition(): HMSSimulcastLayerDefinition | undefined;
replaceTrack(track: HMSRemoteVideoTrack): void;
addSink(videoElement: HTMLVideoElement, shouldSendVideoLayer?: boolean): Promise<void>;
removeSink(videoElement: HTMLVideoElement, shouldSendVideoLayer?: boolean): Promise<void>;
/**
* Method to get available simulcast definitions for the track
* @returns {HMSSimulcastLayerDefinition[]}
*/
getSimulcastDefinitions(): HMSSimulcastLayerDefinition[];
/** @internal */
setSimulcastDefinitons(definitions: HMSSimulcastLayerDefinition[]): void;
/**
* @internal
* SFU will change track's layer(degrade or restore) and tell the sdk to update
* it locally.
* @returns {boolean} isDegraded - returns true if degraded
* */
setLayerFromServer(layerUpdate: VideoTrackLayerUpdate): boolean;
private getDegradationValue;
private updateLayer;
private pushInHistory;
private requestLayer;
/**
* given the new layer, figure out if the update should be sent to server or not.
* It won't be sent if the track is already on the targetLayer. If the track is
* degraded though and the target layer is none, update will be sent.
* If there are tracks degraded on a page and user paginates away to other page,
* it's necessary to send the layer none message to SFU so it knows that the app
* is no longer interested in the track and doesn't recover degraded tracks on non
* visible pages.
*
* TODO: if track is degraded, send the update if target layer is lower than current layer
* @private
*/
private shouldSendVideoLayer;
}