UNPKG

react-player

Version:

A React component for playing a variety of URLs, including file paths, Mux, YouTube, Vimeo, and Wistia

52 lines (51 loc) 2.14 kB
const AUDIO_EXTENSIONS = /\.(m4a|m4b|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx)($|\?)/i; const VIDEO_EXTENSIONS = /\.(mp4|og[gv]|webm|mov|m4v)(#t=[,\d+]+)?($|\?)/i; const HLS_EXTENSIONS = /\.(m3u8)($|\?)/i; const DASH_EXTENSIONS = /\.(mpd)($|\?)/i; const MATCH_URL_MUX = /stream\.mux\.com\/(?!\w+\.m3u8)(\w+)/; const MATCH_URL_YOUTUBE = /(?:youtu\.be\/|youtube(?:-nocookie|education)?\.com\/(?:embed\/|v\/|watch\/|watch\?v=|watch\?.+&v=|shorts\/|live\/))((\w|-){11})|youtube\.com\/playlist\?list=|youtube\.com\/user\//; const MATCH_URL_VIMEO = /vimeo\.com\/(?!progressive_redirect).+/; const MATCH_URL_WISTIA = /(?:wistia\.(?:com|net)|wi\.st)\/(?:medias|embed)\/(?:iframe\/)?([^?]+)/; const MATCH_URL_SPOTIFY = /open\.spotify\.com\/(\w+)\/(\w+)/i; const MATCH_URL_TWITCH = /(?:www\.|go\.)?twitch\.tv\/([a-zA-Z0-9_]+|(videos?\/|\?video=)\d+)($|\?)/; const MATCH_URL_TIKTOK = /tiktok\.com\/(?:player\/v1\/|share\/video\/|@[^/]+\/video\/)([0-9]+)/; const canPlayFile = (url, test) => { if (Array.isArray(url)) { for (const item of url) { if (typeof item === "string" && canPlayFile(item, test)) { return true; } if (canPlayFile(item.src, test)) { return true; } } return false; } return test(url); }; const canPlay = { html: (url) => canPlayFile(url, (u) => AUDIO_EXTENSIONS.test(u) || VIDEO_EXTENSIONS.test(u)), hls: (url) => canPlayFile(url, (u) => HLS_EXTENSIONS.test(u)), dash: (url) => canPlayFile(url, (u) => DASH_EXTENSIONS.test(u)), mux: (url) => MATCH_URL_MUX.test(url), youtube: (url) => MATCH_URL_YOUTUBE.test(url), vimeo: (url) => MATCH_URL_VIMEO.test(url) && !VIDEO_EXTENSIONS.test(url) && !HLS_EXTENSIONS.test(url), wistia: (url) => MATCH_URL_WISTIA.test(url), spotify: (url) => MATCH_URL_SPOTIFY.test(url), twitch: (url) => MATCH_URL_TWITCH.test(url), tiktok: (url) => MATCH_URL_TIKTOK.test(url) }; export { AUDIO_EXTENSIONS, DASH_EXTENSIONS, HLS_EXTENSIONS, MATCH_URL_MUX, MATCH_URL_SPOTIFY, MATCH_URL_TIKTOK, MATCH_URL_TWITCH, MATCH_URL_VIMEO, MATCH_URL_WISTIA, MATCH_URL_YOUTUBE, VIDEO_EXTENSIONS, canPlay };