Merge pull request #15 from torjusti/feature/full-screen-api

Use browser FullScreen API for FullView
master
Stefan Otto 2018-07-17 08:37:10 +02:00 committed by GitHub
commit 29f45818b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 8 deletions

View File

@ -53,6 +53,7 @@ const FullScreenView = (props) =>
videoTrack={consumer ? consumer.track : null} videoTrack={consumer ? consumer.track : null}
videoVisible={consumerVisible} videoVisible={consumerVisible}
videoProfile={consumerProfile} videoProfile={consumerProfile}
toggleFullscreen={() => toggleConsumerFullscreen(consumer)}
/> />
</div> </div>
); );

View File

@ -2,6 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import classnames from 'classnames'; import classnames from 'classnames';
import Spinner from 'react-spinner'; import Spinner from 'react-spinner';
import fscreen from 'fscreen';
export default class FullView extends React.Component export default class FullView extends React.Component
{ {
@ -12,6 +13,8 @@ export default class FullView extends React.Component
// Latest received video track. // Latest received video track.
// @type {MediaStreamTrack} // @type {MediaStreamTrack}
this._videoTrack = null; this._videoTrack = null;
this.video = React.createRef();
} }
render() render()
@ -24,7 +27,7 @@ export default class FullView extends React.Component
return ( return (
<div data-component='FullView'> <div data-component='FullView'>
<video <video
ref='video' ref={this.video}
className={classnames({ className={classnames({
hidden : !videoVisible, hidden : !videoVisible,
loading : videoProfile === 'none' loading : videoProfile === 'none'
@ -48,11 +51,26 @@ export default class FullView extends React.Component
const { videoTrack } = this.props; const { videoTrack } = this.props;
this._setTracks(videoTrack); this._setTracks(videoTrack);
if (fscreen.fullscreenEnabled) {
fscreen.addEventListener('fullscreenchange', this.handleExitFullscreen, false);
fscreen.requestFullscreen(this.video.current);
}
} }
componentWillReceiveProps(nextProps) componentWillUnmount() {
fscreen.removeEventListener('fullscreenchange', this.handleExitFullscreen);
}
handleExitFullscreen = () => {
if (!fscreen.fullscreenElement) {
this.props.toggleFullscreen();
}
};
componentDidUpdate()
{ {
const { videoTrack } = nextProps; const { videoTrack } = this.props;
this._setTracks(videoTrack); this._setTracks(videoTrack);
} }
@ -64,15 +82,12 @@ export default class FullView extends React.Component
this._videoTrack = videoTrack; this._videoTrack = videoTrack;
const { video } = this.refs; const video = this.video.current;
if (videoTrack) if (videoTrack)
{ {
const stream = new MediaStream; const stream = new MediaStream;
stream.addTrack(videoTrack);
if (videoTrack)
stream.addTrack(videoTrack);
video.srcObject = stream; video.srcObject = stream;
} }
else else