本地视频文件循环 tvOS
Local Video File loop tvOS
我正在尝试使用 Swift 为 tvOS 在 Xcode7 中播放一个简单的本地剪辑。我想要的只是让视频在视图和循环中加载全屏。我看到的每个教程都有旧的 MPMoviePlayerController
或从 URL 加载。在 tvOS 上执行此操作的最佳方法是什么?
更新 2:这使视频循环播放,但中间有一个停顿。现在研究它,看看如何无缝地做到这一点。
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()
}
}
假设您的文件名为 video.m4v
并存储在设备本地(不要忘记在构建阶段将其添加到复制捆绑资源)。创建一个存储的 属性 以便您可以访问 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()
}
我正在尝试使用 Swift 为 tvOS 在 Xcode7 中播放一个简单的本地剪辑。我想要的只是让视频在视图和循环中加载全屏。我看到的每个教程都有旧的 MPMoviePlayerController
或从 URL 加载。在 tvOS 上执行此操作的最佳方法是什么?
更新 2:这使视频循环播放,但中间有一个停顿。现在研究它,看看如何无缝地做到这一点。
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()
}
}
假设您的文件名为 video.m4v
并存储在设备本地(不要忘记在构建阶段将其添加到复制捆绑资源)。创建一个存储的 属性 以便您可以访问 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()
}