【问题标题】:AVPlayer not able to play after playing some itemsAVPlayer 播放某些项目后无法播放
【发布时间】:2016-08-22 07:49:59
【问题描述】:

我正在构建一个简单的游戏,我需要经常向用户显示 2 个视频,视频在我的本地捆绑包中。我只想在我的视图控制器上播放这些视频。我的代码是:

let playerItem = AVPlayerItem(URL: NSURL.fileURLWithPath("\(vdoPath)")) //vdoPath will be random of that two local video files from bundle
let player = AVPlayer(playerItem: playerItem)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
playerViewController.view.backgroundColor = UIColor.clearColor()
playerViewController.showsPlaybackControls = false
playerViewController.view.frame = self.playerView.bounds
self.playerView.addSubview(playerViewController.view)
self.addChildViewController(playerViewController)
player.play() 

AVPlayer 有时会播放视频,就像我直到 12-15 次才遇到问题,但是当我继续播放更多 AVPlayer 时无法播放它,显示如下: 我的文件和路径没有问题,因为在得到这个之前,我可以像我说的那样玩 12-15 次。请给我正确的解决方案和背后的原因。

【问题讨论】:

    标签: ios objective-c swift video avplayer


    【解决方案1】:

    对于将来面临这个问题并且@Jack 的解决方案不起作用的人,这里有一个对我有用的解决方案。顺便说一句,我的屏幕只是黑色的。它没有带有斜线的播放按钮......但无论如何,对我来说,根本问题是我有太多的 AVPlayer 和 AVPlayerLayer 实例(Apple显然限制了这个数字)。虽然我在关闭视图控制器时删除了图层并暂停了播放器,但播放器仍然被保留(我猜)。所以,我的解决方法是同时清除播放器实例和播放器层实例。这是我的代码:

    var player: AVPlayer?
    var layer: AVPlayerLayer?
    

    在关闭我的视图控制器之前,我添加了这个 sn-p:

     DispatchQueue.main.async {
            self.player?.pause()
            self.player = nil
            self.layer?.removeFromSuperlayer()
            self.layer = nil
    }
    

    【讨论】:

    • 有没有办法找出没有被 nilled 和删除的播放器或图层实例?
    【解决方案2】:

    您需要使用player.replacePlayerItem(item) 而不是两次调用 如果仍然无法正常工作,请随时问我。首先让 AVPlayer 播放第一个视频,然后等待控制器完成,然后再启动另一个。

    【讨论】:

    • 播放完视频后是否需要从父控制器中移除 playerViewController ?
    • 只需更改播放器项目即可获得
    • 我也面临同样的问题。我正在使用 replacePlayerItem 但在播放 16 个视频后,播放器总是显示无法解码并且无法播放任何进一步的视频。有什么帮助吗?
    • nmortada 我也有这个问题,16 次后无法播放,你找到解决办法了吗?
    • 我使用replacePlayerItem时没有问题,问题是我在视频之间切换时看到黑框。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多