@xrift/world-components 0.17.1 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/components/LiveVideoPlayer/ControlPanel.d.ts +3 -0
  2. package/dist/components/LiveVideoPlayer/ControlPanel.d.ts.map +1 -0
  3. package/dist/components/LiveVideoPlayer/ControlPanel.js +15 -0
  4. package/dist/components/LiveVideoPlayer/ControlPanel.js.map +1 -0
  5. package/dist/components/LiveVideoPlayer/LiveIndicator.d.ts +3 -0
  6. package/dist/components/LiveVideoPlayer/LiveIndicator.d.ts.map +1 -0
  7. package/dist/components/LiveVideoPlayer/LiveIndicator.js +10 -0
  8. package/dist/components/LiveVideoPlayer/LiveIndicator.js.map +1 -0
  9. package/dist/components/LiveVideoPlayer/PlayPauseButton.d.ts +3 -0
  10. package/dist/components/LiveVideoPlayer/PlayPauseButton.d.ts.map +1 -0
  11. package/dist/components/LiveVideoPlayer/PlayPauseButton.js +9 -0
  12. package/dist/components/LiveVideoPlayer/PlayPauseButton.js.map +1 -0
  13. package/dist/components/LiveVideoPlayer/VolumeControl.d.ts +3 -0
  14. package/dist/components/LiveVideoPlayer/VolumeControl.d.ts.map +1 -0
  15. package/dist/components/LiveVideoPlayer/VolumeControl.js +26 -0
  16. package/dist/components/LiveVideoPlayer/VolumeControl.js.map +1 -0
  17. package/dist/components/LiveVideoPlayer/index.d.ts +4 -0
  18. package/dist/components/LiveVideoPlayer/index.d.ts.map +1 -0
  19. package/dist/components/LiveVideoPlayer/index.js +92 -0
  20. package/dist/components/LiveVideoPlayer/index.js.map +1 -0
  21. package/dist/components/LiveVideoPlayer/types.d.ts +53 -0
  22. package/dist/components/LiveVideoPlayer/types.d.ts.map +1 -0
  23. package/dist/components/LiveVideoPlayer/types.js +2 -0
  24. package/dist/components/LiveVideoPlayer/types.js.map +1 -0
  25. package/dist/index.d.ts +1 -0
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +1 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/scenes/TestScene.d.ts.map +1 -1
  30. package/dist/scenes/TestScene.js +2 -1
  31. package/dist/scenes/TestScene.js.map +1 -1
  32. package/package.json +7 -1
@@ -0,0 +1,3 @@
1
+ import type { LiveControlPanelProps } from './types';
2
+ export declare const ControlPanel: import("react").MemoExoticComponent<({ id, width, screenHeight, playing, volume, isBuffering, onPlayPause, onVolumeChange, }: LiveControlPanelProps) => import("react/jsx-runtime").JSX.Element>;
3
+ //# sourceMappingURL=ControlPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ControlPanel.d.ts","sourceRoot":"","sources":["../../../src/components/LiveVideoPlayer/ControlPanel.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAKpD,eAAO,MAAM,YAAY,gIAUpB,qBAAqB,6CAgDzB,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { memo } from 'react';
3
+ import { Text } from '@react-three/drei';
4
+ import { PlayPauseButton } from './PlayPauseButton';
5
+ import { VolumeControl } from './VolumeControl';
6
+ import { LiveIndicator } from './LiveIndicator';
7
+ const PANEL_HEIGHT = 0.15;
8
+ const BUTTON_SIZE_RATIO = 0.6;
9
+ export const ControlPanel = memo(({ id, width, screenHeight, playing, volume, isBuffering, onPlayPause, onVolumeChange, }) => {
10
+ const panelY = -screenHeight / 2 - PANEL_HEIGHT / 2;
11
+ const buttonSize = PANEL_HEIGHT * BUTTON_SIZE_RATIO;
12
+ return (_jsxs("group", { position: [0, panelY, 0], children: [_jsxs("mesh", { position: [0, 0, 0], children: [_jsx("planeGeometry", { args: [width, PANEL_HEIGHT] }), _jsx("meshBasicMaterial", { color: "#1a1a2a", transparent: true, opacity: 0.9 })] }), _jsx(PlayPauseButton, { id: `${id}-play-pause`, position: [-width * 0.4, 0, 0.01], size: buttonSize, playing: playing, onInteract: onPlayPause }), _jsx(LiveIndicator, { position: [0, 0, 0.01], size: buttonSize }), isBuffering && (_jsx(Text, { position: [0, -0.04, 0.01], fontSize: 0.02, color: "#aaaaaa", anchorX: "center", anchorY: "middle", children: "\u8AAD\u307F\u8FBC\u307F\u4E2D..." })), _jsx(VolumeControl, { id: `${id}-volume`, position: [width * 0.4, 0, 0.01], size: buttonSize, volume: volume, onVolumeChange: onVolumeChange })] }));
13
+ });
14
+ ControlPanel.displayName = 'ControlPanel';
15
+ //# sourceMappingURL=ControlPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ControlPanel.js","sourceRoot":"","sources":["../../../src/components/LiveVideoPlayer/ControlPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAG/C,MAAM,YAAY,GAAG,IAAI,CAAA;AACzB,MAAM,iBAAiB,GAAG,GAAG,CAAA;AAE7B,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAC9B,CAAC,EACC,EAAE,EACF,KAAK,EACL,YAAY,EACZ,OAAO,EACP,MAAM,EACN,WAAW,EACX,WAAW,EACX,cAAc,GACQ,EAAE,EAAE;IAC1B,MAAM,MAAM,GAAG,CAAC,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,CAAA;IACnD,MAAM,UAAU,GAAG,YAAY,GAAG,iBAAiB,CAAA;IAEnD,OAAO,CACL,iBAAO,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,aAE7B,gBAAM,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,aACvB,wBAAe,IAAI,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,GAAI,EAC9C,4BAAmB,KAAK,EAAC,SAAS,EAAC,WAAW,QAAC,OAAO,EAAE,GAAG,GAAI,IAC1D,EAGP,KAAC,eAAe,IACd,EAAE,EAAE,GAAG,EAAE,aAAa,EACtB,QAAQ,EAAE,CAAC,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,EACjC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,WAAW,GACvB,EAGF,KAAC,aAAa,IAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,GAAI,EAG1D,WAAW,IAAI,CACd,KAAC,IAAI,IACH,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAC1B,QAAQ,EAAE,IAAI,EACd,KAAK,EAAC,SAAS,EACf,OAAO,EAAC,QAAQ,EAChB,OAAO,EAAC,QAAQ,kDAGX,CACR,EAGD,KAAC,aAAa,IACZ,EAAE,EAAE,GAAG,EAAE,SAAS,EAClB,QAAQ,EAAE,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,EAChC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,GAC9B,IACI,CACT,CAAA;AACH,CAAC,CACF,CAAA;AAED,YAAY,CAAC,WAAW,GAAG,cAAc,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { LiveIndicatorProps } from './types';
2
+ export declare const LiveIndicator: import("react").MemoExoticComponent<({ position, size }: LiveIndicatorProps) => import("react/jsx-runtime").JSX.Element>;
3
+ //# sourceMappingURL=LiveIndicator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveIndicator.d.ts","sourceRoot":"","sources":["../../../src/components/LiveVideoPlayer/LiveIndicator.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAEjD,eAAO,MAAM,aAAa,2DAA6B,kBAAkB,6CAyBvE,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { memo } from 'react';
3
+ import { Text } from '@react-three/drei';
4
+ export const LiveIndicator = memo(({ position, size }) => {
5
+ const dotSize = size * 0.15;
6
+ const fontSize = size * 0.4;
7
+ return (_jsxs("group", { position: position, children: [_jsxs("mesh", { position: [-size * 0.4, 0, 0], children: [_jsx("circleGeometry", { args: [dotSize, 16] }), _jsx("meshBasicMaterial", { color: "#ff0000" })] }), _jsx(Text, { position: [size * 0.1, 0, 0], fontSize: fontSize, color: "#ffffff", anchorX: "center", anchorY: "middle", fontWeight: "bold", children: "LIVE" })] }));
8
+ });
9
+ LiveIndicator.displayName = 'LiveIndicator';
10
+ //# sourceMappingURL=LiveIndicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveIndicator.js","sourceRoot":"","sources":["../../../src/components/LiveVideoPlayer/LiveIndicator.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAGxC,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAsB,EAAE,EAAE;IAC3E,MAAM,OAAO,GAAG,IAAI,GAAG,IAAI,CAAA;IAC3B,MAAM,QAAQ,GAAG,IAAI,GAAG,GAAG,CAAA;IAE3B,OAAO,CACL,iBAAO,QAAQ,EAAE,QAAQ,aAEvB,gBAAM,QAAQ,EAAE,CAAC,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,aACjC,yBAAgB,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,GAAI,EACvC,4BAAmB,KAAK,EAAC,SAAS,GAAG,IAChC,EAGP,KAAC,IAAI,IACH,QAAQ,EAAE,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAC5B,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAC,SAAS,EACf,OAAO,EAAC,QAAQ,EAChB,OAAO,EAAC,QAAQ,EAChB,UAAU,EAAC,MAAM,qBAGZ,IACD,CACT,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,aAAa,CAAC,WAAW,GAAG,eAAe,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { PlayPauseButtonProps } from './types';
2
+ export declare const PlayPauseButton: import("react").MemoExoticComponent<({ id, position, size, playing, onInteract }: PlayPauseButtonProps) => import("react/jsx-runtime").JSX.Element>;
3
+ //# sourceMappingURL=PlayPauseButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlayPauseButton.d.ts","sourceRoot":"","sources":["../../../src/components/LiveVideoPlayer/PlayPauseButton.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAEnD,eAAO,MAAM,eAAe,oFACoB,oBAAoB,6CAyBnE,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { memo } from 'react';
3
+ import { Text } from '@react-three/drei';
4
+ import { Interactable } from '../Interactable';
5
+ export const PlayPauseButton = memo(({ id, position, size, playing, onInteract }) => {
6
+ return (_jsxs("group", { position: position, children: [_jsx(Interactable, { id: id, onInteract: onInteract, interactionText: playing ? '一時停止' : '再生', children: _jsxs("mesh", { children: [_jsx("circleGeometry", { args: [size / 2, 32] }), _jsx("meshBasicMaterial", { color: "#444444" })] }) }), _jsx(Text, { position: [0, 0, 0.01], fontSize: size * 0.4, color: "#ffffff", anchorX: "center", anchorY: "middle", children: playing ? '||' : '▶' })] }));
7
+ });
8
+ PlayPauseButton.displayName = 'PlayPauseButton';
9
+ //# sourceMappingURL=PlayPauseButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlayPauseButton.js","sourceRoot":"","sources":["../../../src/components/LiveVideoPlayer/PlayPauseButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAG9C,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CACjC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAwB,EAAE,EAAE;IACpE,OAAO,CACL,iBAAO,QAAQ,EAAE,QAAQ,aACvB,KAAC,YAAY,IACX,EAAE,EAAE,EAAE,EACN,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,YAExC,2BACE,yBAAgB,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,GAAI,EACxC,4BAAmB,KAAK,EAAC,SAAS,GAAG,IAChC,GACM,EACf,KAAC,IAAI,IACH,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EACtB,QAAQ,EAAE,IAAI,GAAG,GAAG,EACpB,KAAK,EAAC,SAAS,EACf,OAAO,EAAC,QAAQ,EAChB,OAAO,EAAC,QAAQ,YAEf,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAChB,IACD,CACT,CAAA;AACH,CAAC,CACF,CAAA;AAED,eAAe,CAAC,WAAW,GAAG,iBAAiB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { VolumeControlProps } from './types';
2
+ export declare const VolumeControl: import("react").MemoExoticComponent<({ id, position, size, volume, onVolumeChange }: VolumeControlProps) => import("react/jsx-runtime").JSX.Element>;
3
+ //# sourceMappingURL=VolumeControl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VolumeControl.d.ts","sourceRoot":"","sources":["../../../src/components/LiveVideoPlayer/VolumeControl.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAIjD,eAAO,MAAM,aAAa,uFACyB,kBAAkB,6CAiEpE,CAAA"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { memo, useMemo } from 'react';
3
+ import { Text } from '@react-three/drei';
4
+ import { Interactable } from '../Interactable';
5
+ import { calculateSegments, calculateProgressBar, getVolumeIcon, } from '../RichVideoPlayer/utils';
6
+ const SEGMENTS = 11;
7
+ export const VolumeControl = memo(({ id, position, size, volume, onVolumeChange }) => {
8
+ const barWidth = size * 3;
9
+ const barHeight = size * 0.2;
10
+ const segmentWidth = barWidth / SEGMENTS;
11
+ const { width: volumeWidth, offset: volumeOffset } = calculateProgressBar(volume, barWidth);
12
+ const segments = useMemo(() => {
13
+ return calculateSegments({
14
+ segments: SEGMENTS,
15
+ width: barWidth,
16
+ maxValue: 1,
17
+ formatLabel: (value) => {
18
+ const percent = Math.round(value * 100);
19
+ return percent === 0 ? 'ミュート' : `音量: ${percent}%`;
20
+ },
21
+ });
22
+ }, [barWidth]);
23
+ return (_jsxs("group", { position: position, children: [_jsx(Text, { position: [-barWidth / 2 - size * 0.4, 0, 0.01], fontSize: size * 0.4, color: "#ffffff", anchorX: "center", anchorY: "middle", children: getVolumeIcon(volume) }), _jsxs("mesh", { position: [0, 0, 0], children: [_jsx("planeGeometry", { args: [barWidth, barHeight] }), _jsx("meshBasicMaterial", { color: "#333333" })] }), volumeWidth > 0 && (_jsxs("mesh", { position: [volumeOffset, 0, 0.001], children: [_jsx("planeGeometry", { args: [volumeWidth, barHeight] }), _jsx("meshBasicMaterial", { color: "#4aff4a" })] })), segments.map((segment) => (_jsx(Interactable, { id: `${id}-seg-${segment.index}`, onInteract: () => onVolumeChange(segment.value), interactionText: segment.label, children: _jsxs("mesh", { position: [segment.xPos, 0, 0.002], children: [_jsx("planeGeometry", { args: [segmentWidth * 0.98, barHeight * 2] }), _jsx("meshBasicMaterial", { transparent: true, opacity: 0, depthWrite: false })] }) }, segment.index)))] }));
24
+ });
25
+ VolumeControl.displayName = 'VolumeControl';
26
+ //# sourceMappingURL=VolumeControl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VolumeControl.js","sourceRoot":"","sources":["../../../src/components/LiveVideoPlayer/VolumeControl.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { LiveVideoPlayerProps } from './types';
2
+ export type { LiveVideoPlayerProps } from './types';
3
+ export declare const LiveVideoPlayer: import("react").MemoExoticComponent<({ id, position, rotation, width, url, ...props }: LiveVideoPlayerProps) => import("react/jsx-runtime").JSX.Element>;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/LiveVideoPlayer/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAEnD,YAAY,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AA+HnD,eAAO,MAAM,eAAe,yFAQvB,oBAAoB,6CAoCxB,CAAA"}
@@ -0,0 +1,92 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { memo, Suspense, useState, useCallback, useEffect, useRef } from 'react';
3
+ import { useVideoTexture } from '@react-three/drei';
4
+ import { ControlPanel } from './ControlPanel';
5
+ const DEFAULT_POSITION = [0, 2, -5];
6
+ const DEFAULT_ROTATION = [0, 0, 0];
7
+ const DEFAULT_WIDTH = 4;
8
+ const LiveVideoPlayerInner = memo(({ id, position = DEFAULT_POSITION, rotation = DEFAULT_ROTATION, width = DEFAULT_WIDTH, url = '', playing: initialPlaying = true, volume: initialVolume = 1, onError, }) => {
9
+ const [playing, setPlaying] = useState(initialPlaying);
10
+ const [volume, setVolume] = useState(initialVolume);
11
+ const [isBuffering, setIsBuffering] = useState(false);
12
+ const screenHeight = width * (9 / 16);
13
+ const texture = useVideoTexture(url, {
14
+ muted: false,
15
+ loop: false,
16
+ start: playing,
17
+ });
18
+ const videoRef = useRef(texture.image);
19
+ useEffect(() => {
20
+ videoRef.current = texture.image;
21
+ }, [texture]);
22
+ useEffect(() => {
23
+ const video = videoRef.current;
24
+ if (!video)
25
+ return;
26
+ if (playing) {
27
+ video.play().catch((err) => {
28
+ console.error('Live video play error:', err);
29
+ onError?.(err);
30
+ });
31
+ }
32
+ else {
33
+ video.pause();
34
+ }
35
+ }, [playing, onError]);
36
+ useEffect(() => {
37
+ const video = videoRef.current;
38
+ if (!video)
39
+ return;
40
+ video.volume = Math.max(0, Math.min(1, volume));
41
+ }, [volume]);
42
+ useEffect(() => {
43
+ const video = videoRef.current;
44
+ if (!video)
45
+ return;
46
+ const handleWaiting = () => setIsBuffering(true);
47
+ const handlePlaying = () => setIsBuffering(false);
48
+ const handleCanPlay = () => setIsBuffering(false);
49
+ const handleError = (e) => {
50
+ const error = e.target.error;
51
+ if (error) {
52
+ console.error('Live video error:', error.message);
53
+ onError?.(new Error(error.message));
54
+ }
55
+ };
56
+ video.addEventListener('waiting', handleWaiting);
57
+ video.addEventListener('playing', handlePlaying);
58
+ video.addEventListener('canplay', handleCanPlay);
59
+ video.addEventListener('error', handleError);
60
+ return () => {
61
+ video.removeEventListener('waiting', handleWaiting);
62
+ video.removeEventListener('playing', handlePlaying);
63
+ video.removeEventListener('canplay', handleCanPlay);
64
+ video.removeEventListener('error', handleError);
65
+ };
66
+ }, [texture, onError]);
67
+ useEffect(() => {
68
+ const video = texture.image;
69
+ return () => {
70
+ video.pause();
71
+ video.src = '';
72
+ video.load();
73
+ };
74
+ }, [texture]);
75
+ const handlePlayPause = useCallback(() => {
76
+ setPlaying((prev) => !prev);
77
+ }, []);
78
+ const handleVolumeChange = useCallback((newVolume) => {
79
+ setVolume(newVolume);
80
+ }, []);
81
+ return (_jsxs("group", { position: position, rotation: rotation, children: [_jsxs("mesh", { children: [_jsx("planeGeometry", { args: [width, screenHeight] }), _jsx("meshBasicMaterial", { map: texture, toneMapped: false })] }), _jsx(ControlPanel, { id: id, width: width, screenHeight: screenHeight, playing: playing, volume: volume, isBuffering: isBuffering, onPlayPause: handlePlayPause, onVolumeChange: handleVolumeChange })] }));
82
+ });
83
+ LiveVideoPlayerInner.displayName = 'LiveVideoPlayerInner';
84
+ export const LiveVideoPlayer = memo(({ id, position = DEFAULT_POSITION, rotation = DEFAULT_ROTATION, width = DEFAULT_WIDTH, url, ...props }) => {
85
+ const screenHeight = width * (9 / 16);
86
+ if (!url) {
87
+ return (_jsx("group", { position: position, rotation: rotation, children: _jsxs("mesh", { children: [_jsx("planeGeometry", { args: [width, screenHeight] }), _jsx("meshBasicMaterial", { color: "#000000" })] }) }));
88
+ }
89
+ return (_jsx(Suspense, { fallback: _jsx("group", { position: position, rotation: rotation, children: _jsxs("mesh", { children: [_jsx("planeGeometry", { args: [width, screenHeight] }), _jsx("meshBasicMaterial", { color: "#333333" })] }) }), children: _jsx(LiveVideoPlayerInner, { id: id, position: position, rotation: rotation, width: width, url: url, ...props }) }));
90
+ });
91
+ LiveVideoPlayer.displayName = 'LiveVideoPlayer';
92
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/LiveVideoPlayer/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAK7C,MAAM,gBAAgB,GAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAC7D,MAAM,gBAAgB,GAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AAC5D,MAAM,aAAa,GAAG,CAAC,CAAA;AAEvB,MAAM,oBAAoB,GAAG,IAAI,CAC/B,CAAC,EACC,EAAE,EACF,QAAQ,GAAG,gBAAgB,EAC3B,QAAQ,GAAG,gBAAgB,EAC3B,KAAK,GAAG,aAAa,EACrB,GAAG,GAAG,EAAE,EACR,OAAO,EAAE,cAAc,GAAG,IAAI,EAC9B,MAAM,EAAE,aAAa,GAAG,CAAC,EACzB,OAAO,GACgC,EAAE,EAAE;IAC3C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAA;IACtD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA;IACnD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAErD,MAAM,YAAY,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;IAErC,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,EAAE;QACnC,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,OAAO;KACf,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,MAAM,CAAmB,OAAO,CAAC,KAAyB,CAAC,CAAA;IAE5E,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,KAAyB,CAAA;IACtD,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAEb,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,IAAI,CAAC,KAAK;YAAE,OAAM;QAElB,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACzB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAA;gBAC5C,OAAO,EAAE,CAAC,GAAG,CAAC,CAAA;YAChB,CAAC,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,KAAK,EAAE,CAAA;QACf,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IAEtB,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,IAAI,CAAC,KAAK;YAAE,OAAM;QAElB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;IACjD,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAEZ,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,IAAI,CAAC,KAAK;YAAE,OAAM;QAElB,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAChD,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QACjD,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QACjD,MAAM,WAAW,GAAG,CAAC,CAAQ,EAAE,EAAE;YAC/B,MAAM,KAAK,GAAI,CAAC,CAAC,MAA2B,CAAC,KAAK,CAAA;YAClD,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;gBACjD,OAAO,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;YACrC,CAAC;QACH,CAAC,CAAA;QAED,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;QAChD,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;QAChD,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;QAChD,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QAE5C,OAAO,GAAG,EAAE;YACV,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;YACnD,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;YACnD,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;YACnD,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QACjD,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IAEtB,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,OAAO,CAAC,KAAyB,CAAA;QAC/C,OAAO,GAAG,EAAE;YACV,KAAK,CAAC,KAAK,EAAE,CAAA;YACb,KAAK,CAAC,GAAG,GAAG,EAAE,CAAA;YACd,KAAK,CAAC,IAAI,EAAE,CAAA;QACd,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAEb,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;QACvC,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,SAAiB,EAAE,EAAE;QAC3D,SAAS,CAAC,SAAS,CAAC,CAAA;IACtB,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,CACL,iBAAO,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,aAE3C,2BACE,wBAAe,IAAI,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,GAAI,EAC9C,4BAAmB,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,GAAI,IACjD,EAGP,KAAC,YAAY,IACX,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,eAAe,EAC5B,cAAc,EAAE,kBAAkB,GAClC,IACI,CACT,CAAA;AACH,CAAC,CACF,CAAA;AAED,oBAAoB,CAAC,WAAW,GAAG,sBAAsB,CAAA;AAEzD,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CACjC,CAAC,EACC,EAAE,EACF,QAAQ,GAAG,gBAAgB,EAC3B,QAAQ,GAAG,gBAAgB,EAC3B,KAAK,GAAG,aAAa,EACrB,GAAG,EACH,GAAG,KAAK,EACa,EAAE,EAAE;IACzB,MAAM,YAAY,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;IAErC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CACL,gBAAO,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,YAC3C,2BACE,wBAAe,IAAI,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,GAAI,EAC9C,4BAAmB,KAAK,EAAC,SAAS,GAAG,IAChC,GACD,CACT,CAAA;IACH,CAAC;IAED,OAAO,CACL,KAAC,QAAQ,IACP,QAAQ,EACN,gBAAO,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,YAC3C,2BACE,wBAAe,IAAI,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,GAAI,EAC9C,4BAAmB,KAAK,EAAC,SAAS,GAAG,IAChC,GACD,YAGV,KAAC,oBAAoB,IACnB,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,KACJ,KAAK,GACT,GACO,CACZ,CAAA;AACH,CAAC,CACF,CAAA;AAED,eAAe,CAAC,WAAW,GAAG,iBAAiB,CAAA"}
@@ -0,0 +1,53 @@
1
+ export interface LiveVideoPlayerProps {
2
+ /** スクリーンの一意なID(必須) */
3
+ id: string;
4
+ /** スクリーンの位置 */
5
+ position?: [number, number, number];
6
+ /** スクリーンの回転 */
7
+ rotation?: [number, number, number];
8
+ /** スクリーンの幅(高さは16:9で自動計算、デフォルト: 4) */
9
+ width?: number;
10
+ /** ライブストリームのURL(HLS .m3u8 形式) */
11
+ url?: string;
12
+ /** 初期再生状態(デフォルト: true) */
13
+ playing?: boolean;
14
+ /** 初期音量 0〜1(デフォルト: 1) */
15
+ volume?: number;
16
+ /** 同期モード(デフォルト: 'global') */
17
+ sync?: 'global' | 'local';
18
+ /** エラー発生時のコールバック */
19
+ onError?: (error: Error) => void;
20
+ }
21
+ export interface LiveControlPanelProps {
22
+ id: string;
23
+ width: number;
24
+ screenHeight: number;
25
+ playing: boolean;
26
+ volume: number;
27
+ isBuffering: boolean;
28
+ onPlayPause: () => void;
29
+ onVolumeChange: (volume: number) => void;
30
+ }
31
+ export interface PlayPauseButtonProps {
32
+ id: string;
33
+ position: [number, number, number];
34
+ size: number;
35
+ playing: boolean;
36
+ onInteract: () => void;
37
+ }
38
+ export interface VolumeControlProps {
39
+ id: string;
40
+ position: [number, number, number];
41
+ size: number;
42
+ volume: number;
43
+ onVolumeChange: (volume: number) => void;
44
+ }
45
+ export interface LiveIndicatorProps {
46
+ position: [number, number, number];
47
+ size: number;
48
+ }
49
+ export interface LoadingSpinnerProps {
50
+ position: [number, number, number];
51
+ size: number;
52
+ }
53
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/LiveVideoPlayer/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,sBAAsB;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,eAAe;IACf,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,eAAe;IACf,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iCAAiC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,0BAA0B;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,6BAA6B;IAC7B,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;IACzB,oBAAoB;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CACjC;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,OAAO,CAAA;IACpB,WAAW,EAAE,MAAM,IAAI,CAAA;IACvB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CACzC;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,MAAM,IAAI,CAAA;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CACzC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,IAAI,EAAE,MAAM,CAAA;CACb"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/LiveVideoPlayer/types.ts"],"names":[],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -8,6 +8,7 @@ export { Mirror, type MirrorProps } from './components/Mirror';
8
8
  export { Skybox, type SkyboxProps } from './components/Skybox';
9
9
  export { VideoScreen, type VideoScreenProps, type VideoState, } from './components/VideoScreen';
10
10
  export { RichVideoPlayer, type RichVideoPlayerProps, } from './components/RichVideoPlayer';
11
+ export { LiveVideoPlayer, type LiveVideoPlayerProps, } from './components/LiveVideoPlayer';
11
12
  export { ScreenShareDisplay, type ScreenShareDisplayProps, } from './components/ScreenShareDisplay';
12
13
  export { SpawnPoint, type SpawnPointProps, } from './components/SpawnPoint';
13
14
  export { useInstanceState } from './hooks/useInstanceState';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,KAAK,iBAAiB,GACvB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,KAAK,yBAAyB,GAC/B,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,uBAAuB,GAC7B,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,UAAU,IAAI,cAAc,EACjC,KAAK,sBAAsB,GAC5B,MAAM,8BAA8B,CAAA;AAErC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,KAAK,IAAI,EACT,KAAK,iBAAiB,GACvB,MAAM,yBAAyB,CAAA;AAGhC,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,UAAU,GAChB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,8BAA8B,CAAA;AAErC,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,GAC7B,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,UAAU,EACV,KAAK,eAAe,GACrB,MAAM,yBAAyB,CAAA;AAGhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAGrD,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,mBAAmB,GACzB,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,KAAK,iBAAiB,GACvB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,KAAK,yBAAyB,GAC/B,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,uBAAuB,GAC7B,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,UAAU,IAAI,cAAc,EACjC,KAAK,sBAAsB,GAC5B,MAAM,8BAA8B,CAAA;AAErC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,KAAK,IAAI,EACT,KAAK,iBAAiB,GACvB,MAAM,yBAAyB,CAAA;AAGhC,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,UAAU,GAChB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,8BAA8B,CAAA;AAErC,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,8BAA8B,CAAA;AAErC,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,GAC7B,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,UAAU,EACV,KAAK,eAAe,GACrB,MAAM,yBAAyB,CAAA;AAGhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAGrD,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,mBAAmB,GACzB,MAAM,kBAAkB,CAAA"}
package/dist/index.js CHANGED
@@ -10,6 +10,7 @@ export { Mirror } from './components/Mirror';
10
10
  export { Skybox } from './components/Skybox';
11
11
  export { VideoScreen, } from './components/VideoScreen';
12
12
  export { RichVideoPlayer, } from './components/RichVideoPlayer';
13
+ export { LiveVideoPlayer, } from './components/LiveVideoPlayer';
13
14
  export { ScreenShareDisplay, } from './components/ScreenShareDisplay';
14
15
  export { SpawnPoint, } from './components/SpawnPoint';
15
16
  // Hooks
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,GAET,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,oBAAoB,EACpB,uBAAuB,GAExB,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,GAEtB,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,GAGrB,MAAM,8BAA8B,CAAA;AAErC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,GAGT,MAAM,yBAAyB,CAAA;AAEhC,aAAa;AACb,OAAO,EACL,YAAY,GAEb,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EACL,WAAW,GAGZ,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EACL,eAAe,GAEhB,MAAM,8BAA8B,CAAA;AAErC,OAAO,EACL,kBAAkB,GAEnB,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,UAAU,GAEX,MAAM,yBAAyB,CAAA;AAEhC,QAAQ;AACR,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,GAET,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,oBAAoB,EACpB,uBAAuB,GAExB,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,GAEtB,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,GAGrB,MAAM,8BAA8B,CAAA;AAErC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,GAGT,MAAM,yBAAyB,CAAA;AAEhC,aAAa;AACb,OAAO,EACL,YAAY,GAEb,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EACL,WAAW,GAGZ,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EACL,eAAe,GAEhB,MAAM,8BAA8B,CAAA;AAErC,OAAO,EACL,eAAe,GAEhB,MAAM,8BAA8B,CAAA;AAErC,OAAO,EACL,kBAAkB,GAEnB,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,UAAU,GAEX,MAAM,yBAAyB,CAAA;AAEhC,QAAQ;AACR,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"TestScene.d.ts","sourceRoot":"","sources":["../../src/scenes/TestScene.tsx"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAgB,SAAS,4CA8ExB"}
1
+ {"version":3,"file":"TestScene.d.ts","sourceRoot":"","sources":["../../src/scenes/TestScene.tsx"],"names":[],"mappings":"AAQA;;;GAGG;AACH,wBAAgB,SAAS,4CAyFxB"}
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { RichVideoPlayer } from '../components/RichVideoPlayer';
3
+ import { LiveVideoPlayer } from '../components/LiveVideoPlayer';
3
4
  import { Mirror } from '../components/Mirror';
4
5
  import { Skybox } from '../components/Skybox';
5
6
  /**
@@ -7,6 +8,6 @@ import { Skybox } from '../components/Skybox';
7
8
  * Triplexでコンポーネントを確認するためのシーン
8
9
  */
9
10
  export function TestScene() {
10
- return (_jsxs(_Fragment, { children: [_jsx(Skybox, {}), _jsx("ambientLight", { intensity: 0.5 }), _jsx("directionalLight", { position: [5, 10, 5], intensity: 1 }), _jsxs("mesh", { rotation: [-Math.PI / 2, 0, 0], position: [0, 0, 0], receiveShadow: true, children: [_jsx("planeGeometry", { args: [20, 20] }), _jsx("meshStandardMaterial", { color: "#cccccc" })] }), _jsx(RichVideoPlayer, { id: "rich-player", position: [-4, 2, -2], rotation: [0, Math.PI / 6, 0], width: 3, volume: 0, playing: true, url: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4" }), _jsx(Mirror, { position: [-5, 2.5, -3], size: [3, 4], textureResolution: 512 }), _jsx(Mirror, { position: [-3, 1.5, -7], size: [2, 2], color: 0xffd700 }), _jsxs("mesh", { position: [0, 0.5, 0], children: [_jsx("boxGeometry", { args: [1, 1, 1] }), _jsx("meshStandardMaterial", { color: "orange" })] }), _jsxs("mesh", { position: [2, 1, -1], children: [_jsx("sphereGeometry", { args: [0.5, 32, 32] }), _jsx("meshStandardMaterial", { color: "blue", metalness: 0.8, roughness: 0.2 })] }), _jsxs("mesh", { position: [-2, 0.75, -1], children: [_jsx("cylinderGeometry", { args: [0.5, 0.5, 1.5, 32] }), _jsx("meshStandardMaterial", { color: "green" })] })] }));
11
+ return (_jsxs(_Fragment, { children: [_jsx(Skybox, {}), _jsx("ambientLight", { intensity: 0.5 }), _jsx("directionalLight", { position: [5, 10, 5], intensity: 1 }), _jsxs("mesh", { rotation: [-Math.PI / 2, 0, 0], position: [0, 0, 0], receiveShadow: true, children: [_jsx("planeGeometry", { args: [20, 20] }), _jsx("meshStandardMaterial", { color: "#cccccc" })] }), _jsx(RichVideoPlayer, { id: "rich-player", position: [-4, 2, -2], rotation: [0, Math.PI / 6, 0], width: 3, volume: 0, playing: true, url: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4" }), _jsx(LiveVideoPlayer, { id: "live-player", position: [4, 2, -2], rotation: [0, -Math.PI / 6, 0], width: 3, volume: 0, playing: true, url: "https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_16x9/bipbop_16x9_variant.m3u8" }), _jsx(Mirror, { position: [-5, 2.5, -3], size: [3, 4], textureResolution: 512 }), _jsx(Mirror, { position: [-3, 1.5, -7], size: [2, 2], color: 0xffd700 }), _jsxs("mesh", { position: [0, 0.5, 0], children: [_jsx("boxGeometry", { args: [1, 1, 1] }), _jsx("meshStandardMaterial", { color: "orange" })] }), _jsxs("mesh", { position: [2, 1, -1], children: [_jsx("sphereGeometry", { args: [0.5, 32, 32] }), _jsx("meshStandardMaterial", { color: "blue", metalness: 0.8, roughness: 0.2 })] }), _jsxs("mesh", { position: [-2, 0.75, -1], children: [_jsx("cylinderGeometry", { args: [0.5, 0.5, 1.5, 32] }), _jsx("meshStandardMaterial", { color: "green" })] })] }));
11
12
  }
12
13
  //# sourceMappingURL=TestScene.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TestScene.js","sourceRoot":"","sources":["../../src/scenes/TestScene.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAG7C;;;GAGG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,CACL,8BAEE,KAAC,MAAM,KAAG,EAGV,uBAAc,SAAS,EAAE,GAAG,GAAI,EAChC,2BAAkB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAI,EAGxD,gBAAM,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,mBACtE,wBAAe,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAI,EACjC,+BAAsB,KAAK,EAAC,SAAS,GAAG,IACnC,EAqBP,KAAC,eAAe,IACd,EAAE,EAAC,aAAa,EAChB,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EACrB,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAC7B,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC,EACT,OAAO,QACP,GAAG,EAAC,mFAAmF,GACvF,EAGF,KAAC,MAAM,IACL,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EACvB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACZ,iBAAiB,EAAE,GAAG,GACtB,EAGF,KAAC,MAAM,IACL,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EACvB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACZ,KAAK,EAAE,QAAQ,GACf,EAGF,gBAAM,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,aACzB,sBAAa,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAI,EAChC,+BAAsB,KAAK,EAAC,QAAQ,GAAG,IAClC,EAGP,gBAAM,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,aACxB,yBAAgB,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAI,EACvC,+BAAsB,KAAK,EAAC,MAAM,EAAC,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAI,IAChE,EAGP,gBAAM,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,aAC5B,2BAAkB,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAI,EAC/C,+BAAsB,KAAK,EAAC,OAAO,GAAG,IACjC,IACN,CACJ,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"TestScene.js","sourceRoot":"","sources":["../../src/scenes/TestScene.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAG7C;;;GAGG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,CACL,8BAEE,KAAC,MAAM,KAAG,EAGV,uBAAc,SAAS,EAAE,GAAG,GAAI,EAChC,2BAAkB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAI,EAGxD,gBAAM,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,mBACtE,wBAAe,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAI,EACjC,+BAAsB,KAAK,EAAC,SAAS,GAAG,IACnC,EAqBP,KAAC,eAAe,IACd,EAAE,EAAC,aAAa,EAChB,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EACrB,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAC7B,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC,EACT,OAAO,QACP,GAAG,EAAC,mFAAmF,GACvF,EAGF,KAAC,eAAe,IACd,EAAE,EAAC,aAAa,EAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EACpB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAC9B,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC,EACT,OAAO,QACP,GAAG,EAAC,mGAAmG,GACvG,EAGF,KAAC,MAAM,IACL,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EACvB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACZ,iBAAiB,EAAE,GAAG,GACtB,EAGF,KAAC,MAAM,IACL,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EACvB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACZ,KAAK,EAAE,QAAQ,GACf,EAGF,gBAAM,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,aACzB,sBAAa,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAI,EAChC,+BAAsB,KAAK,EAAC,QAAQ,GAAG,IAClC,EAGP,gBAAM,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,aACxB,yBAAgB,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAI,EACvC,+BAAsB,KAAK,EAAC,MAAM,EAAC,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAI,IAChE,EAGP,gBAAM,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,aAC5B,2BAAkB,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAI,EAC/C,+BAAsB,KAAK,EAAC,OAAO,GAAG,IACjC,IACN,CACJ,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xrift/world-components",
3
- "version": "0.17.1",
3
+ "version": "0.18.0",
4
4
  "description": "Shared components and utilities for Xrift worlds",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -33,9 +33,15 @@
33
33
  "peerDependencies": {
34
34
  "@react-three/drei": "^10.0.0",
35
35
  "@react-three/fiber": "^9.0.0",
36
+ "hls.js": "^1.5.0",
36
37
  "react": "^18.0.0 || ^19.0.0",
37
38
  "three": ">=0.176.0"
38
39
  },
40
+ "peerDependenciesMeta": {
41
+ "hls.js": {
42
+ "optional": true
43
+ }
44
+ },
39
45
  "devDependencies": {
40
46
  "@react-three/drei": "^10.7.6",
41
47
  "@react-three/fiber": "^9.4.0",