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