Skip to content

Commit

Permalink
feat: add post-message handlers for volume and playback-rate
Browse files Browse the repository at this point in the history
  • Loading branch information
LonelyCpp committed Jun 17, 2024
1 parent 87d0418 commit f1646c1
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 26 deletions.
11 changes: 10 additions & 1 deletion iframe.html
Original file line number Diff line number Diff line change
Expand Up @@ -152,8 +152,9 @@

try {
const parsedData = JSON.parse(data);
const {eventName, meta} = parsedData;

switch (parsedData.eventName) {
switch (eventName) {
case 'playVideo':
player.playVideo();
break;
Expand All @@ -169,6 +170,14 @@
case 'unMuteVideo':
player.unMute();
break;

case 'setVolume':
player.setVolume(meta.volume);
break;

case 'setPlaybackRate':
player.setPlaybackRate(meta.playbackRate);
break;
}
} catch (error) {
console.error('Error parsing data', event, error);
Expand Down
43 changes: 18 additions & 25 deletions src/YoutubeIframe.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,17 @@ const YoutubeIframe = (props, ref) => {
const webViewRef = useRef(null);
const eventEmitter = useRef(new EventEmitter());

const sendPostMessage = useCallback((eventName, meta) => {
const message = JSON.stringify({eventName, meta});
webViewRef.current.postMessage(message);
}, []);
const sendPostMessage = useCallback(
(eventName, meta) => {
if (!playerReady) {
return;
}

const message = JSON.stringify({eventName, meta});
webViewRef.current.postMessage(message);
},
[playerReady],
);

useImperativeHandle(
ref,
Expand Down Expand Up @@ -119,42 +126,28 @@ const YoutubeIframe = (props, ref) => {
);

useEffect(() => {
if (!playerReady) {
// no instance of player is ready
return;
}

if (play) {
sendPostMessage('playVideo', {});
} else {
sendPostMessage('pauseVideo', {});
}
}, [play, playerReady, sendPostMessage]);
}, [play, sendPostMessage]);

useEffect(() => {
if (!playerReady) {
// no instance of player is ready
return;
}

if (mute) {
sendPostMessage('muteVideo', {});
} else {
sendPostMessage('unMuteVideo', {});
}
}, [mute, playerReady, sendPostMessage]);
}, [mute, sendPostMessage]);

useEffect(() => {
if (!playerReady) {
// no instance of player is ready
return;
}
sendPostMessage('setVolume', {volume});
}, [sendPostMessage, volume]);

[
PLAYER_FUNCTIONS.setVolume(volume),
PLAYER_FUNCTIONS.setPlaybackRate(playbackRate),
].forEach(webViewRef.current.injectJavaScript);
}, [volume, playbackRate, playerReady]);
useEffect(() => {
sendPostMessage('setPlaybackRate', {playbackRate});
}, [sendPostMessage, playbackRate]);

useEffect(() => {
if (!playerReady || lastVideoIdRef.current === videoId) {
Expand Down

0 comments on commit f1646c1

Please sign in to comment.