react-player
Version:
A React component for playing a variety of URLs, including file paths, YouTube, Facebook, Twitch, SoundCloud, Streamable, Vimeo, Wistia and DailyMotion
227 lines (226 loc) • 4.54 kB
JavaScript
import PropTypes from "prop-types";
const { string, bool, number, array, oneOfType, shape, object, func, node } = PropTypes;
const propTypes = {
url: oneOfType([string, array, object]),
playing: bool,
loop: bool,
controls: bool,
volume: number,
muted: bool,
playbackRate: number,
width: oneOfType([string, number]),
height: oneOfType([string, number]),
style: object,
progressInterval: number,
playsinline: bool,
pip: bool,
stopOnUnmount: bool,
light: oneOfType([bool, string, object]),
playIcon: node,
previewTabIndex: number,
previewAriaLabel: string,
fallback: node,
oEmbedUrl: string,
wrapper: oneOfType([
string,
func,
shape({ render: func.isRequired })
]),
config: shape({
soundcloud: shape({
options: object
}),
youtube: shape({
playerVars: object,
embedOptions: object,
onUnstarted: func
}),
facebook: shape({
appId: string,
version: string,
playerId: string,
attributes: object
}),
dailymotion: shape({
params: object
}),
vimeo: shape({
playerOptions: object,
title: string
}),
mux: shape({
attributes: object,
version: string
}),
file: shape({
attributes: object,
tracks: array,
forceVideo: bool,
forceAudio: bool,
forceHLS: bool,
forceSafariHLS: bool,
forceDisableHls: bool,
forceDASH: bool,
forceFLV: bool,
hlsOptions: object,
hlsVersion: string,
dashVersion: string,
flvVersion: string
}),
wistia: shape({
options: object,
playerId: string,
customControls: array
}),
mixcloud: shape({
options: object
}),
twitch: shape({
options: object,
playerId: string
}),
vidyard: shape({
options: object
})
}),
onReady: func,
onStart: func,
onPlay: func,
onPause: func,
onBuffer: func,
onBufferEnd: func,
onEnded: func,
onError: func,
onDuration: func,
onSeek: func,
onPlaybackRateChange: func,
onPlaybackQualityChange: func,
onProgress: func,
onClickPreview: func,
onEnablePIP: func,
onDisablePIP: func
};
const noop = () => {
};
const defaultProps = {
playing: false,
loop: false,
controls: false,
volume: null,
muted: false,
playbackRate: 1,
width: "640px",
height: "360px",
style: {},
progressInterval: 1e3,
playsinline: false,
pip: false,
stopOnUnmount: true,
light: false,
fallback: null,
wrapper: "div",
previewTabIndex: 0,
previewAriaLabel: "",
oEmbedUrl: "https://noembed.com/embed?url={url}",
config: {
soundcloud: {
options: {
visual: true,
// Undocumented, but makes player fill container and look better
buying: false,
liking: false,
download: false,
sharing: false,
show_comments: false,
show_playcount: false
}
},
youtube: {
playerVars: {
playsinline: 1,
showinfo: 0,
rel: 0,
iv_load_policy: 3,
modestbranding: 1
},
embedOptions: {},
onUnstarted: noop
},
facebook: {
appId: "1309697205772819",
version: "v3.3",
playerId: null,
attributes: {}
},
dailymotion: {
params: {
api: 1,
"endscreen-enable": false
}
},
vimeo: {
playerOptions: {
autopause: false,
byline: false,
portrait: false,
title: false
},
title: null
},
mux: {
attributes: {},
version: "2"
},
file: {
attributes: {},
tracks: [],
forceVideo: false,
forceAudio: false,
forceHLS: false,
forceDASH: false,
forceFLV: false,
hlsOptions: {},
hlsVersion: "1.1.4",
dashVersion: "3.1.3",
flvVersion: "1.5.0",
forceDisableHls: false
},
wistia: {
options: {},
playerId: null,
customControls: null
},
mixcloud: {
options: {
hide_cover: 1
}
},
twitch: {
options: {},
playerId: null
},
vidyard: {
options: {}
}
},
onReady: noop,
onStart: noop,
onPlay: noop,
onPause: noop,
onBuffer: noop,
onBufferEnd: noop,
onEnded: noop,
onError: noop,
onDuration: noop,
onSeek: noop,
onPlaybackRateChange: noop,
onPlaybackQualityChange: noop,
onProgress: noop,
onClickPreview: noop,
onEnablePIP: noop,
onDisablePIP: noop
};
export {
defaultProps,
propTypes
};