From 97762c17b0f0956160ba65ae55cc4899b9122fc0 Mon Sep 17 00:00:00 2001 From: Gabe Kangas Date: Sun, 8 May 2022 23:42:40 -0700 Subject: [PATCH] Add viewer ping + volume saving to player --- web/components/video/OwncastPlayer.tsx | 38 ++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/web/components/video/OwncastPlayer.tsx b/web/components/video/OwncastPlayer.tsx index c453160da..c433415aa 100644 --- a/web/components/video/OwncastPlayer.tsx +++ b/web/components/video/OwncastPlayer.tsx @@ -1,10 +1,28 @@ import React from 'react'; import VideoJS from './player'; +import ViewerPing from './viewer-ping'; +import { getLocalStorage, setLocalStorage } from '../../utils/helpers'; + +const PLAYER_VOLUME = 'owncast_volume'; + +const ping = new ViewerPing(); export default function OwncastPlayer(props) { const playerRef = React.useRef(null); const { source } = props; + const setSavedVolume = () => { + try { + playerRef.current.volume(getLocalStorage(PLAYER_VOLUME) || 1); + } catch (err) { + console.warn(err); + } + }; + + const handleVolume = () => { + setLocalStorage(PLAYER_VOLUME, playerRef.current.muted() ? 0 : playerRef.current.volume()); + }; + const videoJsOptions = { autoplay: false, controls: true, @@ -42,6 +60,8 @@ export default function OwncastPlayer(props) { const handlePlayerReady = player => { playerRef.current = player; + setSavedVolume(); + // You can handle player events here, for example: player.on('waiting', () => { player.log('player is waiting'); @@ -49,7 +69,25 @@ export default function OwncastPlayer(props) { player.on('dispose', () => { player.log('player will dispose'); + ping.stop(); }); + + player.on('playing', () => { + player.log('player is playing'); + ping.start(); + }); + + player.on('pause', () => { + player.log('player is paused'); + ping.stop(); + }); + + player.on('ended', () => { + player.log('player is ended'); + ping.stop(); + }); + + player.on('volumechange', handleVolume); }; return ;