ios - 如何用本地目录中的 AVPlayerItem 类型的元素填充数组

标签 ios swift avplayer avqueueplayer

我在我的应用程序中使用 AVQueuePlayer,我需要一个数组,其中包含类型为 [AVPlayerItem] 的轨道。每次 TableView 加载时都必须创建数组。我还有一个包含当前文件夹中元素的数组“内容”来创建表格 View 单元格。如何将这些元素添加到数组“playerQueue”?

class TableViewController: UITableViewController {
    
    var currentDirectory: String?
    var content: [String] = []
    var player: AVQueuePlayer!
    var playerQueue: [AVPlayerItem] = []
    
    override func viewDidLoad() {
        super.viewDidLoad()
        reloadData()
    }
    
    func reloadData(needsReload: Bool = true) {
     
        if currentDirectory == nil {
            currentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
        }
        do {
            content = try FileManager.default.contentsOfDirectory(atPath: currentDirectory! )
        } catch {
            content = []
        }
        if needsReload {
            tableView.reloadData()
        }
    }

最佳答案

例如,如果您有 .m4v您的文档文件夹中的文件,您应该找到所有这些文件,然后将您的文件路径转换为 ​​AVPlayerItem 的(URL -> AVURLAsset -> AVPlayerItem),例如:

if let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
    if let content = try? FileManager.default.contentsOfDirectory(at: documentsUrl, includingPropertiesForKeys: nil) {
        let items = content
            .filter { $0.pathExtension == "m4v" }
            .map { AVURLAsset(url: $0)}
            .map { AVPlayerItem(asset: $0) }
        
        player = AVQueuePlayer(items: items)
        player?.play()
    }
}

关于ios - 如何用本地目录中的 AVPlayerItem 类型的元素填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62912425/

相关文章:

php - 使用 PHP 和 Swift 2 上传图片?

objective-c - iOS:直播AVPlayer

iOS - 我如何获得 AVPlayer 的可播放持续时间

iphone - remoteControlReceivedWithEvent 从未调用过

iphone - 在 UIScrollView 中滚动 CoreText

另一个 View 范围内的 iOS View

ios - 是否可以使用 UIKit 创建 PDF 表单

ios - 如何使用 UIButton 停止特定功能?

ios - 将 Realm 结果映射到 JSON 标准格式

ios - CollectionView numberOfItemsInSection 变量