2016-10-22 7 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); 

私は再生を呼び出し、すぐにメディアアイテムを変更するように電話します。私は別の注文(アイテムを変更した後に電話をかける)を試みました。コードを踏んだとき、それは意図したとおりに動作することに気付きました。上記のコードを含む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の回答はありません。うまくいけば、これが役に立ちます。

ハッピープログラミング。

関連する問題