MPMoviePlayerController已过时,现在该怎么办?

12

所以,由于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。

我尝试过这个 和其他看起来像它们的解决方案。但它们就是不能像我在上面的代码中那样工作。

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

请帮帮我。

添加额外信息:

所以,当我尝试使用这个解决方案(被接受的答案)或这个解决方案(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()
        }
    })
这种情况发生时,没有任何内容被显示。 这里输入图像描述

1
你的链接回答似乎是解决方案。能否详细说明一下“但它在上面的代码中就是不按我想要的方式工作”的问题是什么? - Curmudgeonlybumbly
当您尝试使用AVPlayerViewController时,遇到了哪些问题?您的问题并不合理。什么“不起作用”? - JAL
好的,我会编辑问题并添加图片 :) 但是在我提供的答案中,有两个问题: 第一个问题是没有任何内容播放,视图完全空白; 另一个问题是视频播放器被显示出来,但是是灰色的。我会截屏并将它们与代码一起添加。 - user4545564
1个回答

7
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()

仍然只是一个空视图:/ - user4545564
您的视频链接可能存在问题。我尝试了这个链接 - http://clips.vorwaerts-gmbh.de/VfE_html5.mp4 - 一切都按预期工作。请记住,如果您的视频链接不是https://,则需要配置应用程序传输安全策略。 - Olga Nesterenko
一个愚蠢的问题,我应该在我的viewDidLoad中做这个吗?像这样:override func viewDidLoad() { super.viewDidLoad() let urlPath: String = "http://clips.vorwaerts-gmbh.de/VfE_html5.mp4" let 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() } - user4545564
你对你的视图有其他看法吗?在你的Info.plist中是否有<key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict>? - Olga Nesterenko
我在一个新项目中尝试了一下,只是文件->新建->项目... 然后我尝试将其粘贴到viewdidload中以查看它是否有效。但甚至那里也不行。 - user4545564
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接