Непрерывное зацикливание видео в TVOS?

Я только начинаю работать с TVOS, и мне было интересно, обращался ли кто-нибудь к зацикливанию в TVOS/TVJS/TVML. Я использую это руководство для создания простой интерфейс для воспроизведения видео. Моя проблема заключается в том, что я хочу, чтобы эти видео воспроизводились в непрерывном бесшовном цикле - в основном эффект типа движущейся заставки - см. примеры видео на art. chrisbaily.com.

Есть ли простой способ сделать это, или мне нужно создать какой-то прослушиватель событий для выполнения цикла вручную? Я бы хотел, чтобы видео были в достаточно высоком разрешении, а продолжительность видео была бы где-то между 1 и 3 минутами.


person Chris Baily    schedule 12.11.2015    source источник


Ответы (3)


Я тоже искал ответ на этот вопрос. И обнаружил, что единственный способ, которым это возможно, — это создать прослушиватель событий и добавить дубликат медиа-элемента в список воспроизведения. Но, честно говоря, это не так сложно, если вы следовали руководству, которое вы указали в своем посте.

Таким образом, код будет примерно таким

player.playlist = playlist;
player.playlist.push(mediaItem);
//Again push the same type of media item in playlist so now you have two of the same.
player.playlist.push(mediaItem); 
player.present();

Это гарантирует, что как только ваше первое видео закончится, начнется воспроизведение второго, что по сути является циклом. Затем для третьего и далее вы реализуете прослушиватель событий, используя "mediaItemWillChange". Это гарантирует, что после окончания видео в список воспроизведения будет добавлена ​​новая копия того же видео.

player.addEventListener("mediaItemWillChange", function(e) { 
   player.playlist.push(mediaItem);
});

Просто поместите прослушиватель событий перед запуском плеера с помощью

player.present();

Обратите внимание, что этот вопрос и идея такого рода уже задавались/предлагались на доске обсуждений Apple. Я просто взял идею и реализовал ее в своем собственном проекте, и теперь, зная, что она работает, я публикую решение. Я обнаружил, что если я вытаскиваю первое видео из списка воспроизведения и добавляю, а затем добавляю новое в список воспроизведения, как указано в связанной ветке ниже, мои видео не зацикливаются. Ниже ссылка на оригинальный пост.

Как повторить видео с помощью TVJS Player?

person Mandeep    schedule 07.01.2016

Вы также можете установить RepeatMode для объекта списка воспроизведения.

player.playlist.repeatMode = 1;
  • 0 = нет повтора
  • 1 = повторить все элементы в плейлисте
  • 2 = повторить текущий элемент
person Mr Bister    schedule 14.02.2020

На самом деле нет необходимости помещать второй элемент мультимедиа в файл. Просто слушайте, пока носитель не достигнет своего конца, а затем установите время поиска обратно на ноль. Вот код.

Воспроизведение мультимедиа.

    private func playVideo(name: String) {

    guard name != "" else {
        return
    }

    let bundle = NSBundle(forClass:object_getClass(self))
    let path = bundle.pathForResource(name, ofType:"mp4")
    let url = NSURL.fileURLWithPath(path!)
    self.avPlayer = AVPlayer(URL: url)

    if (self.avPlayerLayer == nil) {
        self.avPlayerLayer = AVPlayerLayer(player: self.avPlayer)
        self.avPlayerLayer.frame = previewViews[1].frame
        previewViews[1].layer.addSublayer(self.avPlayerLayer)

        avPlayer.actionAtItemEnd = .None

        //Listen for AVPlayerItemDidPlayToEndTimeNotification
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "playerItemDidReachEnd:", name: AVPlayerItemDidPlayToEndTimeNotification, object: self.avPlayer.currentItem)
    }

    avPlayer.play()

}

Играть снова

    func playerItemDidReachEnd(notification: NSNotification) {
        let item = notification.object as? AVPlayerItem
        item?.seekToTime(kCMTimeZero)
    }
person Michael Lee    schedule 12.01.2016