mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-13 07:46:17 -08:00
119 lines
2.9 KiB
JavaScript
119 lines
2.9 KiB
JavaScript
import { loadImaSdk, Player, PlayerOptions } from '@glomex/vast-ima-player'
|
|
|
|
export default function artplayerPluginVast(callback) {
|
|
return async (art) => {
|
|
const { template, constructor } = art
|
|
const { createElement, setStyles } = constructor.utils
|
|
const { $video, $player } = template
|
|
|
|
await loadImaSdk()
|
|
const google = window.google
|
|
const ima = google.ima
|
|
|
|
const adsRenderingSettings = new ima.AdsRenderingSettings()
|
|
adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true
|
|
adsRenderingSettings.enablePreloading = true
|
|
|
|
const playerOptions = new PlayerOptions()
|
|
let isAdPlaying = false
|
|
let imaPlayer = null
|
|
let $container = null
|
|
|
|
function createContainer() {
|
|
const container = createElement('div')
|
|
const id = `art-vast-${Date.now()}`
|
|
container.id = id
|
|
setStyles(container, {
|
|
position: 'absolute',
|
|
inset: '0',
|
|
width: '100%',
|
|
height: '100%',
|
|
zIndex: '150',
|
|
backgroundColor: 'black',
|
|
display: 'none',
|
|
pointerEvents: 'auto',
|
|
})
|
|
return container
|
|
}
|
|
|
|
function initPlayer() {
|
|
if (imaPlayer)
|
|
return imaPlayer
|
|
|
|
$container = createContainer()
|
|
$player.appendChild($container)
|
|
|
|
imaPlayer = new Player(ima, $video, $container, adsRenderingSettings, playerOptions)
|
|
|
|
imaPlayer.addEventListener('AdStarted', () => {
|
|
isAdPlaying = true
|
|
$container.style.display = 'block'
|
|
})
|
|
|
|
imaPlayer.addEventListener('AdComplete', () => {
|
|
isAdPlaying = false
|
|
$container.style.display = 'none'
|
|
})
|
|
|
|
imaPlayer.addEventListener('AdError', (event) => {
|
|
console.error('VAST Ad Error:', event.detail)
|
|
isAdPlaying = false
|
|
$container.style.display = 'none'
|
|
})
|
|
|
|
return imaPlayer
|
|
}
|
|
|
|
function destroyPlayer() {
|
|
if (imaPlayer?.destroy)
|
|
imaPlayer.destroy()
|
|
if ($container?.parentNode)
|
|
$container.parentNode.removeChild($container)
|
|
$container = null
|
|
imaPlayer = null
|
|
}
|
|
|
|
function playUrl(url) {
|
|
if (isAdPlaying)
|
|
return
|
|
if (!imaPlayer)
|
|
initPlayer()
|
|
const request = new ima.AdsRequest()
|
|
request.adTagUrl = url
|
|
imaPlayer.playAds(request)
|
|
}
|
|
|
|
function playRes(res) {
|
|
if (isAdPlaying)
|
|
return
|
|
if (!imaPlayer)
|
|
initPlayer()
|
|
const request = new ima.AdsRequest()
|
|
request.adsResponse = res
|
|
imaPlayer.playAds(request)
|
|
}
|
|
|
|
if (typeof callback === 'function') {
|
|
await callback({
|
|
art,
|
|
playUrl,
|
|
playRes,
|
|
ima,
|
|
imaPlayer,
|
|
get container() {
|
|
return $container
|
|
},
|
|
})
|
|
}
|
|
|
|
return {
|
|
name: 'artplayerPluginVast',
|
|
destroy: destroyPlayer,
|
|
}
|
|
}
|
|
}
|
|
|
|
if (typeof window !== 'undefined') {
|
|
window.artplayerPluginVast = artplayerPluginVast
|
|
}
|