我正在制作一个tvOS应用程序。我正在创建一个简单的SHOW segue。在目标视图控制器中,我想要使用AVPlayerViewController
播放远程视频,但是当我按下按钮进行制作时,它不会立即发生。事实上,它等待将近2到3秒,然后转到目标视图控制器,视频几乎立即启动。我认为segue没有立即发生,因为AVPlayer正在加载视频。我不想要这种行为,我想要的是立即进行转换,然后可以在目标View Controller上显示活动指示器(旋转视图)。
这是我的目标View Controller的代码。
import Foundation
import UIKit
import AVKit
class PlayViewController : UIViewController {
var avplayerVC : AVPlayerViewController?
var videoUrlStr : String?
override func viewDidLoad() {
super.viewDidLoad()
print("In PlayViewController View Did Load")
avplayerVC = AVPlayerViewController()
let avAsset = AVAsset(URL: NSURL.init(string: videoUrlStr!)!)
let avPlayerItem = AVPlayerItem(asset: avAsset)
avplayerVC?.player = AVPlayer(playerItem: avPlayerItem)
avplayerVC?.player?.seekToTime(kCMTimeZero)
avplayerVC?.player?.play()
avplayerVC?.view.frame = (self.view?.frame)!
self.view.addSubview((avplayerVC?.view!)!)
}
override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(animated)
avplayerVC?.view.removeFromSuperview()
}
// MARK : AVPlayerViewControllerDelegate
}
有人可以帮助我实现这种行为吗?感谢
答案 0 :(得分:0)
看一下asset.loadValuesAsynchronouslyForKeys(keys: [String], completionHandler:)
这个方法可以让你完成一些加载,然后在完成处理程序中设置你的玩家。您可以将任何键传递给此方法,但您可以考虑使用的是持续时间,曲目和可播放的。
我能想到的另一个警告是,在你加载这些值后,你需要将你的玩家互动分配到主线程。