adamellsworth
adamellsworth

Reputation: 371

jwplayer 6 seeking on element in playlist doesn't work

We're using an external scrubber (a UI element that is not the default seek bar) for seeking (via jquery ui draggable) and it is not updating the jwplayer when it should be.

Synopsis of our code:

$('#scrubber').draggable({

    // ...

    stop: function (event, ui) {

        $('#scrubber').draggable('enable');

        var intSecFromEnd,
            intSeek,
            intTotalTime = 0,
            intScrubPosition = ui.position.left,
            intScrubTime = intScrubPosition;

        // Find which video in the playlist to use
        $.each(playlist, function (i, obj) {

            intTotalTime += parseInt(obj.duration);

            if (intTotalTime > (intScrubTime)) {

                intSecFromEnd = intTotalTime - parseInt(intScrubTime);
                intSeek = Math.floor((parseInt(obj.duration) - intSecFromEnd));

                jwplayer('videoPlayer').load(playlist);
                jwplayer('videoPlayer').playlistItem(i);
                jwplayer('videoPlayer').seek(intSeek);
                jwplayer('videoPlayer').pause();


                /*
                    Play the video for 1 second to refresh the video player, so it is correctly displaying the current point in the video
                    Does not work either
                */
                // setTimeout(function () {
                //     jwplayer('videoPlayer').pause();
                // }, 1000);

                return false;
            }
        });
    }
});

You'll notice the key bit:

jwplayer('videoPlayer').load(playlist);
jwplayer('videoPlayer').playlistItem(i);
jwplayer('videoPlayer').seek(intSeek);
jwplayer('videoPlayer').pause();

When i put this into the console directly with an integer value where intSeek is it works exactly as it should, so I'm puzzled where the disconnect might be.

variation (that only works one one item in the playlist)

This works on the first member of the playlist only because the seek() function is defaulted to element 0 in the playlist.

jwplayer('videoPlayer').load(playlist);
jwplayer('videoPlayer').seek(intSeek);
jwplayer('videoPlayer').pause();

Naturally, it would stand to reason that jwplayer('videoPlayer').playlistItem(i) would retrieve the item at the index we want and, according to the docs, should:

Start playback of the playlist item at the specified index.

but, as this is effectively what is in the first example, it doesn't work.

Notes

Upvotes: 4

Views: 1158

Answers (1)

Francesco
Francesco

Reputation: 1148

we're trying onPlaylistItem(index).seek(seconds) but this doesn't works. This work only on active playlistitem and -of course- only about first file.

We're trying to use a pre-loaded playlist with seek button for every item of playlist. We use a playlist with more files and the user can go to a specific file and second clicking a button that call:

jwplayer().onPlaylistItem(<index_file>).seek(seconds);

This jump to the seconds but not to the correct playlist item.

With a previuos test using "playListItem" player jump to the correct file but start from beginning and not seek to seconds. (but work only in html5 mode and not with flash).

Now we've tested this code

<a onclick='var only_once =false;jwplayer().playlistItem(1);jwplayer().onPlay(function () {  
if (only_once == false) {
        only_once = true;
          jwplayer().seek(60);
    }
});' class="btn">HLS play 2nd file at 1 min</a>

but this solution works only in Flash mode and not in html 5 mode player!

Upvotes: 1

Related Questions