Sepp没有立即发生AVPlayerViewController

时间:2015-11-10 15:27:14

标签: ios segue avplayer tvos avplayerviewcontroller

我正在制作一个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


}

有人可以帮助我实现这种行为吗?感谢

1 个答案:

答案 0 :(得分:0)

看一下asset.loadValuesAsynchronouslyForKeys(keys: [String], completionHandler:)这个方法可以让你完成一些加载,然后在完成处理程序中设置你的玩家。您可以将任何键传递给此方法,但您可以考虑使用的是持续时间,曲目和可播放的。

我能想到的另一个警告是,在你加载这些值后,你需要将你的玩家互动分配到主线程。