"use client" import { useEffect, useRef } from "react" import { ReactPhotoSphereViewer } from "react-photo-sphere-viewer" import { Viewer } from "@photo-sphere-viewer/core" import { EquirectangularVideoAdapter } from "@photo-sphere-viewer/equirectangular-video-adapter" import { SettingsPlugin } from "@photo-sphere-viewer/settings-plugin" import { ResolutionPlugin } from "@photo-sphere-viewer/resolution-plugin" import { VideoPlugin } from "@photo-sphere-viewer/video-plugin" import "@photo-sphere-viewer/settings-plugin/index.css" import "@photo-sphere-viewer/video-plugin/index.css" import { MediaInfo } from "@/types/general" export function EquirectangularVideoPlayer({ media, className = "", width, height, muted = false, }: { media: MediaInfo className?: string width: number height: number muted?: boolean }) { const rootContainerRef = useRef(null) const viewerContainerRef = useRef() const viewerRef = useRef() useEffect(() => { if (!viewerRef.current) { return } viewerRef.current.setOptions({ size: { width: `${width}px`, height: `${height}px` } }) }, [width, height]) const assetUrl = media.assetUrlHd || media.assetUrl if (!assetUrl) { return null } return (
{ viewerRef.current = instance viewerContainerRef.current = instance.container }} // to access a plugin we must use viewer.getPlugin() // plugins={[[LensflarePlugin, { lensflares: [] }]]} adapter={[EquirectangularVideoAdapter, { muted }]} navbar="video" src="" plugins={[ [SettingsPlugin, {}], [VideoPlugin, { muted, // progressbar: true, bigbutton: false }], [ResolutionPlugin, { defaultResolution: 'HD', resolutions: [ { id: 'HD', label: 'Standard', // TODO: separate the resolutions panorama: { source: media.assetUrlHd || media.assetUrl }, }, ], }], ]} />
) }