如何使用 AVPlayer 从数组中选择后播放下一首曲目

Posted

技术标签:

【中文标题】如何使用 AVPlayer 从数组中选择后播放下一首曲目【英文标题】:How to make play the next track after selected from array with AVPlayer 【发布时间】:2020-07-16 09:38:10 【问题描述】:

我想创建一个音频播放器。我从设备的本地目录中获取曲目,并将它们放入类型为 [AVPlayerItem] 的数组“playerQueue”中。 TableView 是用多行轨道创建的。我想点击任何行并且应该播放曲目 - 它有效。当前曲目结束后,应自动开始播放下一曲目。但我做不到。另外,我不能用 AVQueuePlayer 做到这一点——播放列表从一开始就开始播放。现在我的代码如下所示:

class TableViewController: UITableViewController 
...
    var player: AVPlayer!
    var playerQueue: [AVPlayerItem] = []
...
//Creating playerQueue from directory
private func createPlayerQueue(with content: [String], from directory: String?) -> [AVPlayerItem] 
        var playerQueue: [AVPlayerItem] = []
        content.forEach  (url) in
            let fileUrl = directory! + "/" + url
            let asset = AVAsset(url: URL(fileURLWithPath: fileUrl))
            let item = AVPlayerItem(asset: asset)
            playerQueue.append(item)
        
        return playerQueue
    
....
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
        let fullPath: String = currentDirectory! + "/" + content[indexPath.row]

                playerQueue = createPlayerQueue(with: content, from: currentDirectory)
                let currentItem = playerQueue[indexPath.row]
                player = AVPlayer(playerItem: currentItem)
                player.play()
    

【问题讨论】:

【参考方案1】:

您可以使用 Key-Value Observer 或 Notification Center 来控制 playerItem,例如:音量、持续时间、搜索...

例子:

 NotificationCenter.default.addObserver(self, selector: #selector(itemDidPlayToEndTime), name: .AVPlayerItemDidPlayToEndTime, object: playerItem)

@objc func itemDidPlayToEndTime(notification: Notification) 
        if (notification.object as? AVPlayerItem) == self.player.currentItem 
            // Play next item in your queue
        
    

【讨论】:

抱歉,如果我使用 let player:AVPlayer = let avPlayer = AVPlayer() av​​Player.automaticallyWaitsToMinimizeStalling = false return avPlayer () player.replaceCurrentItem(with: playerItem) / / playerItem 是 AVPlayerItem 也许你知道怎么解决? 试试这个源代码https://github.com/oCanKhacNguyen/videoPlayerDemo。可能对你有帮助

以上是关于如何使用 AVPlayer 从数组中选择后播放下一首曲目的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 avplayer 从文档目录播放视频文件

从 NavigationController 中移除 ViewController 后 AVPlayer 继续播放

使用 AVplayer 从 s3 播放视频时出现问题

如何比较 AVPlayer Current Item 和 MPMediaItem?

如何从 mediaPickerController 获取 mediaItemCollection 以在 AVPlayer 上播放?

使用 AVPlayer 在 UIView 中播放时间流逝