UNPKG

@atmtfy/video-background

Version:

Automatic background video from various sources (Youtube, MP4, vimeo) with autoplay across devices. No JS dependencies.

86 lines (70 loc) 2.01 kB
// import canAutoplay from "can-autoplay"; import { YOUTUBE_REGEX, VIMEO_REGEX } from '../constants/instance.js' interface ProviderUtilsShape { parsePath: string | null, timeRegex: RegExp, idRegex: RegExp, } interface ProvidersShape { youtube: ProviderUtilsShape, vimeo: ProviderUtilsShape } const providerUtils:ProvidersShape = { youtube: { parsePath: 'query.t', timeRegex: /[hms]/, idRegex: YOUTUBE_REGEX, // getDimensions: getYouTubeDimensions }, vimeo: { parsePath: null, timeRegex: /[#t=s]/, idRegex: VIMEO_REGEX, // getDimensions: getVimeoDimensions } } function checkExternalSource(srcs?:SourcesShape ):Source|false{ if (srcs && typeof srcs == 'object') { if ('type' in srcs[0]) { return srcs[0] } else if ('type' in srcs) { return srcs } } return false; } const getVideoID = (srcs: SourcesShape | undefined) => { const src = checkExternalSource(srcs); if (!src || src.type == 'local' || src.type == 'error') { console.error(`Video src is not valid`) return false; } const provider = providerUtils[src.type]; let match = provider && src.url.match(provider.idRegex) if (!match) { console.error(`Video id at ${ src.url } is not valid`) return false; } const id = src.type === 'vimeo' ? match[3] : match[7] if (id.length) { console.error(`Video id at ${ src.url } is not valid`) return id } console.error(`Video id at ${ src.url } is not valid`) return false; } async function checkForAutoplay(){ // const videoResult = await canAutoplay.video({inline: true, muted: true, timeout: 500}) // const audioResult = await canAutoplay.audio({inline: true, muted: false, timeout: 500}) // if (audioResult && videoResult) { // return { // video: videoResult.result, // audio: audioResult.result // } // } return { video: true, audio: true } } export {getVideoID, checkForAutoplay};