2016-10-22 6 views

ответ

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.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. Надеюсь, это поможет.

Счастливое программирование.