VIDEOJS:在每个播放列表项目之前播放前贴片添加

我使用videojs-playlist插件以及Google的videojs-ima插件。 除了我只在第一个video之前收到预加载广告外,一切都可以顺利进行。 我想在播放列表中的每个video之前添加一个 。 基本设置是样板,但供参考:

this.player = videojs('currentvideo', { autoplay : true, fluid : true }); this.player.playlist(this.playlist); this.player.playlist.autoadvance(5); const skippable_linear = {google's test ad}; const options = { id: 'currentvideo', adTagUrl: skippable_linear, debug : true }; this.player.ima( options ); this.player.ima.requestAds(); 

我尝试过使用各种方式手动调用“结束”事件处理程序中的广告,例如再次调用requestAds

 const _this = this; this.player.on( 'ended', function(){ /* some other stuff */ _this.player.ima.requestAds(); }); 

确实发挥了我想要的广告,但是

  1. 这打破了播放列表的“自动添加”设置(下一个video在广告结束时不会开始播放)
  2. 这使播放器进入“广告显示”模式(洗涤器不可用等)。

有没有一个简单的方法来只是说“现在播放广告”编程? 我已经试过,没有快乐,使用ima插件和contrib-ads插件所依赖的所有看似适用的方法。 我在这里承认,这是我第一次必须处理运行广告的video,所以我是一个小白菜。

我正在尝试做同样的事情。 就像你我在调用player.ima.requestAds()事件时失败一样。 我挖得更深,我能拿出的最好的是我分享的波纹pipe。

根据videojs-ima API,您必须使用setContentWithAdTag方法,而不是使用任何切换播放器内容的方法。 在我们的例子中是player.playlist.next方法。

我把videojs-ima例子里的代码和原来的playlist.next起来写下我自己的代码。

然后相当残暴地取代原来的插件方法。

代码如下:

 player.playlist(myPlayilst); player.playlist.autoadvance(2); player.playlistUi(); //videojs-playlist-ui player.ima({ id: 'video5', adTagUrl: 'thy adserver request' }); //override playlist.next player.playlist.next = function(){ var nextIndex = 0, playlist = this.player_.playlist, list = this.player_.playlist(); //everything below is copied directly from the original `next` (except for the "//load with ad") // Repeat if (playlist.repeat_) { nextIndex = playlist.currentIndex_ + 1; if (nextIndex > list.length - 1) { nextIndex = 0; } } else { // Don't go past the end of the playlist. nextIndex = Math.min(playlist.currentIndex_ + 1, list.length - 1); } // Make the change if (nextIndex !== playlist.currentIndex_) { //load with ad this.player_.playlist.currentItem(nextIndex); this.player_.ima.setContentWithAdTag( this.player_.playlist.currentItem(), null, true); this.player_.ima.requestAds(); ///// return list[playlist.currentItem()]; } } 

您可能需要重写更改当前播放的其他方法,如playlist.previous

我使用videojs-playlist-ui所以在我的情况下,需要更改名为switchPlaylistItem_的onclick处理程序。 我用一些很好的旧的蛮力来做到这一点:

 videojs.getComponent('PlaylistMenuItem').prototype.switchPlaylistItem_ = function(e){ this.player_.playlist.currentItem(this.player_.playlist().indexOf(this.item)); this.player_.ima.setContentWithAdTag( this.player_.playlist.currentItem(), null, true); this.player_.ima.requestAds(); }; 

PlaylistMenuItem的原型应该初始化玩家之前进行更改。

这个解决scheme的工作,但它感觉哈克,所以如果任何人都可以拿出更清洁的东西,请分享!

我结束了videojs-playlist ,并添加选项来覆盖player.src方法。 随意使用它:

FW-videojs,播放列表

有关如何使用它的详细信息都在github自述(包括ima.setContentWithAdTag的示例)

Interesting Posts