import React, { useEffect, createRef } from 'react'; import PropTypes from 'prop-types'; import * as config from '../../config'; const VideoPlayer = (props) => { const videoElement = createRef(); useEffect(() => { const mediaPlayerScript = document.createElement('script'); mediaPlayerScript.src = 'https://player.live-video.net/1.8.0/amazon-ivs-player.min.js'; mediaPlayerScript.async = true; mediaPlayerScript.onload = () => mediaPlayerScriptLoaded(); document.body.appendChild(mediaPlayerScript); }, []); const mediaPlayerScriptLoaded = () => { // This shows how to include the Amazon IVS Player with a script tag from our CDN // If self hosting, you may not be able to use the create() method since it requires // that file names do not change and are all hosted from the same directory. const MediaPlayerPackage = window.IVSPlayer; const playerOverlay = document.getElementById('overlay'); const btnPlay = document.getElementById('play'); const btnMute = document.getElementById('mute'); // First, check if the browser supports the Amazon IVS player. if (!MediaPlayerPackage.isPlayerSupported) { console.warn( 'The current browser does not support the Amazon IVS player.', ); return; } const PlayerState = MediaPlayerPackage.PlayerState; const PlayerEventType = MediaPlayerPackage.PlayerEventType; // Initialize player const player = MediaPlayerPackage.create(); player.attachHTMLVideoElement(document.getElementById('video-player')); // Attach event listeners player.addEventListener(PlayerState.PLAYING, function () { if (config.DEBUG) console.log('Player State - PLAYING'); }); player.addEventListener(PlayerState.ENDED, function () { if (config.DEBUG) console.log('Player State - ENDED'); }); player.addEventListener(PlayerState.READY, function () { if (config.DEBUG) console.log('Player State - READY'); }); player.addEventListener(PlayerEventType.ERROR, function (err) { if (config.DEBUG) console.warn('Player Event - ERROR:', err); }); player.addEventListener(PlayerEventType.TEXT_METADATA_CUE, function (cue) { const metadataText = cue.text; const position = player.getPosition().toFixed(2); if (config.DEBUG) console.log( `Player Event - TEXT_METADATA_CUE: "${metadataText}". Observed ${position}s after playback started.`, ); }); // Setup stream and play player.setAutoplay(true); player.load(props.videoStream); // Setvolume player.setVolume(0.1); // Show/Hide player controls playerOverlay.addEventListener( 'mouseover', function (e) { playerOverlay.classList.add('overlay--hover'); }, false, ); playerOverlay.addEventListener('mouseout', function (e) { playerOverlay.classList.remove('overlay--hover'); }); // Controls events // Play/Pause btnPlay.addEventListener( 'click', function (e) { if (btnPlay.classList.contains('player-btn--play')) { // change to pause btnPlay.classList.remove('player-btn--play'); btnPlay.classList.add('player-btn--pause'); player.pause(); } else { // change to play btnPlay.classList.remove('player-btn--pause'); btnPlay.classList.add('player-btn--play'); player.play(); } }, false, ); // Mute/Unmute btnMute.addEventListener( 'click', function (e) { if (btnMute.classList.contains('player-btn--mute')) { btnMute.classList.remove('player-btn--mute'); btnMute.classList.add('player-btn--unmute'); player.setMuted(1); } else { btnMute.classList.remove('player-btn--unmute'); btnMute.classList.add('player-btn--mute'); player.setMuted(0); } }, false, ); }; return (
); }; VideoPlayer.propTypes = { videoStream: PropTypes.string, }; export default VideoPlayer;