播放下载到缓存目录中的歌曲

时间:2019-04-14 16:21:38

标签: swift

下载mp3并将其保存到“ Library / caches”文件夹中是可行的,但是以后再访问它则无效。

检查歌曲真的是否存在,我打开Finder进入模拟器文件夹。我的文件夹如下所示:

image

我的歌曲位于: Library / Caches / Digger / Flower.mp3

尝试使用AVPlayer进行访问:

    let folderName = "Digger"
    let fileName = "Flower.mp3"
    let url = FileManager.default
        .urls(for: .cachesDirectory, in: .userDomainMask)[0]
        .appendingPathComponent(folderName).appendingPathComponent(fileName)
    var urlString = url.absoluteString
    print("MyPath: \(urlString)")
    urlString.removeSubrange(urlString.range(of: "file://")!)

    let player = AVPlayer(url: URL(string: urlString)!)

    let playerViewController = AVPlayerViewController()
    playerViewController.player = player
    self.present(playerViewController, animated: true) {

        player.play()
    }

但是它不起作用。

运行时的模拟器截图:

screenShot1

1 个答案:

答案 0 :(得分:1)

您的URL处理不正确。

替换这些行:

var urlString = url.absoluteString
print("MyPath: \(urlString)")
urlString.removeSubrange(urlString.range(of: "file://")!)

let player = AVPlayer(url: URL(string: urlString)!)

具有:

let player = AVPlayer(url: url)

url已经是您需要的URL。无需尝试以任何方式进行转换。

作为参考,请使用url.path将文件URL转换为路径字符串。而且,如果您需要根据路径字符串创建URL,请使用URL(fileURLWithPath:),而不要使用URL(string:)。仅将URL(string:)与具有file://https://等URL方案的字符串一起使用。