Spaces:
Running
Running
File size: 2,476 Bytes
c5b101c ac7030c c5b101c ac7030c c5b101c ac7030c c5b101c ac7030c c5b101c ac7030c c5b101c ac7030c c5b101c ac7030c c5b101c ac7030c c5b101c ac7030c c5b101c ac7030c c5b101c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
"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<HTMLDivElement>(null)
const viewerContainerRef = useRef<HTMLElement>()
const viewerRef = useRef<Viewer>()
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 (
<div
// will be used later, if we need overlays and stuff
ref={rootContainerRef}
>
<ReactPhotoSphereViewer
container=""
containerClass={className}
width={`${width}px`}
height={`${height}px`}
onReady={(instance) => {
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 },
},
],
}],
]}
/>
</div>
)
}
|