MPMoviePlayer在iOS 9中

我已经做了iOS 8的function在后台播放电影,现在当我想在iOS 9中使用它,它给了我一个警告,并说,最好不要使用MPMoviePlayer,而是使用AVPlayer。 但是我对AVPlayer一无所知。 我怎样才能将其转换为适当的function没有使用AVPlayer而不是MPMoviePlayer的警告? inheritance人的function:

func playVideo() ->Bool { let path = NSBundle.mainBundle().pathForResource("video", ofType:"mov") //take path of video let url = NSURL.fileURLWithPath(path!) moviePlayer = MPMoviePlayerController(contentURL: url) //asigning video to moviePlayer if let player = moviePlayer { player.view.frame = self.view.bounds //setting the video size to the view size player.controlStyle = MPMovieControlStyle.None //Hiding the Player controls player.prepareToPlay() //Playing the video player.repeatMode = .One //Repeating the video player.scalingMode = .AspectFill //setting the aspect ratio of the player self.view.addSubview(player.view) self.view.addSubview(blurView) self.view.sendSubviewToBack(blurView) self.view.sendSubviewToBack(player.view) //adding the player view to viewcontroller return true } return false } 

AVPlayerViewController是UIViewController的一个子类。 所以,而不是使用常规的视图控制器创build您的自定义电影播放器​​控制器如下:

不要inheritanceAVPlayerViewController。 覆盖此类的方法不受支持,并导致未定义的行为。

尝试像这样:

 import UIKit import AVKit import AVFoundation class MoviePlayerViewController: AVPlayerViewController { override func viewDidLoad() { super.viewDidLoad() player = AVPlayer(URL: url) videoGravity = AVLayerVideoGravityResizeAspect showsPlaybackControls = true // player?.play() // uncomment this line to autoplay NSNotificationCenter.defaultCenter().addObserver(self, selector: "didPlayToEndTime", name: AVPlayerItemDidPlayToEndTimeNotification, object: nil) } func didPlayToEndTime(){ print("didPlayToEndTime") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 

要使用它作为背景,你可以做如下:

 import UIKit import AVKit import AVFoundation class ViewController: UIViewController { let moviePlayerController = AVPlayerViewController() var aPlayer = AVPlayer() func playBackgroundMovie(){ if let url = NSBundle.mainBundle().URLForResource("video", withExtension: "mov") { 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() { super.viewDidLoad() playBackgroundMovie() NSNotificationCenter.defaultCenter().addObserver(self, selector: "didPlayToEndTime", name: AVPlayerItemDidPlayToEndTimeNotification, object: nil) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 

在ios 9中工作

 import AVFoundation let path = NSBundle.mainBundle().pathForResource("videoName", ofType:"mp4") let url = NSURL(fileURLWithPath: path!) let playerItem = AVPlayerItem(URL: url) let player = AVPlayer(playerItem: playerItem) let playerLayer = AVPlayerLayer(player: player) playerLayer.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.height) videoView.layer.addSublayer(playerLayer) player.actionAtItemEnd = AVPlayerActionAtItemEnd.None NSNotificationCenter.defaultCenter().addObserver(self, selector: "playerItemDidReachEnd", name: AVPlayerItemDidPlayToEndTimeNotification, object: player.currentItem) player.play() func playAction() { playerItem.seekToTime(kCMTimeZero) player.play() playButton.removeFromSuperview() playButton = nil } func playerItemDidReachEnd() { let buttonImage = UIImage(named: "playButton.png") playButton = UIButton(frame: CGRectMake((self.view.frame.width - 168) / 2, (self.view.frame.height - 110) / 2, 168, 110)) playButton.setImage(buttonImage, forState: .Normal) playButton.alpha = 0.6 playButton.addTarget(self, action: "playAction", forControlEvents: .TouchUpInside) self.view.addSubview(playButton) } 

导入UIKit导入MediaPlayer类videoView:UIViewController {

 var videoPlayer:MPMoviePlayerController! override func viewDidLoad() { super.viewDidLoad() let videoString:String = Bundle.main.path(forResource: "here you can place your video name", ofType:".mp4")! let videoURL = NSURL.init(fileURLWithPath: videoString) videoPlayer = MPMoviePlayerController(contentURL: videoURL as URL!) videoPlayer.view.frame = CGRect(x: 0, y: 0, width: videoView.frame.size.width, height: videoView.frame.size.height) videoView.addSubview(videoPlayer.view) videoPlayer.prepareToPlay() videoPlayer.shouldAutoplay = false videoPlayer.isFullscreen = false videoPlayer.controlStyle = MPMovieControlStyle.embedded } }