AVPlayerViewController play/pause not working in tvOS

562 Views Asked by At

I am working on tvOS app .I have a list of videos and before play main video need to play DFP ad with skip functionality. I have added skip button on the AVPlayerViewController's view and manage focus(move focus skip button to AVPlayerViewController's view). Focus is working fine if i added AVPlayerViewController as a childViewController but in main video play/pause functionality not working.

self.addChildViewController(playerController)
self.view.addSubview(playerController.view)

If i have added AVPlayerViewController as ParentViewController then focus is not working.

 self.view.addSubview(playerController.view)
 playerController.didMoveToParentViewController(self)

I have implemented blow code

let playerController = AVPlayerViewController()
var playerObj:AVPlayer!
var asset:AVAsset!
var playerItem:AVPlayerItem!


override func viewDidLoad() {
    super.viewDidLoad()

    playerController.view.frame = CGRectMake(0.0, 0.0, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height)
    self.addChildViewController(playerController)
    self.view.addSubview(playerController.view)
    self.preferredFocusedView
    self.updateFocusIfNeeded()
}
func playVideo(videoURL:String) {
    self.playerController.showsPlaybackControls = false
    self.asset = AVAsset(URL: NSURL(string: videoURL)!) as AVAsset
    self.playerItem = AVPlayerItem(asset: self.asset)
    self.playerObj = AVPlayer(playerItem: self.playerItem)
    self.playerController.player = self.playerObj
    self.playerItem.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions.New, context: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(VideoPlayerViewController.playerItemDidReachEnd(_:)), name:    AVPlayerItemDidPlayToEndTimeNotification, object: self.playerObj.currentItem)
    if !self.controlFlag{
        // For main video
        playFlag = true
        self.playerController.showsPlaybackControls = true

    }else{
     // for DFP ad
         playFlag = false
        NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(VideoPlayerViewController.playerStalledNotification(_:)), name: AVPlayerItemPlaybackStalledNotification, object: self.playerObj.currentItem)
    }
    self.playerController.player!.play()
}

 override var preferredFocusedView: UIView? {
    get {
        if skipAdsButton != nil {

            print("focus on skip button")
            return self.skipAdsButton
        }else{
             print("focus on super.preferredFocusedView")
            return super.preferredFocusedView
        }
    }
}

How to fix this issue. Please suggest it.

0

There are 0 best solutions below