如何使用方法 changeToMediaAtIndex tvmlkit js
how to use method changeToMediaAtIndex tvmlkit js
如何使用tvmlkit js中的changeToMediaAtIndex方法来改变播放列表中的视频?
当我对播放器 class (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 并立即调用以更改媒体项。我尝试了不同的顺序(更改项目后调用播放),我注意到当我单步执行代码时,它会按预期工作。请注意,this.startingVideoId
是在调用包含上述代码的播放函数之前通过操作在控制器上设置的。 videoItemsList
也在上面定义,并且有带有视频信息的对象。
我决定添加一个事件侦听器并等到我收到来自播放器的事件,然后再尝试更改 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,但我希望这应该能让您走上正确的轨道。
这里还没有很多好的 tvos 答案。希望这会有所帮助。
编程愉快。
如何使用tvmlkit js中的changeToMediaAtIndex方法来改变播放列表中的视频? 当我对播放器 class (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 并立即调用以更改媒体项。我尝试了不同的顺序(更改项目后调用播放),我注意到当我单步执行代码时,它会按预期工作。请注意,this.startingVideoId
是在调用包含上述代码的播放函数之前通过操作在控制器上设置的。 videoItemsList
也在上面定义,并且有带有视频信息的对象。
我决定添加一个事件侦听器并等到我收到来自播放器的事件,然后再尝试更改 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,但我希望这应该能让您走上正确的轨道。
这里还没有很多好的 tvos 答案。希望这会有所帮助。
编程愉快。