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

Ios 如何使用本地目录中的AVPlayerItem类型的元素填充数组,ios,swift,avplayer,avqueueplayer,Ios,Swift,Avplayer,Avqueueplayer,我在我的应用程序中使用AVQueuePlayer,我需要一个带有[AVPlayerItem]类型曲目的数组。每次加载TableView时都必须创建数组。我还有一个数组“content”,其中包含当前文件夹中的元素,用于创建表视图单元格。如何将这些元素添加到数组“playerQueue” 我想我明白了。 需要创建支持功能: func createPlayerQueue(with content: [String], from directory: String?) -> [AVPlayerI

我在我的应用程序中使用AVQueuePlayer,我需要一个带有[AVPlayerItem]类型曲目的数组。每次加载TableView时都必须创建数组。我还有一个数组“content”,其中包含当前文件夹中的元素,用于创建表视图单元格。如何将这些元素添加到数组“playerQueue”

我想我明白了。 需要创建支持功能:

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
    }
并在func reloadData中调用它:

...
player = AVQueuePlayer(items: createPlayerQueue(with: content, from: currentDirectory))
...

它可以工作。

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

如果让documentsUrl=FileManager.default.url(对于:.documentDirectory,在:.userDomainMask中)。首先{
如果let content=try?FileManager.default.contentsOfDirectory(位于:documentsUrl,包括属性forkeys:nil){
让项目=内容
.filter{$0.pathExtension==“m4v”}
.map{avurlaste(url:$0)}
.map{AVPlayerItem(资产:$0)}
player=AVQueuePlayer(项目:项目)
玩家?.play()
}
}

例如,您应该按媒体扩展名筛选文件列表,以避免将来出现其他类型文件的问题。
...
player = AVQueuePlayer(items: createPlayerQueue(with: content, from: currentDirectory))
...