I am working on tvOS app using swift. I am using AVPlayerViewController to play video following Apple demo app(UIKit Catalog (tvOS): Creating and customising UIKit Controls). Everything is working fine, but app enter background to foreground during video play then forward and backward not working and same issue is generating if user can goto sleep mode. This issue is also generating in Apple demo app.
I am not understand why this problem is generating. Please suggest me how to resolve it.
import UIKit
import Foundation
import AVKit
class ViewController: UIViewController ,AVPlayerViewControllerDelegate{
let playerController = AVPlayerViewController()
var playerObj:AVPlayer!
var asset:AVAsset!
var playerItem:AVPlayerItem!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.playVideo("http://p.events-delivery.apple.com.edgesuite.net/1509pijnedfvopihbefvpijlkjb/m3u8/hls_vod_mvp.m3u8")
}
override func viewWillAppear(animated: Bool) {
playerController.delegate = self
}
//MARK:- Play Video Method.
func playVideo(videoURL:String) {
print("video URL========\(videoURL)")
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
playerController.view.frame = CGRectMake(0.0, 0.0, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height)
playerController.delegate = self
self.view.addSubview(playerController.view)
self.playerController.showsPlaybackControls = true
self.playerItem.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions.New, context: nil)
self.playerController.player!.play()
//self.playerController.player!.play()
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>){
if object as? NSObject == playerItem && (keyPath! as NSString).isEqualToString("status") {
if (playerItem?.status == AVPlayerItemStatus.ReadyToPlay) {
print("Player Ready to play")
}
if (playerItem?.status == AVPlayerItemStatus.Failed) || (playerItem?.status == AVPlayerItemStatus.Unknown) {
print("Player getting play error")
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}