feat: improve media playback experience

This commit is contained in:
codytseng 2025-10-11 23:19:07 +08:00
parent fb5434da91
commit 1f911c3a75
14 changed files with 353 additions and 66 deletions

View file

@ -18,6 +18,7 @@ export default function MediaPlayer({
const { autoLoadMedia } = useContentPolicy()
const [display, setDisplay] = useState(autoLoadMedia)
const [mediaType, setMediaType] = useState<'video' | 'audio' | null>(null)
const [error, setError] = useState(false)
useEffect(() => {
if (autoLoadMedia) {
@ -51,11 +52,12 @@ export default function MediaPlayer({
video.crossOrigin = 'anonymous'
video.onloadedmetadata = () => {
setError(false)
setMediaType(video.videoWidth > 0 || video.videoHeight > 0 ? 'video' : 'audio')
}
video.onerror = () => {
setMediaType(null)
setError(true)
}
return () => {
@ -63,6 +65,10 @@ export default function MediaPlayer({
}
}, [src, display, mustLoad])
if (error) {
return <ExternalLink url={src} />
}
if (!mustLoad && !display) {
return (
<div
@ -78,7 +84,7 @@ export default function MediaPlayer({
}
if (!mediaType) {
return <ExternalLink url={src} />
return null
}
if (mediaType === 'video') {