@photo-sphere-viewer/equirectangular-video-adapter
Version:
Photo Sphere Viewer adapter to display equirectangular videos.
77 lines (72 loc) • 3.27 kB
TypeScript
import { AbstractAdapter, Viewer, TextureData, PanoData, AdapterConstructor, PanoramaPosition, Position } from '@photo-sphere-viewer/core';
import { Mesh, BufferGeometry, Material, VideoTexture, SphereGeometry, MeshBasicMaterial } from 'three';
type AbstractVideoPanorama = {
source: string | MediaStream | HTMLVideoElement;
};
type AbstractVideoAdapterConfig = {
/**
* automatically start the video
* @default false
*/
autoplay?: boolean;
/**
* initially mute the video
* @default false
*/
muted?: boolean;
};
type AbstractVideoMesh = Mesh<BufferGeometry, Material>;
type AbstractVideoTextureData = TextureData<VideoTexture>;
/**
* Base video adapters class
*/
declare abstract class AbstractVideoAdapter<TPanorama extends AbstractVideoPanorama, TData, TMesh extends AbstractVideoMesh> extends AbstractAdapter<TPanorama, TData, VideoTexture, TMesh> {
static readonly supportsDownload = false;
protected abstract readonly config: AbstractVideoAdapterConfig;
private video;
constructor(viewer: Viewer);
init(): void;
destroy(): void;
supportsPreload(): boolean;
supportsTransition(): boolean;
loadTexture(panorama: AbstractVideoPanorama): Promise<AbstractVideoTextureData>;
protected switchVideo(texture: VideoTexture): void;
setTextureOpacity(mesh: TMesh, opacity: number): void;
disposeTexture({ texture }: AbstractVideoTextureData): void;
disposeMesh(mesh: AbstractVideoMesh): void;
private __removeVideo;
private __videoLoadPromise;
}
/**
* Configuration of an equirectangular video
*/
type EquirectangularVideoPanorama = AbstractVideoPanorama & {
data?: PanoData | ((image: HTMLVideoElement) => PanoData);
};
type EquirectangularVideoAdapterConfig = AbstractVideoAdapterConfig & {
/**
* number of faces of the sphere geometry, higher values may decrease performances
* @default 64
*/
resolution?: number;
};
type EquirectangularVideoMesh = Mesh<SphereGeometry, MeshBasicMaterial>;
type EquirectangularVideoTextureData = TextureData<VideoTexture, EquirectangularVideoPanorama, PanoData>;
/**
* Adapter for equirectangular videos
*/
declare class EquirectangularVideoAdapter extends AbstractVideoAdapter<EquirectangularVideoPanorama, PanoData, EquirectangularVideoMesh> {
static readonly id = "equirectangular-video";
static readonly VERSION: string;
protected readonly config: EquirectangularVideoAdapterConfig;
private adapter;
static withConfig(config: EquirectangularVideoAdapterConfig): [AdapterConstructor, any];
constructor(viewer: Viewer, config: EquirectangularVideoAdapterConfig);
destroy(): void;
textureCoordsToSphericalCoords(point: PanoramaPosition, data: PanoData): Position;
sphericalCoordsToTextureCoords(position: Position, data: PanoData): PanoramaPosition;
loadTexture(panorama: EquirectangularVideoPanorama, _?: boolean, newPanoData?: any): Promise<EquirectangularVideoTextureData>;
createMesh(panoData: PanoData): EquirectangularVideoMesh;
setTexture(mesh: EquirectangularVideoMesh, { texture }: EquirectangularVideoTextureData): void;
}
export { EquirectangularVideoAdapter, type EquirectangularVideoAdapterConfig, type EquirectangularVideoPanorama };