1

我正在制作一个 tvOS 应用程序。我正在创建一个简单的 SHOW segue。在目标视图控制器中,我想用 播放远程视频AVPlayerViewController,但是当我按下按钮进行转场时,它不会立即发生。事实上,它等待了将近 2 到 3 秒,然后转到目标视图控制器,视频几乎立即开始。我认为 segue 不会立即发生,因为 AVPlayer 正在加载视频。我不想要这种行为,我想要的是立即进行转换,然后可能会在目标视图控制器上显示一个活动指示器(旋转视图)。

这是我的目标视图控制器代码。

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


}

任何人都可以帮助我实现这种行为吗?谢谢

4

1 回答 1

0

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

我能想到的唯一其他警告是,加载这些值后,您需要将玩家交互分派到主线程。

于 2016-01-13T01:46:45.767 回答