diff --git a/src/components/PictureInPicture/PiP.tsx b/src/components/PictureInPicture/PiP.tsx new file mode 100644 index 00000000..b56290c9 --- /dev/null +++ b/src/components/PictureInPicture/PiP.tsx @@ -0,0 +1,41 @@ +import { + memo, + RefObject, +} from 'react' + +import styled from 'styled-components/macro' + +import { Icon } from 'features/Icon' + +const PipWrapper = styled.div` + cursor: pointer; + margin-left: 25px; + margin-right: 25px; + margin-top: 4px; +` + +type PipProps = { + videoRef: RefObject, +} + +export const PiP = memo(({ videoRef }: PipProps) => { + const togglePip = async () => { + try { + if ( + document.pictureInPictureEnabled && videoRef.current !== document.pictureInPictureElement + ) { + await videoRef.current?.requestPictureInPicture() + } else { + await document.exitPictureInPicture() + } + } catch (err) { + await document.exitPictureInPicture() + } + } + + return ( + + + + ) +}) diff --git a/src/features/MultiSourcePlayer/index.tsx b/src/features/MultiSourcePlayer/index.tsx index d8c50ab9..5881a26c 100644 --- a/src/features/MultiSourcePlayer/index.tsx +++ b/src/features/MultiSourcePlayer/index.tsx @@ -77,6 +77,8 @@ export const MultiSourcePlayer = (props: Props) => { wrapperRef, } = useMultiSourcePlayer(props) const firstPlayerActive = activePlayer === Players.PLAYER1 + const currentVideo = firstPlayerActive ? video1Ref : video2Ref + return ( { )} {ready && ( - + {isMobileDevice && playing ? ( ) : ( @@ -172,6 +177,7 @@ export const MultiSourcePlayer = (props: Props) => { )} { src={firstPlayerActive ? activeSrc : nextSrc} togglePlaying={togglePlaying} videoQualities={videoQualities} - videoRef={firstPlayerActive ? video1Ref : video2Ref} + videoRef={currentVideo} volume={volume} volumeInPercent={volumeInPercent} /> diff --git a/src/features/StreamPlayer/components/Controls/Components/ControlsWeb/index.tsx b/src/features/StreamPlayer/components/Controls/Components/ControlsWeb/index.tsx index c2622203..a98c2f18 100644 --- a/src/features/StreamPlayer/components/Controls/Components/ControlsWeb/index.tsx +++ b/src/features/StreamPlayer/components/Controls/Components/ControlsWeb/index.tsx @@ -11,6 +11,8 @@ import { T9n } from 'features/T9n' import { ChromeCast } from 'features/ChromeCast' import { AudioTracks } from 'features/AudioTracks' +import { PiP } from 'components/PictureInPicture/PiP' + import { ControlsPropsExtended } from '../..' import { VolumeBar } from '../../../VolumeBar' import { @@ -56,6 +58,7 @@ export const ControlsWeb = (controlsProps: { props: ControlsPropsExtended }) => src, togglePlaying, videoQualities, + videoRef, volumeInPercent, } = props @@ -110,6 +113,9 @@ export const ControlsWeb = (controlsProps: { props: ControlsPropsExtended }) => )} + {document.pictureInPictureEnabled && ( + + )} , backToLive?: () => void, diff --git a/src/libs/index.ts b/src/libs/index.ts index a51c6c57..6195eae6 100644 --- a/src/libs/index.ts +++ b/src/libs/index.ts @@ -15,6 +15,7 @@ export { Sound } from './objects/Sound' export { Star } from './objects/Star' export { Dollar } from './objects/Dollar' export { Close } from './objects/Close' +export { PiP } from './objects/PiP' export { PoweredByInstat } from './objects/PoweredByInstat' export { PoweredByInsports } from './objects/PoweredByInsports' export { Info } from './objects/Info' diff --git a/src/libs/objects/PiP.tsx b/src/libs/objects/PiP.tsx new file mode 100644 index 00000000..a9133d6f --- /dev/null +++ b/src/libs/objects/PiP.tsx @@ -0,0 +1,48 @@ +export const PiP = () => ( + + + + + + + + + + + + + + + + + +)