MPMoviePlayerController 已弃用,现在怎么办?

Posted

技术标签:

【中文标题】MPMoviePlayerController 已弃用,现在怎么办?【英文标题】:MPMoviePlayerController deprecated, what now? 【发布时间】:2016-04-26 16:04:25 【问题描述】:

所以当 MPMoviePlayerController 被弃用时,我一直在寻找解决方案。我当前的代码工作正常:

moviePlayer = MPMoviePlayerController(contentURL: receivedURL)
    moviePlayer!.movieSourceType = MPMovieSourceType.Unknown
    moviePlayer!.view.frame = view.bounds
    moviePlayer!.scalingMode = MPMovieScalingMode.AspectFill
    moviePlayer!.controlStyle = MPMovieControlStyle.None
    moviePlayer!.shouldAutoplay = true

    view.addSubview((moviePlayer?.view)!)
    moviePlayer?.setFullscreen(true, animated: true)
    moviePlayer!.play()

我录制了一个视频,录制完成后,它将在新视图中使用上面的代码播放。但据我了解 MPMoviePlayerController 在 ios9 中已弃用,我找不到任何像上面的代码一样工作的解决方案。我知道我需要用户 AVPlayer 和 AVPlayerViewController。

我已经尝试过this 和许多其他看起来像它们的解决方案。 但它不会像我在上面的代码中想要的那样工作。

我只想录制一段视频,并在新视图中播放,就像 snapchat 一样。

请帮帮我

添加的附加信息:

因此,当我尝试使用this(已接受的答案)或this solution(AVPlayer)修复它时,视图为空白。什么都没有显示。

var player:AVPlayer!
    let avPlayerLayer:AVPlayerLayer = AVPlayerLayer(player: player)
    avPlayerLayer.frame = CGRectMake(50,50,100,100)
    self.view.layer.addSublayer(avPlayerLayer)
    player = AVPlayer(URL: receivedURL)
    player.play()

如果我尝试使用我必须修改的AVPlayerViewController:

let player = AVPlayer(URL: receivedURL)
    let playerViewController = AVPlayerViewController()
    playerViewController.player = player
    dispatch_async(dispatch_get_main_queue(), 
        self.presentViewController(playerViewController, animated: true) 
            playerViewController.player?.play()
        
    )

发生这种情况,没有显示任何内容。

【问题讨论】:

您的链接答案似乎是解决方案。展开“但它不会像我在上面的代码中想要的那样工作。”究竟是什么问题? 您在尝试使用AVPlayerViewController 时遇到了哪些问题?你的问题没有意义。什么是“不工作?” 好的,我将编辑问题并添加图片:) 但是我链接的答案有两个问题第一个是没有播放任何内容,视图完全空白另一个问题是显示视频播放器,但为灰色。我将打印屏幕并用代码添加它们 【参考方案1】:
var player:AVPlayer!
let avPlayerLayer:AVPlayerLayer = AVPlayerLayer(player: player)
avPlayerLayer.frame = CGRect(x:50,y:50,width:100,height:100)
self.view.layer.addSublayer(avPlayerLayer)
player = AVPlayer(url: receivedURL)
player.play()

在这里,您将播放器添加到 AVPlayerLayer 后对其进行初始化。试试这样:

let player = AVPlayer(url: receivedURL)
let avPlayerLayer:AVPlayerLayer = AVPlayerLayer(player: player)
avPlayerLayer.frame = CGRect(x:50,y:50,width:100,height:100)
self.view.layer.addSublayer(avPlayerLayer)
player.play()

【讨论】:

仍然只是一个空视图:/ 您的视频网址可能有问题。我试过这个 - clips.vorwaerts-gmbh.de/VfE_html5.mp4 - 一切都按预期工作。请记住,如果您的视频 url 不是 https://,则需要配置 App Transport Security Policy。 一个愚蠢的问题,我应该在我的 viewdidload 中这样做吗?比如:覆盖 func viewDidLoad() super.viewDidLoad() 让 urlPath: String = "clips.vorwaerts-gmbh.de/VfE_html5.mp4" 让 url: NSURL = NSURL(string: urlPath)! let player = AVPlayer(URL: url) let avPlayerLayer:AVPlayerLayer = AVPlayerLayer(player: player) avPlayerLayer.frame = CGRectMake(50,50,100,100) self.view.layer.addSublayer(avPlayerLayer) player.play() 是的,在 viewDidLoad 中这样做是可以的。顺便说一句,对不起,我忘记了链接中的 http:// 不在那里,我认为它只是 *** 在粘贴到这里时将其删除。我在我的 viewdidload 中像上面的代码那样做了,但仍然是空白。

以上是关于MPMoviePlayerController 已弃用,现在怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

MPMoviePlayerViewController和MPMoviePlayerController的使用

MPMoviePlayerController 不播放 .wmv

如何显示 MPMoviePlayerController 控件?

MPMoviePlayerController 上的专辑封面

MPMoviePlayerController 已弃用,现在怎么办?

用 MPMoviePlayerController 替换 AVPlayer