在调用dispose时,videojs返回vdata错误

时间:2014-08-25 20:30:19

标签: jquery video.js tweenmax

我收到错误,我没有找到任何线索,我使用videojs来控制滑块中的多个视频,在每个完成的转换中,我调用一个新的videojs实例并存储ID变量和dispose()旧的videojs。因为我有很多幻灯片(或视频),并且想要在没有活跃的性能时杀死它们。我的滑块在TweenMax下工作..我从Timline调用onStart事件中的dispose()。当调用dispose()时,我收到此错误:

未捕获的TypeError:无法读取属性' vdata1408997779453'为null

这是我的代码示例:

var $slides = [],
    videos =[],
    currentSlide = 0,
    currentVideo = null;

$(function(){

    TweenLite.to($('#header-wrap'), 1, {
            left: x,
            onStart: function(){
                if(currentVideo) {
                    TweenMax.set($('.video-holder'), {autoAlpha: 0});
                    currentVideo.dispose();
                }
            },

            onComplete: function() {
                if(videos[slideActive].url) {
                        videojs('movie-video-holder-'+slideActive+'', {"autoplay": false, "preload": "auto", "controls": false, "lopp": false}, function(){
                            currentVideo = $vid;
                            [...]
                        });
                }
            }
    [...]

谢谢!

2 个答案:

答案 0 :(得分:7)

这看起来与https://github.com/videojs/video.js/pull/1481

有关

一个非常讨厌的黑客(直到补丁被合并)将暂停播放器,等待错误后的帧,然后处置播放器:

player.pause();
setTimeout(function() {
    player.dispose();
}, 0);

答案 1 :(得分:1)

我能解决这个问题的唯一方法是覆盖videojs原型方法trackCurrentTime,添加对this.player().el()的检查,因为它们有一些issues related to this { {3}}

vjs.MediaTechController.prototype.trackCurrentTime = function() {
    if (this.currentTimeInterval) { this.stopTrackingCurrentTime(); }

    this.currentTimeInterval = setInterval(vjs.bind(this, function(){
        if(this.player().el() != null)
            this.player().trigger('timeupdate');
        else
            clearInterval(this.currentTimeInterval);

    }), 250);
};

问题出现在你暂停然后手动播放播放器并在播放时丢弃它。之后,间隔currentTimeInterval永远不会停止。

我打赌他们正在努力修复它,因为问题得到了证实。同时尝试这个修复