Как использовать метод changeToMediaAtIndex в tvmlkit js, чтобы изменить видео в плейлисте? Когда я использую этот метод с классом игрока (player.changeToMediaAtIndex (2)), ничего не произошло ...Как использовать метод changeToMediaAtIndex tvmlkit js
ответ
У меня также были проблемы с этим. Мой код выглядел так.
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.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. Надеюсь, это поможет.
Счастливое программирование.