我正在尝试在我正在使用最新(4.11.4)版本的video.js.
Youtube 视频的网站上使用 youtube 视频上的前贴片广告,这要归功于videojs-youtube我在 github https://github.com上找到的插件/eXon/videojs-youtube,而对于广告部分,我正在使用这个videojs-vast-plugin https://github.com/theonion/videojs-vast-plugin,它读取我从 Revive Ad-Server 提供的一个 VAST 2.0 格式的 xml (v. 3.0) 以及播放和 mp4 视频。
这是我写的代码:
//= require video.dev
//= require youtube
//= require vast-client
//= require video.ads
//= require videojs.vast
<video id="video" class="video-js vjs-default-skin" controls preload="auto" width="610" height="343">
</video>
<script>
$(function(){
videojs('video', {plugins: {
ads: {},
vast: {
url: '{{url("ad-url")}}',
skip: 2
}
},
src: "http://www.youtube.com/watch?v={{youtubeCode}}",
techOrder: ["youtube", 'html5', 'flash']
})
});
</script>
此代码部分工作:我可以成功显示 YouTube 视频的海报图像,播放自定义视频广告(根据配置,“在 2 秒内跳过”警报),如果我想跳过视频,但每次广告结束(或它被跳过了)我得到这个错误:
Uncaught TypeError: Cannot read property 'vdata1423499421192' of null
Uncaught TypeError: Cannot read property 'handleSource' of null
通过做一些研究,我认为问题可能是在 AD 停止后第二个玩家没有被“重新初始化”,但我不知道在哪里采取行动来防止这种情况。我找到了一些答案,他们建议在触发 dispose() 方法之前添加超时,但它分散在所有插件中,我不明白哪个插件实际上在起作用。当我更改“techOrder”中元素的顺序时,特别是当我为 flash 和 html5 切换位置时,“vdata1423499421192”错误消失了,但视频仍然无法播放。
此外,如果我播放两个常规 mp4 视频(带有 mp4 广告的 mp4 视频),那么 video.js + large-plugin 的组合就可以了。
编辑: 我发现这个关于 Github 的错误报告处理了一个类似的问题,但提供的解决方案没有运气