React が再生 UI を所有する場合の構成です。クイックスタート の互換版を使います。
import { useState } from 'react'
import { createFiveProvider, FiveAutoCanvas } from '@realsee/five/react'
import type { Work } from '@realsee/five'
import { VreoProvider, useVreoAction, useVreoPausedState } from '@realsee/vreo/react'
import type { VreoUnit } from '@realsee/vreo/typings'
import '@realsee/vreo/stylesheets/default.css'
const FiveProvider = createFiveProvider()
function Controls({ unit }: { unit: VreoUnit }) {
const { load, play, pause } = useVreoAction()
const paused = useVreoPausedState()
const [status, setStatus] = useState('Ready to load narrative')
async function start() {
setStatus('Loading narrative')
try {
if (!await load(unit, 0) || !play(0)) throw new Error('Narrative unavailable')
setStatus('Playing')
} catch { setStatus('Narrative unavailable. Check the script and media access.') }
}
return <div><button onClick={() => void start()}>Load and replay</button><button onClick={pause} disabled={paused}>Pause</button><p role="status">{status}</p></div>
}
// Keep FiveAutoCanvas outside VreoProvider: that provider mounts children after Player creation.
export function NarrativeScene({ work, unit }: { work: Work; unit: VreoUnit }) {
return <FiveProvider initialWork={work}>
<div style={{ width: '100%', height: 480 }}><FiveAutoCanvas /></div>
<VreoProvider><Controls unit={unit} /></VreoProvider>
</FiveProvider>
}Five を参照するため VreoProvider は FiveProvider の内側に置きます。FiveAutoCanvas は VreoProvider の外に置きます。Vreo は effect で Player を生成後に子を描画するため、キャンバスを内側に置くと設置より先に Player が生成される場合があります。
解析済み Work と検証済み VreoUnit を渡し、シーン準備後に操作を提供します。この例は Provider とフックの接続であり、Work の読み込み UI は実装しません。
最初からの再生を明示する
2.6.4 の useVreoAction().play() は player.play(currentTime || 0) を呼ぶため、時刻なしなら 0 からです。操作は Load and replay と表示し play(0) を明示します。Resume と呼ばないでください。現在時刻から正確に再開する場合は getCurrentTime() がある Player 操作 を使います。
useVreoPausedState() は再生状態に追従します。Provider はアンマウント時に破棄するため、同じシーンに別 Player を並行作成しないでください。
確認する
準備後の読み込み、停止、再生、ルート破棄を試します。実際のクライアント環境とブラウザーの音声ポリシーで検証してください。
