如何保存 AVPlayer 中的最后暂停时间,并在另一个故事板中寻找它?

Posted

技术标签:

【中文标题】如何保存 AVPlayer 中的最后暂停时间,并在另一个故事板中寻找它?【英文标题】:How can I save the last paused time in an AVPlayer, and seek to it in another storyboard? 【发布时间】:2020-11-15 21:03:42 【问题描述】:

我是 xCode/swift 的新手,所以请原谅我的经验不足。我有一个 ViewController,我的观众可以在其中收听一些音频播放。当播放器单击播放按钮时,播放是这样访问的:

@IBAction func buttonClicked(_ sender: RoundButton)

    self.clickedButton = sender
    guard let url = sender.url else 
        return
    

    let player = AVPlayer(url: url)
    
    let controller = AVPlayerViewController()
    controller.player = player
    
    present(controller, animated: true) 
        player.play()
    


我从另一个 *** 问题中得到了这段代码,所以我没有完全理解它。我的目标是能够保存 URL 和上次播放时间,以便用户可以最小化应用程序,或导航到不同的屏幕,然后能够单击“继续收听”按钮,该按钮将拉出另一个 AVPlayer最后使用的 URL。这个“继续收听”的 AVPlayer 会寻找上次播放的时间。

我知道我需要以某种方式观察第一个 AVPlayer,以便当它暂停、停止或置于后台时,我将 currentTime 保存到 NSUserDefault(我认为?)。我还需要保存 URL,因为用户可以点击许多不同的 URL。

我试过这样做,除了无法弄清楚观察结果之外,我也无法弄清楚 NSUserDefault 存在的类型不一致。我尝试在设置后将 URL NSDefault 值检索为字符串,但是当我使用 URL(string: lastPlayedURL) 将字符串转换为 URL 时,xCode 抱怨“无法将类型数据转换为预期类型的​​字符串”。

我使用其他 *** 问题来解决我的问题是我不明白将代码块放在哪里。我在哪里创建观察者?因为当我在“buttonClicked”的主体内创建 xCode 时,它​​似乎并不开心。

谢谢你听我闲聊。

【问题讨论】:

【参考方案1】:

是的,UserDefaults 似乎适合存储 URL。使用 this method 来执行此操作。

要观察玩家,您需要使用AVPlayerItem。这是some code,表明了这一点。

关于 Xcode(注意大写)和 Swift 语言的一般问题,恐怕这些是您需要通过阅读/观看教程/文档自己解决的问题。然后当你发现详细的问题时,在这里发布你的代码并询问。

祝你好运,玩得开心!

【讨论】:

以上是关于如何保存 AVPlayer 中的最后暂停时间,并在另一个故事板中寻找它?的主要内容,如果未能解决你的问题,请参考以下文章

如何在其他视图中使用 Swift 中的 AVPlayer 暂停和播放音乐

如何分配 AVPlayer 播放/暂停按钮 iOS?

处于暂停状态时如何强制 AVPlayer 暂停缓冲?

如何在 tvOS 上暂停我的 AVPlayer 实例?

使用 AVPlayer 播放音频时如何在 UIWebView 中暂停音频

如何在 tableViewCell 中控制 AVPlayer(通过滑块和搜索播放、暂停、进度)?