当前位置: 首页 > 面试题库 >

iOS 9中的MPMoviePlayer

端木桐
2023-03-14
问题内容

我已经在iOS 8中实现了在后台播放电影的功能,现在当我想在iOS
9中使用它时,它会向我发出警告,并说最好不要使用MPMoviePlayer而是使用AVPlayer。但是我对AVPlayer一无所知。如何在不使用AVPlayer而不是MPMoviePlayer的警告的情况下将其转换为适当的函数?继承人的功能:

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的子类。因此,不要使用常规的视图控制器,而是按照以下步骤创建自定义电影播放器​​控制器:

不要将AVPlayerViewController子类化。不支持覆盖此类的方法,并导致未定义的行为。

尝试这样:

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.
    }
}


 类似资料:
  • 本文向大家介绍iOS9中的WebKit 与 Safari带来的惊喜,包括了iOS9中的WebKit 与 Safari带来的惊喜的使用技巧和注意事项,需要的朋友参考一下 每个用过 UIWebView 的iOS开发者对其诸多的限制和有限的功能也深有感触。悻然,自iOS8推出 WebKit 框架后将改变这一窘境。在本文我将会深入WebKit来体验一下它给我们带来的好处,同时也看看在iOS9中新加入的 S

  • 今天我注册了adMob,开始在我的应用程序中制作adMob广告。第一个是一个游戏(带有viewcontrollers),我想在游戏结束后在屏幕上显示一个间隙广告,所以我想在游戏结束后加载间隙广告(只有在游戏结束后才能访问此视图,并且游戏持续一分钟,所以它不应该出现得太频繁) 我看过很多教程,在youtube和admob网站上,我有很多问题,比如:即使我导入了它,也找不到admob框架,我在构建时禁

  • 当我调用我的api时,在ios9中遇到了这个错误,但它在ios8中运行良好,资源无法加载,因为应用程序传输安全策略要求使用安全连接

  • iOS 9 beta 1版有人遇到过这个问题吗? 我使用标准的NSURLConnection连接到一个Web服务,一旦调用该Web服务,我就会得到以下错误。这项功能目前在iOS 8.3中运行 可能是beta bug?任何想法都会很棒!我知道这是iOS 9开发的早期阶段 以下是完整的错误: CFNetwork SSL握手失败(-9824)NSURL会话/NSURLConnection HTTP加载失

  • 问题内容: 在ios8中可用的角度应用程序中进行路由会在ios9中产生[$ rootScope:infdig]错误。我都尝试过,但是结果是一样的。 有什么解决办法吗? 问题答案: 即使这被标记为该问题的重复。这是解决此问题的最佳方法。 ionic app iOS 9问题$ rootScope:infdig达到10个$digest()迭代 这篇文章中的选定答案将您带到该插件,该插件用angular修

  • 这似乎应该比目前更容易。 我正在尝试在任何iOS设备中以1:1(正方形)的纵横比居中绘制UIView,无论其方向如何。 详细信息:我的视图有一个绘制,它会在timeInterval上更新。我使用全屏视图,在每次绘制时计算我的平方。方向改变后,整个视图都陷入了地狱。我假设如果视图是方形的,我可以相信方向更改动画。 我的约束一再失败,这就是为什么这似乎应该更容易: 我的内容拥抱优先级为250 ,内容压

  • 本文向大家介绍iOS9提示框的正确使用方式,包括了iOS9提示框的正确使用方式的使用技巧和注意事项,需要的朋友参考一下 在从iOS8到iOS9的升级过程中,弹出提示框的方式有了很大的改变,在Xcode7 ,iOS9.0的SDK中,苹果已经明确提示不再推荐使用UIAlertView,而推荐使用UIAlertController,现在,我们通过代码来演示一下。 编写上述代码时,会有下列的警告提示: 说

  • 本文向大家介绍iOS9开放的新API--Spotlight使用指南,包括了iOS9开放的新API--Spotlight使用指南的使用技巧和注意事项,需要的朋友参考一下 1.Spotloight是什么?   Spotlight在iOS9上做了一些新的改进, 也就是开放了一些新的API, 通过Core Spotlight Framework你可以在你的app中集成Spotlight。集成Spotlig