在从前景导航到背景时如何暂停和播放背景视频?

时间:2016-05-13 17:42:14

标签: swift avplayerviewcontroller

我在启动应用时播放了背景视频。如果我碰巧按下主页按钮,我希望视频暂停并从中断处继续。这是我的代码:

class ViewController: UIViewController
{
    let moviePlayerController = AVPlayerViewController()
    var aPlayer = AVPlayer()
    func playBackgroundMovie()
    {
        if let url = NSBundle.mainBundle().URLForResource("IMG_0489", withExtension: "m4v")
        {
            aPlayer = AVPlayer(URL: url)
        }
        moviePlayerController.player = aPlayer
        moviePlayerController.view.frame = view.frame
        moviePlayerController.view.sizeToFit()
        moviePlayerController.videoGravity = AVLayerVideoGravityResizeAspect
        moviePlayerController.showsPlaybackControls = false
        aPlayer.play()
        view.insertSubview(moviePlayerController.view, atIndex: 0)
    }

    func didPlayToEndTime()
    {
        aPlayer.seekToTime(CMTimeMakeWithSeconds(0, 1))
        aPlayer.play()
    }


    override func viewDidLoad()
    {
        // Do any additional setup after loading the view, typically from a nib.
        super.viewDidLoad()
        playBackgroundMovie()
        NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.didPlayToEndTime), name: AVPlayerItemDidPlayToEndTimeNotification, object: nil)
    }

我是否必须在应用代理中执行某些操作?我看过以前的视频,但我认为其中一些是使用过时的swift版本。或者对我来说有点太困惑了。

2 个答案:

答案 0 :(得分:2)

您应该可以通过NSNotificationCenter注册后台/前台通知来播放或暂停您的aPlayer,如下所示:

let notificationCenter = NSNotificationCenter.defaultCenter()
    notificationCenter.addObserver(self, selector: #selector(pauseVideoForBackgrounding), name: UIApplicationDidEnterBackgroundNotification, object: nil)

有几个UIApplication通知名称,包括UIApplicationWillEnterForegroundNotification。您可以根据需要利用尽可能多的通知,让您的视频播放器课程了解应用状态发生的情况。

如果您支持iOS 8或更低版本,请务必从已添加到视图控制器的任何NSNotification中删除您的播放器类作为观察者。

答案 1 :(得分:0)

是的,所有特定于应用程序的操作都发生在您的appdelegate协议中。希望将暂停代码放在appdelegate的applicationDidEnterBackground函数中,将简历代码放在applicationWillEnterForeground中。

I would check out Apple's docs on the AppDelegate protocol,尤其是这两项功能,因为在您的应用变为非活动状态之前,您需要考虑完成任务所需的时间(尽管如此)如果您只是暂停并恢复AVPlayer,那么您应该没问题。