2015-10-10 2 views
2

Я пытаюсь воспроизвести простой локальный клип в Xcode7 с помощью Swift для tvOS. Все, что я хочу, это видео, чтобы загрузить полноэкранный режим в режиме просмотра и цикла. Каждый учебник, который я вижу, имеет старый MPMoviePlayerController или загружается с URL-адреса. Каков наилучший способ сделать это на tvOS?Локальный цикл видеофайлов tvOS

Update2: Это обеспечило видеоролик, но между ними есть пауза. глядя на это сейчас, чтобы увидеть, как сделать это без проблем.

import UIKit 
import AVKit 
import AVFoundation 



class ViewController: UIViewController { 



var videoPlayer: AVPlayer! 
var playerLayer: AVPlayerLayer? 



override func viewDidLoad() { 
    super.viewDidLoad() 

    let path = NSBundle.mainBundle().pathForResource("video", ofType:"mp4") 
    let url = NSURL(fileURLWithPath: path!) 
    let playerItem = AVPlayerItem(URL: url) 

    self.videoPlayer = AVPlayer(playerItem: playerItem) 
    self.playerLayer = AVPlayerLayer(player: self.videoPlayer) 
    self.playerLayer!.frame = self.view.frame 
    self.videoPlayer!.play() 

    self.view.layer.addSublayer(self.playerLayer!) 






    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("playerDidReachEnd:"), name: AVPlayerItemDidPlayToEndTimeNotification, object:nil) 
    } 






    func playerDidReachEnd(notification: NSNotification) { 
     self.videoPlayer.seekToTime(kCMTimeZero) 
     self.videoPlayer.play() 
    } 




} 

ответ

3

Допустим, ваш файл называется video.m4v и хранится локально на устройстве (не забудьте добавить его скопировать Bundle ресурсы в Строительства фазам). Создайте хранимую свойство, так что вы можете получить доступ к AVPlayer-instance:

var videoPlayer: AVPlayer? 

Настройка видеоплеера и добавить AVPlayerLayer в иерархии вида.

if let path = NSBundle.mainBundle().pathForResource("video", ofType:"m4v") { 
    let url = NSURL(fileURLWithPath: path) 
    let playerItem = AVPlayerItem(URL: url) 

    self.videoPlayer = AVPlayer(playerItem: playerItem) 
    self.playerLayer = AVPlayerLayer(player: self.videoPlayer) 
    self.playerLayer!.frame = self.view.frame 

    self.view.layer.addSublayer(self.playerLayer!) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("playerDidReachEnd:"), name: AVPlayerItemDidPlayToEndTimeNotification, object:nil) 
} 

Вы подписали уведомление, которое я отправил, когда это видео заканчивается. Внесите обработчик и скажите игроку, чтобы он воспроизводил видео.

func playerDidReachEnd(notification: NSNotification) { 
    self.videoPlayer.seekToTime(kCMTimeZero) 
    self.videoPlayer.play() 
} 
+0

Обновлен мой код выше. Воспроизведение, но все равно не будет зацикливаться. Заранее спасибо за помощь больше – Opei

+0

Вы говорите, что это не будет петлять вообще или вы говорите, что есть небольшой разрыв между окончанием и началом видео? – ABeanSits

+0

Существует небольшой пробел. Я сделал еще одну нить об этом и, по-видимому, с ее бесшовной невозможностью с AVPlayer – Opei

Смежные вопросы