feat: render youtube player after initialization and enable default mute

This commit is contained in:
codytseng
2025-07-30 18:14:20 +08:00
parent 663885712b
commit e69395dca0
2 changed files with 10 additions and 2 deletions

View File

@@ -1,7 +1,7 @@
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'
import mediaManager from '@/services/media-manager.service' import mediaManager from '@/services/media-manager.service'
import { YouTubePlayer } from '@/types/youtube' import { YouTubePlayer } from '@/types/youtube'
import { useEffect, useMemo, useRef } from 'react' import { useEffect, useMemo, useRef, useState } from 'react'
export default function YoutubeEmbeddedPlayer({ export default function YoutubeEmbeddedPlayer({
url, url,
@@ -11,6 +11,7 @@ export default function YoutubeEmbeddedPlayer({
className?: string className?: string
}) { }) {
const videoId = useMemo(() => extractVideoId(url), [url]) const videoId = useMemo(() => extractVideoId(url), [url])
const [initSuccess, setInitSuccess] = useState(false)
const playerRef = useRef<YouTubePlayer | null>(null) const playerRef = useRef<YouTubePlayer | null>(null)
const containerRef = useRef<HTMLDivElement>(null) const containerRef = useRef<HTMLDivElement>(null)
@@ -34,6 +35,9 @@ export default function YoutubeEmbeddedPlayer({
if (!videoId || !containerRef.current || !window.YT.Player) return if (!videoId || !containerRef.current || !window.YT.Player) return
playerRef.current = new window.YT.Player(containerRef.current, { playerRef.current = new window.YT.Player(containerRef.current, {
videoId: videoId, videoId: videoId,
playerVars: {
mute: 1
},
events: { events: {
onStateChange: (event: any) => { onStateChange: (event: any) => {
if (event.data === window.YT.PlayerState.PLAYING) { if (event.data === window.YT.PlayerState.PLAYING) {
@@ -41,6 +45,9 @@ export default function YoutubeEmbeddedPlayer({
} else if (event.data === window.YT.PlayerState.PAUSED) { } else if (event.data === window.YT.PlayerState.PAUSED) {
mediaManager.pause(playerRef.current) mediaManager.pause(playerRef.current)
} }
},
onReady: () => {
setInitSuccess(true)
} }
} }
}) })
@@ -57,7 +64,7 @@ export default function YoutubeEmbeddedPlayer({
} }
}, [videoId]) }, [videoId])
if (!videoId) { if (!videoId && !initSuccess) {
return ( return (
<a <a
href={url} href={url}

View File

@@ -24,6 +24,7 @@ interface YouTubePlayerConfig {
controls?: 0 | 1 controls?: 0 | 1
start?: number start?: number
end?: number end?: number
mute?: 0 | 1
} }
events?: { events?: {
onReady?: (event: { target: YouTubePlayer }) => void onReady?: (event: { target: YouTubePlayer }) => void