如何使用方法changeToMediaAtIndex tvmlkit js



如何在tvmlkit js中使用方法changeToMediaAtIndex来更改播放列表中的视频?当我使用这个方法与播放器类(player. changetomediaatindex(2))没有发生任何事情…

我也有这个问题。我的代码是这样的:

var player = new Player();
player.playlist = new Playlist();
this.currentMediaItemIndex = 0;
for (var i = 0; i < videoItemsList.length; ++i) {
    var video = new MediaItem('video', videoItemsList[i].videoUrl.valueOf());
    video.artworkImageURL = videoItemsList[i].artworkUrl;
    video.title = videoItemsList[i].title;
    video.resumeTime = videoItemsList[i].watchedSeconds;
    if (videoItemList[i].videoId == this.startingVideoId) {
        this.currentMediaItemIndex = i;
    }
    player.playlist.push(video);
}
player.play();
player.changeToMediaAtIndex(this.currentMediaItemIndex);

我将调用play并立即调用更改媒体项。我尝试了不同的排序(在更改项目后调用play),我注意到当我逐步完成代码时,它会按预期工作。注意,this.startingVideoId是在调用包含上述代码的play函数之前通过一个动作在控制器上设置的。videoItemsList也是上述定义的,具有带有视频信息的Object's。

我决定添加一个事件监听器,并等到我收到来自玩家的事件后再尝试更改currentItem。我从播放功能中删除了player.changeToMediaAtIndex(this.currentMediaItemIndex);,并将其移动到事件侦听器中。

当播放器像这样创建时,我将事件监听器添加到播放函数中。

    player.addEventListener("stateDidChange", this.stateDidChange);

然后我实现了事件监听器来检查播放列表,看看当它进入播放状态时是否正在播放正确的视频。

private stateDidChange = (event) => {
        if (event.state == "playing") {
            var player = <Player>event.target;
            for (var i = 0; i < player.playlist.length; ++i) {
                if (player.playlist.item(i) == player.currentMediaItem) {
                    if (i != this.currentMediaItemIndex) {
                        player.changeToMediaAtIndex(this.currentMediaItemIndex);
                    }
                    break; // break out of the loop since we don't care about the rest.
                }
            }
        }
    };

这个现在工作得很好,总是从正确的位置开始。您将需要使用事件侦听器进行额外的状态跟踪,例如在跟踪更改时更改currentMediaItemIndex,但我希望这将使您走上正确的轨道。

在这里仍然没有很多好的两个问题的答案。希望这对你有帮助。

快乐编程。

相关内容

  • 没有找到相关文章

最新更新