Using Swift with AVPlayer, how do you add and remove a video via code?
13,990
Using the dispatch fixed the issue I was having.
dispatch_async(dispatch_get_main_queue()) {
self.player!.pause()
self.playerLayer!.removeFromSuperlayer()
}
Author by
B.Man
Updated on June 04, 2022Comments
-
B.Man almost 2 years
I'm new to Swift and am trying to add a video to the view and then remove it when my "stopScreenSaver" notification is dispatched. All seems to work well except for when I go to remove the video layer (playerLayer.removeFromSuperlayer()).
Any guidance would be appreciated. I feel like I'm missing some basic concept here for adding and removing the layer!
import UIKit import AVFoundation import QuartzCore import CoreMedia class ViewController: UIViewController { let contentURL = NSBundle.mainBundle().URLForResource("testvideo", withExtension: "mp4") var player = AVPlayer() var playerLayer = AVPlayerLayer() let screenSize : CGRect = UIScreen.mainScreen().bounds override func viewDidLoad() { super.viewDidLoad() // Used for starting and stopping the videos related to the screen saver NSNotificationCenter.defaultCenter().addObserver(self, selector: "playScreenSaver:", name: "playScreenSaverID", object: nil) NSNotificationCenter.defaultCenter().addObserver(self, selector: "stopScreenSaver:", name: "stopScreenSaverID", object: nil) } override func viewDidAppear(animated: Bool) { // Player player = AVPlayer(URL: contentURL!) // Layer for display… Video plays at the full size of the iPad playerLayer = AVPlayerLayer(player: player) var view = UIView(frame: CGRectMake(0, 0, screenSize.width, screenSize.height)) self.view.layer.addSublayer(playerLayer) playerLayer.frame = view.bounds } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } func playScreenSaver(notification: NSNotification){ print("play") dispatch_async(dispatch_get_main_queue()) { self.view.layer.addSublayer(self.playerLayer!) self.player!.play() } } func stopScreenSaver(notification: NSNotification){ print("pause") dispatch_async(dispatch_get_main_queue()) { self.player!.pause() self.playerLayer!.removeFromSuperlayer() } } }