如何使用方法changeToMediaAtIndex tvmlkit js

时间:2016-10-22 22:39:18

标签: tvos tvml tvos10

如何在tvmlkit js中使用changeToMediaAtIndex方法更改播放列表中的视频? 当我在玩家类(player.changeToMediaAtIndex(2))中使用此方法时,没有任何事情发生......

1 个答案:

答案 0 :(得分:0)

我也遇到过这个问题。我的代码看起来像这样。

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);

我会拨打电话并立即致电更改媒体项目。我尝试了不同的顺序(更改项目后调用播放),我注意到当我逐步完成代码时,它会按预期工作。请注意,在调用包含上述代码的播放函数之前,操作会在控制器上设置this.startingVideoIdvideoItemsList也在上面定义,并且包含带有视频信息的对象。

我决定添加一个事件监听器并等到我在尝试更改currentItem之前收到来自播放器的事件。我从play函数中删除了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,但这样可以让您走上正确的轨道。

这里仍然没有很多好的tvos答案。希望这会有所帮助。

快乐的节目。